用@XMLRootElement
和@XMLType
注释类有什么区别?当在XML模式中多次使用结构时,我一直在用@XMLType
注释类,而在仅使用一次结构时用@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
这里本地/全局的主要区别在于对象将出现在架构的层次结构中,以及您是在声明架构类型还是复杂类型。这两个注释的文档都写得很好,并包括示例:
XmlRootElement
XmlType
编辑:解决
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>