Generación de código JAXB XJC: la clase ObjectFactory está incompleta
Pregunta
Genero clases Java desde mi archivo de esquema XSD usando la herramienta de línea de comandos XJC. La clase ObjectFactory genera contenido incompleto. Genera métodos de creación sin JAXBElement<Type> createType
decoración.
¿Cuál puede ser la razón de esto? Saludos Dominik
Solución
Solo algunos tipos en un enlace generado por JAXB2 XJC necesitan JAXBElement
envoltorios. Los tipos que tienen la anotación @XMLRootElement
no necesitan el contenedor, por lo que la fábrica de objetos no genera uno.
Otros consejos
JAXB genera métodos de fábrica que crean un elemento JAXBEle a partir de una instancia de objeto solo si su XSD contiene una definición de tipo complejo y una definición de elemento separada usando ese tipo complejo CON EL MISMO NOMBRE, por ejemplo:
<complexType name="my-type">
...
</complexType>
<element name="my-type" type="tns:my-type"/>
En este caso, JAXB no anotará la clase generada con una anotación @XmlRootElement, pero proporcionará los métodos de fábrica que necesita para crear un JAXBElement desde la instancia del objeto. De esa forma, puede serializar instancias de tipos de elementos no raíz como elementos raíz fácilmente.
Por lo tanto, debe agregar una declaración " element " con el mismo nombre además de cualquier definición de tipo complejo que desee utilizar como elemento de nivel superior, y ObjectFactory generará métodos de fábrica esperados.