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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top