Un problème de génération de services Web Java SOAP client avec wsimport d'outil JDK à partir d'un WSDL généré par une application .NET 2.0

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

Question

Je suis en train de générer un client pour certains services Web SOAP en utilisant le JDK 6 wsimport outil. Le WSDL a été générée par une application .NET 2.0. Pour les applications .NET 3.X, il fonctionne très bien.

Quand je lance

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

il montre plusieurs messages d'erreur comme ceci:

  

[ERREUR] Une classe / interface avec le même nom « mypackage.SomeClass » est déjà utilisé.   Utilisez une personnalisation de classe pour résoudre ce conflit. ligne ?? de http: // myservice wsdl

Lorsque je génère le client de services Web à l'aide de l'Axe 1,4 (en utilisant le plug-in Eclipse WebTools).

Quelqu'un sait-il ce que je peux faire pour utiliser l'outil wsimport? Je ne comprends vraiment pas ce que la chose « personnalisation classe » est.

Était-ce utile?

La solution

Je ne sais pas si cela n'a jamais été résolu, mais j'ai passé un peu de temps googler une solution à ce même problème.

J'ai trouvé une solution ici - https: // jax- ws.dev.java.net/issues/show_bug.cgi?id=228

La solution consiste à exécuter avec le wsimport -B-XautoNameResolution (sans espace)

Autres conseils

Pour toute personne lisant cela en utilisant maven, voici comment l'ajouter au fichier .pom. Notez les args dans la section de configuration. Ce n'est pas très facile à trouver dans la documentation. Un grand merci pour son aide avec ce à Isaac Stephens.

<!-- 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 réponse ci-dessus acceptée résoudrait votre problème, mais wouldnt corriger la cause sous-jacente.

La question se produit parce que l'opération dans votre fichier wsdl a le même nom qu'une xsd: complexType dans votre fichier xsd - comme dans l'exemple ci-dessous. Tous les types et les opérations doivent avoir des noms uniques.

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

Vérifiez donc vos opérations et types. Assurez-vous qu'aucun d'entre eux ont le même nom dire qu'aucun nom en double.

Vous générez peut-être toutes les classes à partir du fichier WSDL dans le même package. Si tel est le cas, essayez de spécifier un package cible différent pour chaque fichier WSDL avec l'option -p de wsimport.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top