2010-12-02 46 views
16

Je dispose d'un service web REST (Jersey) qui utilise certains objets de données qui sont en mode marshalled/unmarshalled vers/depuis XML. Les objets de données se trouvent dans un projet/jar distinct dont dépend la guerre du service Web. J'utilise MOXy comme implémentation JAXB depuis que je suis déployé sur Glassfish et c'est déjà inclus. Je sais que je besoin d'un fichier jaxb.properties pour définir la mise en œuvre de JAXB à Moxy avec cette entrée:Où inclure le fichier jaxb.properties?

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

La question est, si le fichier jaxb.properties être inclus dans le pot d'objet de données ou dans la guerre webservice ou tous les deux?

Répondre

12

Vous empaquetez le fichier jaxb.properties avec vos classes de modèle. GlassFish n'inclut pas encore l'ensemble MOXy, mais vous pouvez l'ajouter facilement. Consultez mon blog pour plus d'infos:

+5

Que se passe-t-il si mes classes de modèles sont réparties dans plusieurs répertoires? Dois-je placer un fichier 'jaxb.properties' dans chaque dossier? – George

18

Si vous ne voulez pas ou ne pouvez pas utiliser les jaxb.properties (vous avez beaucoup de package, le modèle est dans un bocal externe , vous ne souhaitez que java et aucun fichier de configuration ...), vous pouvez spécifier directement l'JaxbContextFactory:

ne créez pas le contexte à l'aide:

JAXBContext jaxbContext = JAXBContext.newInstance(new Class[]{Person.class, ObjectFactory.class}, properties); 

Mais, il faut préciser l'usine à utiliser:

JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Person.class, ObjectFactory.class}, properties); 

où l'usine est:

import org.eclipse.persistence.jaxb.JAXBContextFactory; 

Il est exactement le même, mais il est spécifié explicitement dans le code java au lieu de manière implicite dans une configuration fichier.

+0

Merci, ça m'a beaucoup aidé. – eugene82

+0

Merci. Cela m'a aidé à résoudre un de mes problèmes critiques. – santhoshkumar

+0

Je préfère cette solution au fichier jax.properties qui est ignoré par maven pendant les tests (au moins pour moi). jc = JAXBContextFactory.createContext ("com.mymodels", null) a fait l'affaire pour moi. – Nodoze