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

标签 java xsd jaxb

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/

相关文章:

java - 针对 XSD 验证 csv

sql-server - SSIS、带有 XSD 文件的 XML 源...和 ​​nvarchar(max) 目标列

java - 动态添加属性而不改变java对象

java - 仅使用 .key 和 .crt 构建 io.netty.handler.ssl.SslContext

java - 获取错误 - 无法读取模式文档 - JBPM

java - 使用 Jackson 将对象转换为 JSON 时的无限递归

java - 使用 JAXB 解码时 XML 格式错误

java - 使用 JAXB 将 JSON 绑定(bind)到 Java 类

java - Spring IntegrationFlow 过滤器和转换

java - 将 JSON 反序列化为 Java 对象时,如何将父属性映射到子对象?