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".
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)
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>
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.
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.