2010-12-10 78 views
2

当我annotaded java类像从JAX-WS生成XSD时,如何避免XSD序列?

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

    String username; 
    String street; 
    String address; 

将产生

<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"/> 

所以,在默认情况下JAX-WS总是生成XSD文件 '序列'。

这会强制客户端处理元素的确切顺序,这在某些情况下不起作用。

有什么方法可以产生不同的序列?

回答

2

添加XmlType注解用空propOrder,像这样:

@XmlType(propOrder={}) 

然后它将产生一个xs:all(这是无序的),而不是一个序列。

<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

现在很高兴能有相反的方式。即使输入文件使用“”而不是“”,xjc也会生成一个固定的“propOrder”。 – musiKk 2011-04-21 07:51:37