考虑以下XSD文件:

<xs:element name="person" type="Person"/>
<xs:element name="teacher" type="Teacher"/>

<xs:complexType name="Person">
    <xs:sequence>
       <xs:element name="age" type="xs:int"/>
       <xs:element name="sex" type="xs:string"/>
       <xs:element name="fullname" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="Teacher">
    <xs:complexContent>
        <xs:extension base="Person">
            <xs:sequence>
                <xs:element name="school" type="xs:string"/>
                <xs:element name="grade" type="xs:string"/>
                <xs:element name="subject" type="xs:string"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>


我使用JAXB为这些复杂类型生成Java类。奇怪的是,Teacher类使用@XmlRootElement注释,而Person类则没有。

有人知道为什么是这样吗?

最佳答案

具有匿名复杂类型的顶级元素会在其上生成@XmlRootElement批注。具有命名复杂类型的顶级元素在生成的@XmlElementDecl上具有ObjectFactory批注。除非使用某种绑定自定义,否则不应该使用Teacher生成@XmlRootElement

了解更多信息

我在博客上写了更多有关此的内容:


http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html

10-06 09:50