2010-01-12 6 views
2

Actuellement, je suis en utilisant le framework Castor pour Marshall l'objet dans le fichier xml grands noms du travail de ceCastor et JAXB Marshaller

Writer writer = new FileWriter("D:/out.xml"); 
Marshaller.marshal(test, writer); 

Mais maintenant, je me sers javax.xml.bind à faire la même chose.

  Writer writer = new FileWriter("D:/out.xml"); 
     JAXBContext context = 
      JAXBContext.newInstance(test.getClass()); 
     Marshaller marshaller = context.createMarshaller(); 
     marshaller.marshal(test, writer); 

Alors je frappe ce message d'erreur:

incapable de maréchal de type "package1.Testing" comme un élément car il manque une annotation @XmlRootElement]

Répondre

2

Ajouter l'annotation XmlRootElement et vous avez gagné Ne reçois plus l'erreur. Cela devrait être ajouté à la classe de premier niveau ou "root".

+0

Merci pour votre réponse pouvez-vous m'expliquer grossièrement pourquoi utiliser castor est correct, mais jaxb besoin d'ajouter XmlRootElement – user236501

+0

C'est juste de la sémantique. Les API Castor et JAXB sont différentes et JAXB requiert l'annotation, contrairement à Castor. –

+0

Cela signifie-t-il que JAXB a besoin de savoir quelle classe regarder, alors dans mon fichier de test je dois mettre @XmlRootElement? – user236501