java - 使用 XMLBeans 编译 2 个 WSDL 使用的共享模式

标签 java xsd cxf xmlbeans

我有以下目录结构

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

enter image description here

第二代 WSDL

enter image description here

关于我应该如何编译这个通用模式有什么想法吗?

这是我的 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 .

因此包装器选项不在考虑之列。恕我直言,这些是您的选择:

  1. 更改通用模式的目标命名空间,以免发生冲突并生成 2 个 jar。
  2. 将两个 wsdls 合并为一个(简单的复制粘贴)- 如果存在具有不同用途的同名方法/参数,可能会有点棘手。

关于java - 使用 XMLBeans 编译 2 个 WSDL 使用的共享模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11221809/

相关文章:

PHP - 使用 unicode 正则表达式的 XSD 模式验证错误

java - Apache CXF : How to secure JAX-RS web service with basic authentication

java - JMS - 即使与远程提供程序的连接正常,也无法创建 session 工厂

java - 在 java 中评估十进制值时遇到问题

java - 将列表传递给 freemarker

java - 通过 json 对其他请求的多个 API 调用进行迭代

xml - XMLSchema 中复杂类型的联合

java - 使用 xsd :any for extensible schema

java - 如何通过非 Spring 配置文件配置 Apache CXF 以使用单个 JAXBContext?

java - 输入流以-1开头