Problem zu erzeugen Java SOAP Web Services Client mit JDK-Tool wsimport aus einer WSDL durch eine 2.0-Anwendung .NET erzeugt
-
16-09-2019 - |
Frage
Ich versuche, einen Client für einige SOAP Web Services wsimport
mit dem JDK 6-Tool zu generieren.
Die WSDL wurde von einer .NET 2.0-Anwendung generiert. Für .NET 3.X-Anwendungen, es funktioniert gut.
Wenn ich ausführen
wsimport -keep -p mypackage http://myservice?wsdl
es zeigt mehrere Fehlermeldungen wie folgt aus:
[ERROR] Eine Klasse / Schnittstelle mit dem gleichen Namen „mypackage.SomeClass“ ist bereits im Einsatz. Verwenden Sie eine Klasse Anpassung diesen Konflikt zu lösen. Linie ?? von http: // myservice Wsdl
Wenn ich erzeugen, um die Web-Services-Client-Achse 1.4 (mit dem Eclipse-WebTools Plug-in).
Weiß jemand, was kann ich tun, um das wsimport
Werkzeug zu benutzen? Ich verstehe wirklich nicht, was die „Klasse customization“ Sache ist.
Lösung
Ich weiß nicht, ob dies jemals gelöst war, aber ich habe eine Lösung für dieses gleiche Problem einig Zeit googeln.
Ich fand ein Update hier - https: // jax- ws.dev.java.net/issues/show_bug.cgi?id=228
Die Lösung ist wsimport mit dem -B-XautoNameResolution
(ohne Leerzeichen)
Andere Tipps
Für alle, dies mit Maven zu lesen, das ist, wie es Datei in dem .pom hinzuzufügen. Beachten Sie den args im Konfigurationsabschnitt. Dies ist nicht sehr leicht in der Dokumentation gefunden. Vielen Dank an Isaac Stephens für seine Hilfe bei diesem.
<!-- 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>
Die akzeptierte Antwort oben würde Ihr Problem lösen, aber würde nicht die zugrunde liegende Ursache beheben.
Das Problem geschieht, weil eine Operation in Ihrer WSDL-Datei den gleichen Namen wie ein XSD hat: complex in Ihrem XSD-Datei - wie im folgenden Beispiel. Alle Typen und Operationen sollten eindeutige Namen haben.
<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>
So Ihre Operationen und Typen überprüfen. Stellen Sie sicher, dass keiner von ihnen haben den gleichen Namen heißt keine doppelten Namen.
Sie sind möglicherweise alle Klassen aus der WSDL-Datei im gleichen Paket zu erzeugen. Wenn das der Fall ist, versuchen Sie ein anderes Zielpaket für jede WSDL-Datei mit der Option -p von wsimport angeben.