使用@XMLRootElement和@XMLType注释类之间有什么区别。我已经用@XMLType注释类,当结构将在XML模式中使用多次时,以及使用@XMLRootElement时,它将只使用一次 – 这是最好的方法吗?
一个不同但相关的问题,我会在这里包括。 @XMLType注释有一个propOrder属性来指定它的元素以什么顺序出现 – 是否有一个等价的@XMLRootElement?
我使用这些注释与JAX-WS注释一起创建Web服务,如果这有什么区别。
XmlRootElement和XmlType之间的区别是范围界定的问题。记住这个注释只是指示用于生成XML的模式的创建。 XmlRootElement表示全局元素(具有匿名或模式类型):
<xs:element name=foo type="bar"> </xs:element> <-- schema type
而XmlType用于表示局部元素(具有匿名或复杂类型):
<xs:complexType name=bar> </xs:complexType> <-- complex type
这里的局部/全局的主要区别在于对象将出现的模式的层次结构中,以及是否声明模式类型或复杂类型。这两个注释的文档都很好,包括示例:
编辑:寻址propOrder问题:如果您还声明本地类型,您可以在全局元素上使用它:
@XmlRootElement (name="PersonElement") @XmlType (propOrder={"firstname","lastname"}) public class People{ @XmlElement public String firstname; public String lastname; }
这将产生类似:
<xs:element name="PersonElement" type="People"/> <xs:complexType name="People"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>