Jaxb: Comment puis-je générer ObjectFactory classe?
Je suis à l'aide de Java 6, JaxB 2 et SpringSource Tool Suite (comme Eclipse). J'ai eu un couple de classes Java que j'ai écrit, à partir de laquelle j'ai utilisé JaxB pour générer un schéma XML. Cependant, je m'aperçois afin d'utiliser JaxB capacité à générer un document XML à partir d'objets Java, j'ai besoin d'un ObjectFactory.
final Marshaller marshaller = jaxbContext.createMarshaller();
//Here is where I don't have an ObjectFactory defined
final JAXBElement<WebLeads> webLeadsElement
= (new ObjectFactory()).createWebLeads(webLeadsJavaObj);
Comment puis-je générer un ObjectFactory sans en soufflant les classes j'ai déjà maintenant?
OriginalL'auteur Dave | 2011-06-22
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR
Cette question peut être en ce qui concerne le rôle de
ObjectFactory
dans la création d'unJAXBContext
. Si vous bootstrap unJAXBContext
sur un chemin de contexte, alors il va vérifier pour un ObjectFactory à cet endroit afin de déterminer les classes de ce package:Si vous n'avez pas de
ObjectFactory
, mais désirez créer vousJAXBContext
sur un chemin de contexte, vous pouvez inclure un fichier appeléjaxb.index
dans ce package liste des fichiers à inclure dans leJAXBContext
(référencé classes seront automatiquement extraits):Alternativement, vous pouvez démarrer vous
JAXBContext
sur un tableau de classes au lieu d'un chemin de contexte:Est ObjectFactory Nécessaire
Un
ObjectFactory
n'est pas nécessaire, bien que même lors du démarrage à partir des classes Java il y a des cas d'utilisation où vous pouvez tirer parti d'une catégorie similaire annoté avec@XmlRegistry
afin d'utiliser le@XmlElementDecl
annotation.La création d'une Instance de JAXBElement
Vous pouvez toujours créer l'
JAXBElement
directement:Alternative à JAXBElement
Ou depuis JAXBElement est simplement utilisée pour fournir de l'élément racine d'informations, vous pouvez annoter vos
WebLeads
classe avec@XmlRootElement
:Comment êtes-vous d'amorçage de votre JAXBContext? Si vous êtes d'amorçage sur un chemin de contexte (Chaîne de caractères), puis vous aurez besoin d'inclure un fichier appelé jaxb.index dans le même package que les classes de votre domaine avec un retour chariot liste de noms de classe (pour un exemple, voir: bdoughan.blogspot.com/2010/08/...), ou vous pouvez créer votre JAXBContext sur un tableau de classes (pour un exemple, voir: bdoughan.blogspot.com/2010/11/...).
J'avais été l'amorçage par la création d'une nouvelle instance en utilisant le nom du paquet, mais quand je l'ai changé pour créer un nouveau contexte basé sur la classe, tout a fonctionné. Vos liens ont été vraiment utiles. Merci, -
OriginalL'auteur Blaise Doughan
Je ne pense pas que vous avez besoin d'un ObjectFactory.
C'est juste une classe utilitaire XJC génère pour rendre la vie plus facile dans certains cas.
Edit:
La lecture de votre question, je suppose que vous avez créé le Pojo avec JAXB annotations à la main.
Envisager d'ajouter le XmlRootElement sur la "racine" de la classe:
http://download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRootElement.html
Ici quelques infos:
Pas de @XmlRootElement généré par JAXB
ObjectFactory
création en XJC?OriginalL'auteur Puce
Vous n'avez pas "besoin" d'une usine de JaxB marshaller à la fonction. Si vous passer un objet d'une liste ou d'une carte de la variable, il va, en fait, marshall correctement. Bien sûr, cela est vrai uniquement si vous avez correctement initilized la JaxB marshaller vers la classe de l'objet que vous souhaitez marshall.
Vous pouvez créer une usine, et que l'usine peut créer une spécialisation de retour (dites que vous ne voulez pas à retourner votre public variables temp)
OriginalL'auteur TravMan