2010-03-05 5 views
2

Je possède ce schéma: lorsque unmarshaling à partir d'un schéma de l'ordre d'une séquence des questions dans JAXB

<xs:complexType name="foo"> 
    <xs:sequence> 
    <xs:element name="oneBar" type="xs:string" minOccurs="0"/> 
    <xs:element name="twoBar" type="xs:string" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 

Lorsque je tente de désorganiser cette

<foo> 
    <oneBar>1</oneBar> 
    <twoBar>2</twoBar> 
</foo> 

cela fonctionne mais lorsque je tente de désorganiser ce xml:

<foo> 
    <twoBar>2</twoBar> 
    <oneBar>1</oneBar> 
</foo> 

je reçois un excelption parce qu'il prend soin abo ut l'ordre Si j'essaie de démarshal le même xml sans utiliser un schéma cela fonctionne dans les deux cas Des idées?

Comme fraise a fait remarquer si vous remplacez les xs: séquence avec sc: toute commande wont question, ne l'un de vous savez ce que l'annotation je dois mettre dans ma classe pour qu'il génère les xs: toute schmea

solution trouvée en créant la classe des xs: tout schéma Vous avez juste besoin d'annoter votre classe avec XmlType et définir l'ordre d'hélice à rien, voir:

@XmlRootElement 
@XmlType(name="foo",propOrder={}) 
public class Foo { 
    @XmlElement 
    public String oneBar; 
    @XmlElement 
    public String twoBar; 
} 
+0

Que recherchez-vous des idées? Le contenu de votre message est vrai, mais je ne trouve pas de question là-dedans. – Pops

+0

ma question est de savoir comment éviter cela? Je pensais qu'il était implicite mais je vois que j'avais tort, merci – ekeren

Répondre

5

séquence nécessite des éléments pour être par exemple from w3schools page: -

L'indicateur spécifie que les éléments de l'enfant doivent apparaître dans un ordre spécifique:

Lorsque unmarshalling sans schéma vous efficacement ne valident pas le XML.

Si vous voulez que votre schéma d'exiger pas un ordre spécifique, ce qui suit devrait faire: -

<xs:complexType name="foo"> 
    <xs:all> 
    <xs:element name="oneBar" type="xs:string" minOccurs="0"/> 
    <xs:element name="twoBar" type="xs:string" minOccurs="0"/> 
    </xs:all> 
</xs:complexType> 

approche du point de vue de l'annotation Java. Si j'ai une classe appelée Test avec deux champs de chaîne test1 et test2, les annotations seraient: -

Le cas par exemple commandé en utilisant <sequence>

@XmlType(name="",propOrder={"test1","test2"}) 
@XmlRootElement(name="test") 
public class Test 
{ 
    @XmlElement(required=true) 
    private String test1; 
    @XmlElement(required=true) 
    private String test2; 
} 

Le cas non-commandé, par ex. en utilisant <all>

@XmlType(name="",propOrder={}) 
@XmlRootElement(name="test") 
public class Test 
{ 
    @XmlElement(required=true) 
    private String test1; 
    @XmlElement(required=true) 
    private String test2; 
} 
+0

alors comment puis-je spécifier cette classe Foo dans un schéma qui ne restreint pas l'ordre spécifique? – ekeren

+0

voir ci-dessus modifier. – Martin

+0

nice, est-il un moyen de faire le générateur de schéma en utilisant la fonction generateSchema pour créer un schéma avec l'élément xs: all? Ce schéma ci-dessus a été autoGenerated, peut-être que je devrais Annoter ma classe différente ... – ekeren

Questions connexes