【发布时间】:2011-03-10 11:21:21
【问题描述】:
我正在使用 JAXB 来编组一个具有声明为类 Foo 的实例变量的类。在运行时,该实例变量被设置为 Foo 的子类的一个实例,比如说 FooBar。 Foo 和 FooBar 类都有基本的 JAXB 注释。
XML 输出显示正在编组的是 Foo 的实例而不是 FooBar。在注释方面我需要做些什么来告诉 JAXB 如何正确编组运行时子类来代替声明的超类?
我尝试了一个实验,在该实验中,我直接编组了一个 Foo 类型的实例变量 foo,该变量在运行时设置为 FooBar 的一个实例。它正确地编组了 FooBar 的一个实例。
这显然不同于编组包含 Foo 类型的实例变量的类,因为编组调用是在包含类上进行的,而 JAXB 只是编组该类字段(我正在使用 @XmlAccessorType(XmlAccessType.FIELD) 注释)。
我的期望是 JAXB 可以正确检查实例变量的运行时类型,但也许不是这样。这种情况是否需要使用此处所述的 XmlAdapter 实现?
JAXB inheritance, unmarshal to subclass of marshaled class
谢谢,
克里斯
【问题讨论】: