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
ツールを使用するために何ができるか知っていますか? 「クラスのカスタマイズ」とは何なのか本当にわかりません。
これが解決されたかどうかはわかりませんが、この同じ問題の解決策を探すのにしばらく時間を費やしました。
ここで修正を見つけました- https://jax-ws.dev.Java.net/issues/show_bug.cgi?id=228
解決策は、-B-XautoNameResolution
(スペースなし)を指定してwsimportを実行することです。
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>
上記の受け入れられた答えはあなたの問題を解決しますが、根本的な原因を修正しません。
次の例のように、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>
そのため、操作とタイプを確認してください。同じ名前、つまり重複する名前がないことを確認してください。
同じパッケージのWSDLファイルからすべてのクラスを生成している可能性があります。その場合は、wsimportの-pオプションを使用して、WSDLファイルごとに異なるターゲットパッケージを指定してみてください。