有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用JAXB在Java中自定义XML序列化

我的问题如下:

我有一个对象结构,有一个根类和许多子类。这些类是从xsd文件生成的,我无法更改它们

其中一个类(不是根类)大致如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Foo")
class Foo {
    @XmlAnyElement(lax = true)
    Object any;
}

我知道“any”只能设置为大约五个类(BarOne,…,BarFive)

因此,xml如下所示:

<RootClass>
lots of stuff...
    <foo>
        <any>
            <BarOne>
                fields and sub-classes of BarOne
            </BarOne>
        </any>
    </foo>
more stuff..
</RootClass>

我正在使用JAXB(Un)封送器进行(反)序列化,所有类都具有正确(反)序列化所需的所有注释。但是,当反序列化类Foo(带有'any'!=null)的对象时,解组器将any设置为JAXBElement的对象,其中包含一个value字段,其中包含BarOne-对象。对于我必须在Foo及其子类上执行的所有操作来说,这都是一个真正的问题

这就是为什么我想为FooBarXXX类实现自定义(反)序列化,以便直接将any设置为Bar类的对象(这是我在查看xml结构(以及对象结构)时所期望的)。反序列化应该等效地工作。{}类及其子类的(反)序列化可以/应该由(反)封送拆收器的默认实现再次执行

但我不知道我到底需要做些什么才能做到这一点。我已经读了很多关于不同的定制方式的书,也许只是我不能把我需要的东西组合在一起。。。 有人有主意吗

正如我已经提到的,我无法更改生成所有类的xsd文件的定义。我所能做的是在生成类时使用绑定文件,但我宁愿不用它来解决问题

编辑: 我已经读过关于使用@XmlAnyElement注释处理DOM树结构的可能性,但我不确定在这种情况下它将如何工作


共 (0) 个答案