Génération de code JAXB XJC - La classe ObjectFactory est incomplète
Question
Je génère des classes Java à partir de mon fichier de schéma XSD à l'aide de l'outil de ligne de commande XJC. La classe ObjectFactory génère un contenu incomplet. Il génère des méthodes de création sans JAXBElement<Type> createType
décoration.
Quelle peut être la raison de cela? Cordialement Dominik
La solution
Seuls certains types d'une liaison générée par JAXB2 XJC ont besoin de JAXBElement
wrappers. Les types qui ont l'annotation @XMLRootElement
n'ont pas besoin du wrapper, et donc la fabrique d'objets n'en génère pas.
Autres conseils
JAXB génère des méthodes d'usine qui créent un JAXBElement à partir d'une instance d'objet uniquement si votre XSD contient à la fois une définition complexType et une définition d'élément distinct utilisant ce complexType AVEC LE NOM MEME, par exemple:
<complexType name="my-type">
...
</complexType>
<element name="my-type" type="tns:my-type"/>
Dans ce cas, JAXB n'annoncera pas la classe générée avec une annotation @XmlRootElement, mais fournira les méthodes de fabrique dont vous avez besoin pour créer un JAXBElement à partir de l'instance de l'objet. De cette façon, vous pouvez facilement sérialiser des instances de types d'élément non root en tant qu'éléments racine.
Vous devez donc simplement ajouter une déclaration & "; élément &"; portant le même nom, en plus de toute définition complexType que vous souhaitez utiliser comme élément de niveau supérieur, et ObjectFactory générera le méthodes d'usine attendues.