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 に答える