web-dev-qa-db-ja.com

生成の問題Java SOAP .NET 2.0アプリケーションによって生成されたWSDLからのJDKツールwsimportを使用したWebサービスクライアント

JDK 6ツールwsimportを使用して、一部のSOAP Webサービスのクライアントを生成しようとしています。WSDLは.NET 2.0アプリケーションによって生成されました。NET3の場合。 Xアプリケーション、それは正常に動作します。

私が走るとき

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

次のようないくつかのエラーメッセージが表示されます。

[エラー]同じ名前 "mypackage.SomeClass"のクラス/インターフェースはすでに使用されています。クラスのカスタマイズを使用して、この競合を解決してください。ライン??の http:// myservice?wsdl

Axis 1.4を使用して(Eclipse WebToolsプラグインを使用して)Webサービスクライアントを生成するとき。

誰かがwsimportツールを使用するために何ができるか知っていますか? 「クラスのカスタマイズ」とは何なのか本当にわかりません。

41
razenha

これが解決されたかどうかはわかりませんが、この同じ問題の解決策を探すのにしばらく時間を費やしました。

ここで修正を見つけました- https://jax-ws.dev.Java.net/issues/show_bug.cgi?id=228

解決策は、-B-XautoNameResolution(スペースなし)を指定してwsimportを実行することです。

91
PaulH

Mavenを使用してこれを読んでいる人にとっては、これが.pomファイルに追加する方法です。構成セクションの引数に注意してください。これはドキュメントでは簡単に見つかりません。これを手伝ってくれたアイザック・スティーブンスに感謝します。

<!-- 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>
22
Margaret Lydon

上記の受け入れられた答えはあなたの問題を解決しますが、根本的な原因を修正しません。

次の例のように、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>

そのため、操作とタイプを確認してください。同じ名前、つまり重複する名前がないことを確認してください。

1
Abhi Rampal

同じパッケージのWSDLファイルからすべてのクラスを生成している可能性があります。その場合は、wsimportの-pオプションを使用して、WSDLファイルごとに異なるターゲットパッケージを指定してみてください。

0
simon