2012-03-13 2 views
4

Je veux générer des classes java à partir d'un schéma en utilisant jaxb, mais j'obtiens une erreur d'analyse de xjc. J'ai 2 éléments Enveloppé dans un choix alors l'un de l'élément est à nouveau répété juste après le choix:Erreur: impossible d'analyser un schéma par xjc en cas de xs: choice

<xs:element name="A"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:sequence maxOccurs="unbounded"> 
     <xs:element ref="X"/> 
     <xs:element ref="Y"/> 
     </xs:sequence> 
     <xs:element ref="Y"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

JAXB est de lancer:

[ERROR] Element "{*something*}Y" shows up in more than one properties. 
line *something* of file:/*something*.xsd 

PS: ma version JAXB est 2.1.13

+0

Est-ce votre version de JAXB une exigence "doit"? Pouvez-vous passer à la dernière? J'ai testé avec le dernier disponible avec Java 7 et cela fonctionne sans besoin de fichier de liaison personnalisé. –

+1

non ce n'est pas un must, c'est juste que je suis en train d'utiliser 2.1.13 et dans tous les cas minces si c'était un problème de version d'une certaine sorte, donc juste effacer les choses. –

+1

Je suis désolé, mais la version jaxb n'est pas modifiable. et je suis toujours incapable d'obtenir la liaison au travail! Aidez-moi! –

Répondre

6

Jetez un oeil à ce post on SO. La solution consiste à fournir un fichier de liaison personnalisé qui mappe votre Y en dehors du choix pour utiliser un autre nom de propriété.

Je ferais probablement aussi correspondre la séquence récurrente à une classe avec deux propriétés (X et Y), mais c'est quelque chose d'autre. J'ai aussi essayé un schéma de test (dérivé du vôtre, juste ajouté des éléments complexes factices pour X et Y) avec la version 7.1 de l'EDI libre de NetBeans et il a fonctionné sans besoin d'un fichier de liaison personnalisé. La version JAXB que j'ai utilisée est 2.2.4

+1

Je dois utiliser 2.1.13 et ne peux pas changer la version maintenant. et je suis toujours confronté à des problèmes avec la liaison, j'ai essayé d'emballer la séquence à l'intérieur du choix dans une classe, mais seulement complexType peut être mis à l'intérieur d'une classe. aussi il n'y a pas l'utilisation du nom de propriété de liaison avec un autre nom \t il est ne pas donner d'erreur lors de la lecture du fichier de liaison, mais ne rien faire avec! et je suis sûr que je n'ai pas de problème XPath. –

+1

merci pour l'aide, je l'ai finalement eu :) –

+0

@Petru, Pourriez-vous s'il vous plaît confirmer si cela fonctionne dans JAXB 2.2.4? parce que j'ai essayé ci-dessus schéma et il montre l'erreur de '[ERROR] cos-nonambig:'. J'utilise 'xjc 2.2.4-2' – ulab

2

J'ai aussi essayé de le faire fonctionner comme décrit par Petru. Rahul n'a pas posté sa solution donc voici mon fichier de liaisons.

<?xml version="1.0" encoding="UTF-8"?> 

<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    jaxb:extensionBindingPrefixes="xjc" 
    version="2.1"> 

    <jaxb:bindings schemaLocation="test.xsd" node="//xs:element[@name='A']/xs:complexType/xs:choice[1]"> 
     <jaxb:property name="OutsideY"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

sortie XJC:

$xjc -version 
xjc version "JAXB 2.1.10 in JDK 6" 
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6) 

$xjc -p com.example.test -d src -extension -b bindings.xml test.xsd 
parsing a schema... 
compiling a schema... 
com\example\test\A.java 
com\example\test\ObjectFactory.java 
Questions connexes