Генерация кода JAXB XJC - класс ObjectFactory является неполным - PullRequest
6 голосов
/ 14 сентября 2009

Я генерирую классы Java из моего файла схемы XSD с помощью инструмента командной строки XJC. Класс ObjectFactory генерирует неполное содержимое. Он генерирует методы создания без JAXBElement<Type> createType украшения.

В чем может быть причина этого? С уважением Dominik

Ответы [ 2 ]

4 голосов
/ 15 сентября 2009

Только некоторые типы в связывании, сгенерированном JAXB2 XJC, нуждаются в JAXBElement оболочках. Те типы, которые имеют аннотацию @XMLRootElement, не нуждаются в оболочке, и поэтому фабрика объектов не генерирует ее.

0 голосов
/ 07 января 2014

JAXB генерирует фабричные методы, которые создают JAXBElement из экземпляра объекта, только если ваш XSD содержит как определение complexType, так и отдельное определение элемента, используя этот complexType с тем же именем, например:

<complexType name="my-type">
   ...
</complexType>

<element name="my-type" type="tns:my-type"/>

В этом случае JAXB не будет аннотировать сгенерированный класс аннотацией @XmlRootElement, но предоставит фабричные методы, необходимые для создания JAXBElement из экземпляра объекта. Таким образом, вы можете легко сериализовать экземпляры типов без корневых элементов в качестве корневых элементов.

Таким образом, вы должны просто добавить декларацию «element» с тем же именем в дополнение к любому определению complexType, которое вы собираетесь использовать в качестве элемента верхнего уровня, и ObjectFactory сгенерирует ожидаемые фабричные методы.

...