Вам всегда нужен класс ObjectFactory при использовании JAXB?

Вам всегда нужен класс ObjectFactory при использовании JAXB?

Без этого я получаю это исключение:

javax.xml.bind.JAXBException: "Com.a.b.c" не содержит ObjectFactory.class или jaxb.index

I собирать, ObjectFactory может быть излишним. Но, учитывая это исключение, я предполагаю, что вам это нужно... но не знаете почему?

Ответы

Ответ 1

Вы получаете это исключение, когда используете метод JAXBContext.newInstance(String) factory, в котором вы передаете имя пакета в качестве аргумента. Для этого требуется ObjectFactory, иначе JAXB не знает, какие классы обрабатывать.

Если у вас нет ObjectFactory, вам нужно JAXBContext.newInstance(Class...) вместо этого передать в явный список аннотированных классов для добавления в контекст.

Ответ 2

Вместо ObjectFactory вы можете включить файл jaxb.index, который является текстовым файлом, который содержит новый список разделенных Java-классов.

Пример использования файла jaxb.index:

Ответ 3

Я использовал Spring, и мне просто нужно было изменить

Jaxb2Marshaller mlr = new Jaxb2Marshaller();
mlr.setContextPaths("","");

в

Jaxb2Marshaller mlr = new Jaxb2Marshaller();
mlr.setPackagesToScan("","");