Jaxb2Marshaller如何保存JAXBContext

时间:2018-06-25 04:50:45

标签: java spring-boot jaxb spring-jms jaxb2

我使用MarshallingMessageConverter作为MessageConverter bean的实现。我使用Jaxb2Marshaller作为org.springframework.oxm.Marshaller类的实现。我将类设置为以这种方式绑定:

marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})

我还可以使用JAXBContext类来设置类,并检索Marshaller和Unmarashaller:

JAXBContext.newInstance(Class1.class,Class2.class)
jaxbContext.createMarshaller();
jaxbContext.createUnmarshaller();

这类似于Jaxb2Marshaller,因为它的内部字段为JAXBContext。为每个解析请求创建新的JAXBContext都是非常昂贵的。

我的问题是:如果我使用Marshaller声明Jaxb2Marshaller,则在此调用中绑定的所有类marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})将在每个解析请求中重用,并且是线程安全的,或者{将为每个请求再次创建此类的{1}}吗?我将此JAXBContext用作Jaxb2Marshaller

1 个答案:

答案 0 :(得分:1)

根据JAXB规范-JAXBContext是线程安全的。不应编组Marshaller和Unmarshaller,并且每次使用时都应创建Marshaller和Unmarshaller,或者应使用某种线程安全服务将其包装以同步对编组器和解组器的访问。