42

我正在尝试使用 JDK 6 工具为某些 SOAP Web 服务生成客户端wsimport。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

4 回答 4

94

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

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

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

于 2009-09-16T19:20:32.977 回答
22

对于使用 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>
于 2012-03-13T04:33:29.357 回答
1

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

发生此问题是因为 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>

所以检查你的操作和类型。确保它们都没有相同的名称,即没有重复的名称。

于 2016-03-08T23:58:12.257 回答
0

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

于 2009-04-24T13:57:40.330 回答