@XMLRootElement@XMLType注释类有什么区别?当在XML模式中多次使用结构时,我一直在用@XMLType注释类,而在仅使用一次结构时用@XMLRootElement注释类-这是最好的方法吗?

我将在此处包括一个不同但相关的问题。 @XMLType批注具有propOrder属性,用于指定其元素显示的顺序-@XMLRootElement是否等效?

我将这些注释与JAX-WS注释结合使用,以创建Web服务(如果有任何区别)。

最佳答案

XmlRootElementXmlType之间的区别是范围确定的问题。请记住,此批注仅指示用于生成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>

10-08 18:02