考虑以下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