当我试图直接解组根对象而不是另一个对象中的字段时,我正在违反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将其转换为预期的子类?还是有更优雅的方式?
推荐的流程是什么?
答案 0 :(得分:1)
对于根对象,您需要执行以下操作:
XmlAdapter<AdaptedFoo, Foo> xmlAdapter = new FooAdapter();
AdaptedFoo adaptedFoo = (AdaptedFoo) unmarshaller.unmarshal(xml);
Foo foo = xmlAdapter.unmarshal(adaptedFoo);