我需要为特定DefaultValidationEventHandler
安装XmlAdapter
。
根据我的阅读,你只能这样做:
JAXBContext context = JAXBContext.newInstance(MyAdapter.class);
Unmarshaller um = context.createUnmarshaller();
um.setEventHandler(new DefaultValidationEventHandler());
然而这是不可能的,因为JAXBContext
是全局的并且在我们的应用程序中隐式创建(由Spring?)。
我有什么方法可以获得JAXBContext
的{{1}}吗?
答案 0 :(得分:1)
如何获取XmlAdapter的所有者JAXBContext?
默认情况下,XmlAdapter
的实现仅传递它需要转换的对象。如果您希望XmlAdapter
维护状态,可以在Marshaller
/ Unmarshaller
上设置它的实例,然后将使用此实例而不是新实例。
XmlAdapter myAdapter = new MyAdapter(jaxbContext);
unmarshaller.setAdapter(myAdapter);
我需要安装特定的DefaultValidationEventHandler XmlAdapter
这可能不是你想要做的。如果你想对某些对象进行特殊处理,我会创建一个扩展Unmarshaller.Listener
并实现ValidationEventHander
的类。并在Unmarshaller
上相应地设置此实例。然后,您将在进行验证时了解您正在处理的对象。