Java JAXB xjc:简单绑定不会为基类生成@XmlRootElement

Java JAXB xjc:简单绑定不会为基类生成@XmlRootElement,java,xml,jaxb,Java,Xml,Jaxb,我正在使用JAXB2.0。我在XSD文件中定义了各种元素和类型。下面是一个例子: <xs:element name="Person" type="Person" /> <xs:complexType name="Person"> <xs:attribute name="name" type="xs:string"/> </xs:complexType> <xs:element name="Musician" type="Musici

我正在使用JAXB2.0。我在XSD文件中定义了各种元素和类型。下面是一个例子:

<xs:element name="Person" type="Person" />
<xs:complexType name="Person">
    <xs:attribute name="name" type="xs:string"/>
</xs:complexType>

<xs:element name="Musician" type="Musician"/>
<xs:complexType name="Musician">
    <xs:complexContent>
        <xs:extension base="Person">
             <xs:attribute name="instrument" type="xs:string"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:element name="People" type="People"/>
<xs:complexType name="People">
    <xs:sequence>
        <xs:element name="person" type="Person" minOccurs="0" maxOccurs="Unbounded/>
    </xs:sequence>
</xs:complexType>

可以使用

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:annox="http://annox.dev.java.net"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               jaxb:version="2.1"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
               jaxb:extensionBindingPrefixes="xjc annox">

    <jaxb:bindings node="//xs:complexType[@name='Person']">
        <annox:annotate>
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="person"/>
        </annox:annotate>
    </jaxb:bindings>
</jaxb:bindings>

<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<Person name="John Doe"/>
<?xml version="1.0" encoding="UTF-8"?>
<People>
    <person name="John Doe" xsi:type="Person"/>
    <person name="Keith Richards" xsi:type="Musician"/>
</People>
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:annox="http://annox.dev.java.net"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               jaxb:version="2.1"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
               jaxb:extensionBindingPrefixes="xjc annox">

    <jaxb:bindings node="//xs:complexType[@name='Person']">
        <annox:annotate>
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="person"/>
        </annox:annotate>
    </jaxb:bindings>
</jaxb:bindings>