JAXB 中是否存在针对 java.lang.Object 的“XML 架构类型到 Java 数据类型”绑定(bind)?
简单示例
<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 的数组列表(列表)
然后在运行时我想将一个 java 对象附加到 ChannelHandler 属性。
我不想在 EChannel POJO 内手动执行任何操作,因为我希望使用 xjc 自动生成这些
谢谢
最佳答案
在 Object
类型的属性上使用 @XmlAnyElement(lax=true)
应该会为您提供所需的行为。
从 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>
了解更多信息
关于java - 如何在 JAXB 中指定对象引用数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168536/