如何在JAXB中指定对象引用数据类型

时间:2011-08-23 23:00:13

标签: java xsd jaxb

JAXB中的 java.lang.Object 是否存在“Java数据类型的XML模式类型”绑定?

简单示例

    <Channels>
      <EChannel>
        <Number>1</Number>
        <Format>0</Format>
        <VarNumber>11</VarNumber>
        <Name>First Channel</Name>
        <ChannelHandler></ChannelHandler>
      </EChannel>
      <EChannel>
        <Number>2</Number>
        <Format>0</Format>
        <VarNumber>22</VarNumber>
        <Name>Second Channel</Name>
        <ChannelHandler></ChannelHandler>
      </EChannel>
    </Channels>

基本上我首先将xml树解组为Pojos(List)的arraylist

然后在运行时我想将一个java对象附加到ChannelHandler属性。

我不想在EChannel POJO中手动执行任何操作,因为我希望使用xjc自动生成这些内容

由于

1 个答案:

答案 0 :(得分:1)

@XmlAnyElement(lax=true)类型的属性上使用Object可以为您提供所需的行为。

从XML模式开始时,如下所示的模式结构将导致此批注。

<xs:element name="ChannelHandler">
    <xs:complexType>
        <xs:sequence>
            <xs:any processContents="lax"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

完整的XML架构

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Channels">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="EChannel" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Number" type="xs:int"/>
                            <xs:element name="Format" type="xs:int"/>
                            <xs:element name="VarNumber" type="xs:int"/>
                            <xs:element name="Name" type="xs:string"/>
                            <xs:element name="ChannelHandler">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:any processContents="lax"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:any/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

了解更多信息