Création de problèmes client Java SOAP web services avec l'outil JDK wsimport à partir d'une WSDL générée par a.NET 2.0 application

j'essaie de générer un client pour certains services web SOAP en utilisant L'outil JDK 6 wsimport. La WSDL a été générée par une application .NET 2.0. Pour. NET 3.Les applications X, il fonctionne très bien.

Quand je lance

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

il affiche plusieurs messages d'erreur comme ceci:

[ERROR] Une classe / interface avec le même nom "mypackage.SomeClass" est déjà en cours d'utilisation. Utilisez une personnalisation de classe pour résoudre ce conflit. ligne ?? de http://myservice?wsdl

quand je génère le client web services en utilisant Axis 1.4 (en utilisant le plugin Eclipse WebTools).

quelqu'un sait ce que je peux faire pour utiliser le wsimport outil? Je ne comprends vraiment pas ce qu'est la "personnalisation de classe".

37
demandé sur Eddie 2009-04-24 17:54:37

4 réponses

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

j'ai trouvé un fix ici - https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228

la solution est de lancer wsimport avec le -B-XautoNameResolution (sans les espaces)

84
répondu PaulH 2009-09-16 19:20:32

pour ceux qui lisent ceci en utilisant maven, voici comment l'ajouter à la .fichier pom. Notez les args dans la section configuration. Ce n'est pas très facile à trouver dans la documentation. Merci beaucoup à Isaac Stephens pour son aide.

<!-- 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>
21
répondu Margaret Lydon 2017-08-13 20:12:12

il est possible que vous génériez toutes les classes à partir du fichier WSDL dans le même paquet. Si c'est le cas, essayez de spécifier un paquet cible différent pour chaque fichier WSDL avec l'option-p de wsimport.

0
répondu simon 2009-04-24 17:37:14

la réponse acceptée ci-dessus résoudrait votre problème mais ne résoudrait pas la cause sous-jacente.

le problème se produit parce qu'une opération dans votre fichier wsdl a le même nom qu'un xsd:complexType dans votre fichier xsd - comme l'exemple ci-dessous. Tous les types et 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 vos types. Assurez-vous qu'aucun d'entre eux ont le même nom, c'est à dire pas de noms en double.

0
répondu Abhi Rampal 2016-03-09 20:10:32