【问题标题】:Problem generating Java SOAP web services client with JDK tool wsimport from a WSDL generated by a .NET 2.0 application使用 JDK 工具 wsimport 从 .NET 2.0 应用程序生成的 WSDL 生成 Java SOAP Web 服务客户端时出现问题
【发布时间】:2010-10-21 14:52:07
【问题描述】:

我正在尝试使用 JDK 6 工具 wsimport 为某些 SOAP Web 服务生成客户端。 WSDL 由 .NET 2.0 应用程序生成。对于 .NET 3.X 应用程序,它可以正常工作。

当我跑步时

wsimport -keep -p mypackage http://myservice?wsdl

它显示了几个这样的错误消息:

[错误] 同名“mypackage.SomeClass”的类/接口已在使用中。 使用类自定义来解决此冲突。线 ??的http://myservice?wsdl

当我使用 Axis 1.4(使用 Eclipse WebTools 插件)生成 Web 服务客户端时。

有人知道我该怎么做才能使用wsimport 工具吗?我真的不明白“类自定义”是什么。

【问题讨论】:

    标签: java .net web-services axis wsimport


    【解决方案1】:

    我不知道这是否已经解决,但我花了一些时间在谷歌上搜索解决同样问题的方法。

    我在这里找到了解决方法 - https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228

    解决方案是使用-B-XautoNameResolution(无空格)运行 wsimport

    【讨论】:

    • 通过在wsimport 命令后面添加此代码解决了问题。但是对我来说这个问题的根源,有两种不同的类型,相邻的XResponse和下划线X_Response所以会发生名称冲突,如果命名可以理解为XResponseXResponseDefinition,那就没问题了.
    • 节省了我的时间。非常感谢。->wsimport -keep -verbose example.wsdl -B-XautoNameResolution
    【解决方案2】:

    对于任何使用 maven 阅读本文的人,这是将其添加到 .pom 文件的方法。请注意配置部分中的参数。这在文档中不是很容易找到。非常感谢 Isaac Stephens 在这方面的帮助。

    <!-- definition for ERPStandardWork service -->
    <execution>
      <id>ERPStandardWorkService</id>
      <goals>
        <goal>wsimport</goal>
      </goals>
      <configuration>
        <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. -->
        <args>
           <arg>-B-XautoNameResolution</arg>
        </args>
        <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory>
        <wsdlFiles>
            <wsdlFile>ERPStandardWork.wsdl</wsdlFile>
        </wsdlFiles>
          <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl
        </wsdlLocation>
        <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag
        </staleFile>
      </configuration>
    </execution>
    

    【讨论】:

      【解决方案3】:

      上面接受的答案可以解决您的问题,但不能解决根本原因。

      出现问题是因为 wsdl 文件中的操作与 xsd 文件中的 xsd:complexType 同名 - 如下例所示。所有类型和操作都应该有唯一的名称。

      <xsd:complexType name="SearchDocuments">
            <xsd:sequence>
              <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/>
            </xsd:sequence>
      </xsd:complexType>
      
      <operation name="SearchDocuments">
            <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/>
            <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/>
      </operation>
      

      因此请检查您的操作和类型。确保它们都没有相同的名称,即没有重复的名称。

      【讨论】:

        【解决方案4】:

        您可能从同一个包中的 WSDL 文件生成所有类。如果是这种情况,请尝试使用 wsimport 的 -p 选项为每个 WSDL 文件指定不同的目标包。

        【讨论】:

        • 这真的不是问题,我使用了不同的 -p 选项。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多