Generazione di codice JAXB XJC - La classe ObjectFactory è incompleta
Domanda
Genero classi Java dal mio file di schema XSD usando lo strumento da riga di comando XJC. La classe ObjectFactory genera contenuto incompleto. Genera metodi di creazione senza JAXBElement<Type> createType
decorazioni.
Quale può essere la ragione di ciò? Saluti Dominik
Soluzione
Solo alcuni tipi in un'associazione generata da JAXB2 XJC necessitano di JAXBElement
wrapper. Quei tipi che hanno @XMLRootElement
annotazione non hanno bisogno del wrapper e quindi la factory degli oggetti non ne genera uno.
Altri suggerimenti
JAXB genera metodi factory che creano un JAXBElement da un'istanza di oggetto solo se l'XSD contiene sia una definizione complexType che una definizione di elemento separata utilizzando tale complexType CON LO STESSO NOME, ad esempio:
<complexType name="my-type">
...
</complexType>
<element name="my-type" type="tns:my-type"/>
In questo caso, JAXB non annoterà la classe generata con un'annotazione @XmlRootElement, ma fornirà i metodi di fabbrica necessari per creare un JAXBElement dall'istanza dell'oggetto. In questo modo, puoi serializzare facilmente istanze di tipi di elementi non root come elementi root.
Quindi, dovresti semplicemente aggiungere una " element " -declaration con lo stesso nome oltre a qualsiasi definizione complexType che intendi utilizzare come elemento di livello superiore e ObjectFactory genererà il metodi di fabbrica previsti.