如何直接调用JAXB XMLAdapter

时间:2014-04-15 17:49:21

标签: java inheritance jaxb unmarshalling

当我试图直接解组根对象而不是另一个对象中的字段时,我正在违反jaxb的XMLAdapters的限制,因此绕过了@XmlJavaTypeAdapter

我宁愿不包装我的对象,因为这会改变将在我们的数据库中序列化的xml。听起来可以直接调用XMLAdapter,在其他地方通过这些答案:

[1] http://www.coderanch.com/t/505457/XML/jaxb-xmladapter-rootElement [2] http://markmail.org/message/etvbyzn3e3idpa7q#query:+page:1+mid:cetzvq37nifr6tk6+state:results [3] JaxB inheritance marshalling abstract classes

但我无法知道你会怎么做:(

我猜想它会像

AdaptedFoo adaptedFoo = (new MyAdapter()).unmarshall(fooXml)

但这不是XMLAdapter unmarshal方法的接口。在我的情况下,xml需要转换为AdaptedFoo对象才能被解组。

eg.  public BackgroundJob unmarshal(AdaptedFoo adaptedFoo)

我是否需要额外的解组步骤才能将myXml转换为AdaptedFoo对象,然后调用我的XMLAdapter将其转换为预期的子类?还是有更优雅的方式?

推荐的流程是什么?

1 个答案:

答案 0 :(得分:1)

对于根对象,您需要执行以下操作:

XmlAdapter<AdaptedFoo, Foo> xmlAdapter = new FooAdapter();
AdaptedFoo adaptedFoo = (AdaptedFoo) unmarshaller.unmarshal(xml);
Foo foo = xmlAdapter.unmarshal(adaptedFoo);