Jaxb2Marshaller, как он держит JAXBContext - PullRequest
0 голосов
/ 25 июня 2018

Я использую 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}), будут повторно использоваться в каждом запросе синтаксического анализаи будет потокобезопасным, или JAXBContext из этого класса будет создаваться снова для каждого запроса?Я использую это Jaxb2Marshaller как Bean.

1 Ответ

0 голосов
/ 25 июня 2018

Согласно спецификации JAXB - JAXBContext является потокобезопасным.Marshaller и Unmarshaller не создаются и должны создаваться один раз для каждого использования, либо должны быть снабжены каким-либо потокобезопасным сервисом для синхронизации доступа к маршаллеру и unmarshaller.

...