如何获取XmlAdapter的所有者JAXBContext?

时间:2014-01-10 12:08:09

标签: java jaxb

我需要为特定DefaultValidationEventHandler安装XmlAdapter。 根据我的阅读,你只能这样做:

JAXBContext context = JAXBContext.newInstance(MyAdapter.class);
Unmarshaller um = context.createUnmarshaller();
um.setEventHandler(new DefaultValidationEventHandler());

然而这是不可能的,因为JAXBContext是全局的并且在我们的应用程序中隐式创建(由Spring?)。 我有什么方法可以获得JAXBContext的{​​{1}}吗?

1 个答案:

答案 0 :(得分:1)

您提问的第1部分

  

如何获取XmlAdapter的所有者JAXBContext?

默认情况下,XmlAdapter的实现仅传递它需要转换的对象。如果您希望XmlAdapter维护状态,可以在Marshaller / Unmarshaller上设置它的实例,然后将使用此实例而不是新实例。

XmlAdapter myAdapter = new MyAdapter(jaxbContext);
unmarshaller.setAdapter(myAdapter);

问题的第2部分

  

我需要安装特定的DefaultValidationEventHandler   XmlAdapter

这可能不是你想要做的。如果你想对某些对象进行特殊处理,我会创建一个扩展Unmarshaller.Listener并实现ValidationEventHander的类。并在Unmarshaller上相应地设置此实例。然后,您将在进行验证时了解您正在处理的对象。