XSD和JAXB用于重复元素的序列

时间:2015-07-29 21:42:53

标签: xsd jaxb2 xjc

我正在创建一个XSD来表示以下XML结构。

    <DETAILS>
      <REFERENCE></REFERENCE>
      <INFORMATION>
        <INFO>
            <KEY></KEY>
            <VALUE></VALUE>
            <KEY></KEY>
            <VALUE></VALUE>
            <KEY></KEY>
            <VALUE></VALUE>
            <KEY></KEY>
            <VALUE></VALUE>
            .....
        </INFO>
    </INFORMATION>      

我打算使用相同的XSD使用XJC生成带有JAXB注释的Java类。 我设法获得以下XSD。

    <xs:complexType name="DetailsType">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:class name="Details" />
        </xs:appinfo>
    </xs:annotation>
    <xs:sequence>
        <xs:element type="xs:int" name="REFERENCE">
            <xs:annotation>
                <xs:appinfo>
                    <jaxb:property name="reference" />
                </xs:appinfo>
            </xs:annotation>
        </xs:element>
        <xs:element type="InformationType" name="INFORMATION">
            <xs:annotation>
                <xs:appinfo>
                    <jaxb:property name="Information" />
                </xs:appinfo>
            </xs:annotation>
        </xs:element>           
    </xs:sequence>
</xs:complexType>

<xs:complexType name="InformationType">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:class name="Information" />
        </xs:appinfo>
    </xs:annotation>
    <xs:sequence>
        <xs:element name="INFO" type="InfoType">
            <xs:annotation>
                <xs:appinfo>
                    <jaxb:property name="Info" />
                </xs:appinfo>
            </xs:annotation>
        </xs:element>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="InfoType">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:class name="Info" />
        </xs:appinfo>
    </xs:annotation>
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
        <xs:element name="KEY" type="xs:string" />
        <xs:element name="VALUE" type="xs:string" />
    </xs:sequence>
</xs:complexType>

但是使用这个XSD,XJC使用JAXBElement生成Java类,比如

    @XmlElementRefs({
    @XmlElementRef(name = "KEY", type = JAXBElement.class),
    @XmlElementRef(name = "VALUE", type = JAXBElement.class)
})
protected List<JAXBElement<String>> keysAndValues;  

对于重复元素序列的这种简单的XML,使用JAXBElement的开销似乎很烦人。 我错过了什么吗?

我对XSD采用不同的方法或者有人可以提供一种方法来告诉JAXB生成更有意义的类(请不要使用JAXBElement)?

0 个答案:

没有答案