我有以下目录结构
Root
CommonSchema
1.xsd
2.xsd
Service1
XSD
3.xsd ( importing 1 and 2 xsd )
WSDL
A.wsdl ( importing 3.xsd )
Service2
XSD
4.xsd ( importing 1 and 2 xsd )
WSDL
B.wsdl ( importing 4.xsd )
我正在尝试生成源代码并使用 XMLBeans+CXF 将它们编译到一个 jar 中。 CommonSchema 文件夹具有由 Service1 和 2 共享的架构。
当我尝试生成源代码时,似乎源代码 1 和 2 xsd 存在命名冲突,如下所示:
第一代 WSDL
第二代 WSDL
关于我应该如何编译这个通用模式有什么想法吗?
这是我的 Ant 脚本:
<target name="cxfWSDLToJava">
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
<arg value="-databinding"/>
<arg value="xmlbeans"/>
<arg value="-client"/>
<arg value="-d"/>
<arg value="cxfsrc"/>
<arg value="D:\Generation\Services\CBS-CustAccountInfo-I\WSDL\CBS-CustAccountInfo-I-Concrete.wsdl"/>
<classpath>
<path refid="cxf.classpath"/>
</classpath>
</java>
</target>
<target name="cxfWSDLTXNToJava">
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
<arg value="-databinding"/>
<arg value="xmlbeans"/>
<arg value="-client"/>
<arg value="-d"/>
<arg value="cxfsrc"/>
<arg value="D:\Generation\Services\CBS-DirectDebCredTransfer-C\WSDL\CBS-DirectDebCredTransfer-C-Concrete.wsdl"/>
<classpath>
<path refid="cxf.classpath"/>
</classpath>
</java>
</target>
我的项目位于:here在 CXF 生成下。
整个模式+WSDL可以在CXF-Generation/Generation下找到
最佳答案
我不是 Ant 专家,所以我不确定我是对的,但我认为问题在于一个目标超越了另一个目标。
当运行 XmlBeans 命令时,如果你像运行 2 个单独的命令一样运行它:
wsdl2java -uri my_service1.wsdl
wsdl2java -uri my_service2.wsdl
第一个命令将生成一个 jar,第二个命令将使用第二个 wsdl 中的新代码覆盖它。
我认为你是这样运行它的,这就是为什么你只得到一个 wsdl 的代码。
您需要将它们组合成一个 wsdl(可能是一个包装器 wsdl),然后从中生成代码。
或者您可以生成 2 个不同的 jar。
编辑:
一点更正,显然 only IBM support importing a wsdl from another wsdl .
因此包装器选项不在考虑之列。恕我直言,这些是您的选择:
- 更改通用模式的目标命名空间,以免发生冲突并生成 2 个 jar。
- 将两个 wsdls 合并为一个(简单的复制粘贴)- 如果存在具有不同用途的同名方法/参数,可能会有点棘手。
关于java - 使用 XMLBeans 编译 2 个 WSDL 使用的共享模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11221809/