.NET 2.0アプリケーションによって生成されたWSDLからJDKツールwsimportの持つJava SOAP Webサービスクライアントを生成する問題
-
16-09-2019 - |
質問
私は、JDK 6のツールwsimport
を使用して、いくつかのSOAP Webサービスのクライアントを生成しようとしています。
WSDLは、.NET 2.0アプリケーションによって生成されました。 .NETの3.Xアプリケーションの場合、それが正常に動作します。
私は実行すると、
wsimport -keep -p mypackage http://myservice?wsdl
それは、このようないくつかのエラーメッセージを示しています:
[ERROR]同じ名前のクラス/インタフェース「mypackage.SomeClass」が既に使用されています。 この競合を解決するために、クラスのカスタマイズを使用してください。ライン?? ます。http:// MYSERVICE WSDL の
私は(EclipseのWebToolsのプラグインを使用して)軸1.4を使用してWebサービス・クライアントを生成するときます。
誰もが私はwsimport
ツールを使用するために何ができるか知っていますか?私は本当に「classカスタマイズ」ものが何であるかを理解していません。
解決
これは今までに解決した場合、私は知らないが、私はこの同じ問題を解決するためにグーグルでいくつかの時間を費やしています。
私はここに修正を発見した - ます。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>
上記の受け入れ答えはあなたの問題を解決するだろうが、根本的な原因を修正wouldntは。
以下の例のように - あなたのXSDファイルでcomplexTypeの:あなたのWSDLファイルの操作は、XSDと同じ名前を持っているので、問題が起きています。すべてのタイプと操作は、ユニークな名前を持っている必要があります。
<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ファイルに別のターゲットパッケージを指定してみてください。