Problema generando Java client SOAP servizi web con JDK strumento wsimport da un WSDL generato da un'applicazione .NET 2.0

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

Domanda

Sto cercando di generare un cliente per alcuni servizi SOAP web utilizzando lo strumento wsimport JDK 6. Il WSDL è stato generato da un'applicazione .NET 2.0. Per le applicazioni .NET 3.X, funziona benissimo.

Quando eseguo

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

mostra diversi messaggi di errore in questo modo:

  

[ERRORE] Una classe / interfaccia con lo stesso nome "mypackage.SomeClass" è già in uso.   Utilizzare una personalizzazione di classe per risolvere questo conflitto. linea ?? di http: // myservice WSDL

Quando ho generare il client ai servizi Web utilizzando Axis 1.4 (utilizzando l'Eclipse WebTools plug-in).

Qualcuno sa cosa posso fare per utilizzare lo strumento wsimport? Io davvero non capisco quale sia la cosa "class personalizzazione" è.

È stato utile?

Soluzione

Non so se questo è stato mai risolto, ma ho trascorso qualche tempo googling per una soluzione a questo stesso problema.

Ho trovato qui una correzione - https: // JAX- ws.dev.java.net/issues/show_bug.cgi?id=228

La soluzione è quella di eseguire wsimport con il -B-XautoNameResolution (senza spazi)

Altri suggerimenti

Per chiunque la lettura di questo usando Maven, questo è il modo di inserirlo nel file .pom. Si notino le args nella sezione di configurazione. Questo non è molto facile da trovare nella documentazione. Molte grazie a Isaac Stephens per il suo aiuto con questo.

<!-- 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>

La risposta accettata sopra dovrebbe risolvere il tuo problema, ma andrei risolvere la causa di fondo.

Il problema sta accadendo perché un'operazione nel file WSDL ha lo stesso nome di un xsd: complexType nel file XSD - come nell'esempio qui sotto. Tutti i tipi e le operazioni dovrebbero avere nomi univoci.

<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>

Quindi, controllare le operazioni e tipi. Assicurarsi che nessuno di loro ha lo stesso nome cioè senza i nomi duplicati.

Si sono forse generando tutte le classi dal file WSDL nella stessa confezione. Se questo è il caso, provare a specificare un pacchetto di destinazione diversa per ogni file WSDL con l'opzione -p di wsimport.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top