Comment utiliser une classe de personnalisation pour résoudre le fichier de générer des conflits
Je suis en train d'utiliser Maven pour générer JAXB des fichiers utilisés par le framework Spring, mais Maven affiche les erreurs suivantes:
Je comprends qu'il est incapable de générer des fichiers avec les noms, mais je ne suis pas sûr de la façon de résoudre le problème. Jusqu'à présent, j'ai visité les liens suivants. Un, Deux, Trois
org.xml.sax.SAXParseException; systemId: http://www5v80.elsyarres.net/service.asmx?wsdl; lineNumber: 5; columnNumber: 39; A class/interface with the same name "hello.wsdl.SearchFlights" is already in use. Use a class customization to resolve this conflict.
....
org.xml.sax.SAXParseException; systemId: http://www5v80.elsyarres.net/service.asmx?wsdl; lineNumber: 12; columnNumber: 43; (Relevant to above error) another "SearchFlights" is generated from here.
....
org.xml.sax.SAXParseException; systemId: http://www5v80.elsyarres.net/service.asmx?wsdl; lineNumber: 371; columnNumber: 42; A class/interface with the same name "hello.wsdl.GetFlightDetails" is already in use. Use a class customization to resolve this conflict.
....
Plugin Maven
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>hello.wsdl</generatePackage>
<schemas>
<schema>
<url>http://www5v80.elsyarres.net/service.asmx?wsdl</url>
</schema>
</schemas>
</configuration>
</plugin>
J'ai ajouté à la suite de package-info.java
fichier à la hello.wsdl
package, mais il n'a pas aidé.
@XmlSchema(
namespace = "ElsyArres.API",
elementFormDefault = XmlNsForm.QUALIFIED)
package hello.wsdl;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
avez-vous été en mesure de résoudre ce problème?? Si oui, comment? Je suis aussi face à problème similaire et je ne veux pas aller de l'avant avec
<arg>-XautoNameResolution</arg>
option. Je suis intéressé pour la liaison approche.
OriginalL'auteur Daniel Newtown | 2016-01-31
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur, vous êtes face stipule essentiellement que certains noms dans la
types
section de votre wsdl êtes-vous utilisé deux fois. Dans votre cas tous<element>
les balises ont le même nom que leurs types correspondants (défini comme<complexType>
).Exemple:
C'est assez rare.
Il existe essentiellement deux options pour résoudre ces problèmes:
Utilisation autoNameResolution
Le plugin permet de résoudre tous les conflits par le biais de ajoutant des numéros à chaque collision de nom. Dans le cas visé ci-dessus de SearchFlights ce résultat SearchFlights et SearchFlights2 généré.
Une meilleure façon serait d'utiliser une liaison de fichier pour résoudre tous les conflits de noms à l'avance. Liaison de fichiers contiennent en grande partie des
XPATH
expression et de règles de transformation.Une liaison de fichier qui ajoute à chaque déclarations nom est la suivante:
Il y a d'autres options pour
jaxb:nameXmlTransform
comme des suffixes et ajoutant à d'autres types d'éléments xml (comme les types).Malheureusement je ne pouvais pas travailler de cette liaison de fichiers avec l'
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
( mais je suis sûr qu'il y est une configuration de travail)Néanmoins, elle travaille avec le
org.codehaus.mojo:jaxws-maven-plugin
et de la configuration suivante.org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
??<arg>-XautoNameResolution</arg> ne fonctionne pas
OriginalL'auteur jah
Si le autoNameResolution fixer
ne fonctionne pas, essayez:
merci, ça fonctionne!
OriginalL'auteur trunkc
Retrait
<generatePackage></generatePackage>
balise permet de résoudre le problème.OriginalL'auteur Hamid Mohayeji
Retrait generatePackage comme hamid-mohayeji mentionne corrige beaucoup de cas (au moins le cas où votre xsds sont sain d'esprit). Le paramètre essaye de mettre toutes les entités dans le même espace de noms et qui est lié à aller mal dans le non-cas simples. Toutefois omettre le paquet vous laisse avec les packages créés à partir de l'espace de noms. Par exemple http://www.co.com/srvc/api/common deviendrait paquet com.co.srvc.l'api.commune.
Cela peut être résolu par l'ajout d'une liaison simple fichier. Configurer
<bindingDirectory>src/main/resources/bindings</bindingDirectory>
dans le pom et ajouter une liaison de fichier de quelque chose.xjb à la liaison répertoire. Ici, vous devez consulter la personne relativement à ce dossier.Ce fichier définit les paquets pour chaque xsd-fichier individuellement:
OriginalL'auteur thoredge