我必须与一组Web服务交互,每个服务都有自己的WSDL和XSD。 XSD有时会合并成一个文件,有时会沿着多个文件传播(20-30)。然而,根据经验,我知道大多数消息结构和数据共享一个很大的公共子集,在不同的事务中可能只有20%不同。如何合并来自不同服务的WSDL和XSD的公共部分?
不幸的是,我无法控制服务器部件或服务的声明,所以让他们修复它是不可能的。客户端的第一个版本分别生成了每个服务,然后将它们作为单独的外观用作另一个系统的适配器,形成一个连贯的高级服务。
我用默认的JAXB绑定使用CXF并为每个服务强加了不同的生成包。我这样做是因为一些大多数服务使用通用的数据模型,但并不是所有的都使用相同的版本或定制,所以我有冲突,因此选择了暴力行为,以便我可以完成系统。
但是,这会导致适配器的内存要求通过屋顶,因为每个服务加载其上下文。现在,我已经向上提供了500M的内存,仅用于安装服务客户端的适配器,甚至在我开始发送请求和处理响应之前。尽管我可以使用当前的情况运行系统而没有任何问题,但这会造成妨碍解决方案部署的限制;我的客户希望大幅度降低这个比例(60%或更多),以便这个系统可以和其他人一起安装而不需要硬件升级。
问题如下: 是否有一种工具或技术可以让我将每个事务的公共部分放在一起,以便它们可以一次生成并在需要时引用?
除了将系统重新分配到不同的框架或数据绑定所需的时间之外,我没有与CXF或JAXB绑定。
非常感谢您的帮助。
---编辑---
谢谢布莱斯。这指向JAXB的一个有用功能:剧集。不幸的是,我仍然需要提取不同服务的通用基础部分。所以现在我需要的是通过结构差异来提取这些公共部分的方法,这是一种diff工具,它可以了解XSD描述的结构和类型层次结构,以便将适当的引用连接到公共部分专业部分。
您可能有兴趣在EclipseLink JAXB(MOXy)中关注以下相关功能:https://bugs.eclipse.org/340997 – 2011-03-25 20:21:22
他们是否使用共享名称空间作为共享部分?如果不是,你就是SOL,因为各个部分根本不明白它们是相同的。 – 2011-06-01 15:02:01
1Gb的内存成本是多少?你的时间多少钱?将此指出给客户。 – artbristol 2011-06-03 09:41:46