Генерация кода JAXB XJC - класс ObjectFactory является неполным
Вопрос
Я генерирую классы Java из моего файла схемы XSD с помощью инструмента командной строки XJC. Класс ObjectFactory генерирует неполное содержимое. Он генерирует методы создания без JAXBElement<Type> createType
декорации.
Что может быть причиной этого? С уважением Dominik
Решение
Только некоторые типы в привязке, сгенерированной JAXB2 XJC, нуждаются в обертках JAXBElement
. Те типы, которые имеют аннотацию @XMLRootElement
, не нуждаются в оболочке, поэтому фабрика объектов не генерирует ее.
Другие советы
JAXB генерирует фабричные методы, которые создают JAXBElement из экземпляра объекта, только если ваш XSD содержит как определение complexType, так и отдельное определение элемента, используя этот complexType с тем же именем, например:
<complexType name="my-type">
...
</complexType>
<element name="my-type" type="tns:my-type"/>
В этом случае JAXB не будет аннотировать сгенерированный класс аннотацией @XmlRootElement, но предоставит фабричные методы, необходимые для создания JAXBElement из экземпляра объекта. Таким образом, вы можете легко сериализовать экземпляры типов без корневых элементов в качестве корневых элементов.
Таким образом, вам нужно просто добавить объявление " element " с тем же именем в дополнение к любому определению complexType, которое вы собираетесь использовать в качестве элемента верхнего уровня, и ObjectFactory сгенерирует ожидаемые фабричные методы.