Как указать тип ссылки на объект в JAXB - PullRequest
1 голос
/ 24 августа 2011

Существует ли привязка «тип XML-схемы к типу данных Java» для java.lang.Object в JAXB?

Простой пример

    <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)

А затем во время выполнения хочу присоединить объект java к свойству ChannelHandler.

IЯ не хочу ничего делать вручную в EChannel POJO, так как я хочу, чтобы они генерировались автоматически с использованием xjc

Спасибо

1 Ответ

1 голос
/ 24 августа 2011

Использование @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>

Для получения дополнительной информации

...