为什么JAXB处理扩展的方式不同?

时间:2014-08-19 21:26:51

标签: java xml jaxb xsd

考虑以下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类则没有。

有谁知道这是为什么?

1 个答案:

答案 0 :(得分:1)

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

了解更多信息

我在博客上发表了更多有关此内容的文章: