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