使用JDK工具wsimport从.NET 2.0应用程序生成的WSDL生成Java SOAP Web服务客户端时出现问题

时间:2009-04-24 13:54:38

标签: java .net web-services axis wsimport

我正在尝试使用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工具吗?我真的不明白“类定制”是什么。

4 个答案:

答案 0 :(得分:87)

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

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

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

运行wsimport

答案 1 :(得分:21)

对于使用maven阅读此内容的任何人,这是如何将其添加到.pom文件中。请注意配置部分中的args。这在文档中不是很容易找到。非常感谢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>

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

问题正在发生,因为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>

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