我需要与一组 Web 服务交互,每个服务都有自己的 WSDL 和 XSD。XSD 有时在单个文件中合并,有时在多个文件中分散(20-30)。然而,通过经验我知道,大部分消息结构和数据共享一个大的公共子集,也许只有不同交易中的20%是不同的。
不幸的是,我无法控制服务器部分或服务的声明,因此让它们进行修复是行不通的。第一个客户端版本单独生成了每个服务,然后将它们用作个体外观来形成一个连贯的更高级别服务,作为另一个系统的适配器。
我使用默认的 JAXB 绑定和强制实施了不同的生成包以供每个服务使用 CXF。我这样做是因为一些服务使用共同数据模型,但不是所有服务都使用相同的版本或自定义,因此我存在冲突,因此选择了野蛮力量,以便我可以完成该系统。
然而,这会导致适配器的内存需求飙升,因为每个服务都会加载其上下文。现在,在发送请求和处理响应之前,我已经使用了超过500M的内存来容纳服务客户端的适配器。虽然我可以在当前情况下运行系统而没有问题,但这会创建约束,从而危及解决方案的部署;我的客户希望将这个系统的内存要求大幅降低(60%或更多),以便可以在不需要硬件升级的情况下安装该系统。
问题如下: 是否有工具或技术可以将每个事务的公共部分放在一起,使其可以生成一次并在需要时引用? 除了重新设计系统使用其他框架或数据绑定所需的时间外,我没有限制使用 CXF 或 JAXB。
提前感谢您的帮助。
不幸的是,我无法控制服务器部分或服务的声明,因此让它们进行修复是行不通的。第一个客户端版本单独生成了每个服务,然后将它们用作个体外观来形成一个连贯的更高级别服务,作为另一个系统的适配器。
我使用默认的 JAXB 绑定和强制实施了不同的生成包以供每个服务使用 CXF。我这样做是因为一些服务使用共同数据模型,但不是所有服务都使用相同的版本或自定义,因此我存在冲突,因此选择了野蛮力量,以便我可以完成该系统。
然而,这会导致适配器的内存需求飙升,因为每个服务都会加载其上下文。现在,在发送请求和处理响应之前,我已经使用了超过500M的内存来容纳服务客户端的适配器。虽然我可以在当前情况下运行系统而没有问题,但这会创建约束,从而危及解决方案的部署;我的客户希望将这个系统的内存要求大幅降低(60%或更多),以便可以在不需要硬件升级的情况下安装该系统。
问题如下: 是否有工具或技术可以将每个事务的公共部分放在一起,使其可以生成一次并在需要时引用? 除了重新设计系统使用其他框架或数据绑定所需的时间外,我没有限制使用 CXF 或 JAXB。
提前感谢您的帮助。
谢谢 Blaise。这指向了 JAXB 的一个有用功能:episodes。不幸的是,我仍然需要提取不同服务的共同基础部分。所以现在我需要一种通过结构差异来提取这些公共部分的方法,即一种能够意识到 XSD 描述的结构和类型层次结构的差异工具,以便将适当的引用放置在公共部分与专业部分之间。