2010-12-10 38 views
2

Quand je suis annotaded classe java commeComment éviter la séquence XSD lors de la génération de XSD à partir de JAX-WS?

@javax.xml.bind.annotation.XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class UserdataType { 

    String username; 
    String street; 
    String address; 

il sera généré à

<xs:complexType name="userdataType"> 
<xs:sequence> 
<xs:element name="username" type="xs:string" minOccurs="0"/> 
<xs:element name="street" type="xs:string" minOccurs="0"/> 
<xs:element name="address" type="xs:string" minOccurs="0"/> 

Ainsi, par défaut JAX-WS génère toujours 'séquences' dans les fichiers XSD.

Cela force les clients à prendre soin de l'ordre exact des éléments, ce qui n'est pas utile dans certains cas.

Existe-t-il un moyen de générer quelque chose de différent des séquences?

Répondre

2

Ajouter une annotation XmlType avec un vide propOrder, comme ceci:

@XmlType(propOrder={}) 

Il sera alors générer un xs:all (qui est non ordonnée) au lieu d'une séquence.

<xs:complexType name="userdataType"> 
    <xs:all> 
    <xs:element name="username" type="xs:string" minOccurs="0"/> 
    <xs:element name="street" type="xs:string" minOccurs="0"/> 
    <xs:element name="address" type="xs:string" minOccurs="0"/> 
    </xs:all> 
</xs:complexType> 
+0

Maintenant, ce serait bien de l'avoir dans l'autre sens. 'xjc' génère un' propOrder 'fixe même si le fichier d'entrée utilise '' au lieu de ''. – musiKk