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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top