Problem zu erzeugen Java SOAP Web Services Client mit JDK-Tool wsimport aus einer WSDL durch eine 2.0-Anwendung .NET erzeugt

StackOverflow https://stackoverflow.com/questions/785945

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.

War es hilfreich?

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)

laufen

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top