2017-01-09 2 views
0

Je tente d'assigner des espaces de noms différents à différents fichiers xsd et d'utiliser le plugin jaxb2-mavin pour construire les artefacts définis par ces fichiers xsd.Erreur dans jaxb2-mavin-plugin XJB: L'espace de nom de l'élément 'bindings' doit provenir de l'espace de noms du schéma '

Maven ne parvient pas à générer la source avec l'erreur suivante: The namespace of element 'bindings' must be from the schema namespace, 'http://www.w3.org/2001/XMLSchema'

Voici ma configuration:

<jaxb:bindings 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb 
       http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
version="2.1"> 

<jaxb:bindings schemaLocation="xsd/TheRequest.xsd" node="/xsd:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="com.package.request" /> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 

<jaxb:bindings schemaLocation="xsd/TheResponse.xsd" node="/xsd:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="com.package.response" /> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://company.services.com" 
xmlns:tns="http://company.services.com" 
elementFormDefault="unqualified"> 

<xsd:complexType name="FindSomething"> 
    <xsd:sequence> 
     <xsd:element name="TestMode" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="Channel" type="xsd:string" maxOccurs="1" minOccurs="1"/> 
     <xsd:element name="UserId" type="xsd:string" maxOccurs="1" minOccurs="1"/> 
     <xsd:element name="Role" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="Format" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="OrgId" type="xsd:string" maxOccurs="1" minOccurs="1"/> 
     <xsd:element name="TransactionId" type="xsd:string" maxOccurs="1" minOccurs="1"/> 
     <xsd:element name="Timeout" type="xsd:long" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="RequestSegments" type="tns:RequestSegments" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="VerifyUserType" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="VerifyUserAccess" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="IncludeFamily" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     <xsd:element name="AsOfDate" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="ActiveOnly" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="SearchType" type="xsd:string" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="SearchCriteria" type="tns:SearchCriteria" maxOccurs="1" minOccurs="0"/> 
     <xsd:element name="AccessPrivileges" type="tns:AccessPrivileges" maxOccurs="1" minOccurs="0"/> 
    </xsd:sequence> 
</xsd:complexType></xsd:schema> 

J'ai essayé avec différentes formes de directives d'espace de noms XML. Dans la complétion du code Eclipse, je peux voir le schéma XML des bindings en option, donc je ne sais pas pourquoi maven retourne cette erreur.

+0

Quelle est la configuration de votre plugin? – teppic

Répondre

1

Le plugin maven jaxb2 trouve votre fichier de liaison dans son chemin source et suppose qu'il s'agit d'un fichier xsd. Vous devrez l'exclure, soit en le déplaçant, soit en mettant à jour vos chemins source xsd/xjb, soit en ajoutant un filtre d'exclusion.

L'option la plus simple est sans doute de mettre à jour les chemins dans la configuration du plugin:

<configuration> 
    <sources> 
     <!-- only xsd files under here --> 
     <source>src/main/xjb/xsd</source> 
    </sources> 
    <xjbSources> 
     <!-- specify binding file explicitly --> 
     <xjbSource>src/main/xjb/bindings.xjb</xjbSource> 
    </xjbSources> 
</configuration> 

Il y a aussi un problème avec votre fichier de liaison: vous devez mapper le préfixe d'espace de noms que vous avez utilisé dans l'attribut node. Ajoutez xmlns:xsd="http://www.w3.org/2001/XMLSchema" à l'élément racine.

Les options de configuration sont détaillées dans le doc pour l'objectif jaxb2:xjc.

+0

Merci, j'ai ajouté le xjbSources qui corrige le problème d'origine. Je suis maintenant de retour à un problème précédent où un espace de noms dupliqué entre les 2 xsd provoque un échec. Je pensais que la XJB avec des noms de paquets prédéfinis était la solution pour cela. Pensées? –

+1

Les classes pour les éléments dans le même espace de noms ne peuvent pas être générées dans des packages différents, vous devrez donc résoudre les conflits de noms que vous avez en renommant les classes elles-mêmes (ce qui peut être fait dans le fichier de liaison). – teppic

+0

OK Merci. J'étais sous l'impression que les doublons pouvaient être traités en étant créés dans des paquets différents comme spécifié dans le fichier de liaison. –