使用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
及其子类上执行的所有操作来说,这都是一个真正的问题
这就是为什么我想为Foo
和BarXXX
类实现自定义(反)序列化,以便直接将any
设置为Bar
类的对象(这是我在查看xml结构(以及对象结构)时所期望的)。反序列化应该等效地工作。{
但我不知道我到底需要做些什么才能做到这一点。我已经读了很多关于不同的定制方式的书,也许只是我不能把我需要的东西组合在一起。。。 有人有主意吗
正如我已经提到的,我无法更改生成所有类的xsd文件的定义。我所能做的是在生成类时使用绑定文件,但我宁愿不用它来解决问题
编辑:
我已经读过关于使用@XmlAnyElement
注释处理DOM树结构的可能性,但我不确定在这种情况下它将如何工作
共 (0) 个答案