Рассмотрим следующий файл 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 для этих сложных типов. Странная вещь: класс Учителя был аннотирован с помощью @XmlRootElement, тогда как класса Person не было.
Кто-нибудь знает, почему это?
Элементы верхнего уровня с анонимными сложными типами получают на них аннотации @XmlRootElement
. Элементы верхнего уровня с именованным сложным типом содержат аннотации @XmlElementDecl
для сгенерированного ObjectFactory
. Teacher
не следует создавать с помощью @XmlRootElement
если не используется какая-либо привязка к привязке.
Чтобы получить больше информации
Я больше об этом расскажу в своем блоге: