38 votes

Quelle est la meilleure façon de convertir un objet java en XML avec une API open source

Je me demandais quels sont les meilleurs apis ou les plus largement utilisés pour convertir un objet java en xml. Je suis assez nouveau sur le sujet. Existe-t-il une sorte d'appel api que vous pouvez effectuer pour transmettre un objet et renvoyer xml? Ou est-ce beaucoup plus fastidieux lorsque vous avez besoin de construire le document manuellement en extrayant des valeurs d'objet?

J'ai lu sur xerces, sax et jaxb. Je voudrais continuer sur cette route open source.

Merci!

55voto

JAXB est certainement la solution.

Pourquoi? Eh bien, c'est à l'intérieur de la JDK 6, de sorte que vous ne trouverez jamais il ne sont plus maintenus.

Il utilise des annotations Java pour déclarer XML propriétés de classes, de méthodes et de champs.

Tutoriel 1

Tutoriel 2

Remarque: JAXB permet également de facilement unmarshal XML des données (qui a déjà été rassemblés à partir de Java instances d'objet) de retour pour les instances d'objet.

Une plus grande chose au sujet de JAXB est: Il est pris en charge par d'autres relatifs à Java technologies, comme JAX-RS (Java API RESTful, qui est availible dans le cadre de Java EE 6). JAX-RS peut servir et recevoir JAXB des objets à la volée, sans avoir besoin de marshalling/unmarshalling eux. Vous pourriez vouloir vérifier Netbeans, qui contient out-of-the-box " pour JAX-RS. Lire ce tutoriel pour prendre en main.

edit:

Pour marshall/unmarshall "aléatoire" (ou étrangère) des objets Java, JAXB l'offre est relativement simple possibilité: On peut déclarer une XmlAdapter et 'wrap' existants des classes Java à JAXB-compatible. L'utilisation de ces XmlAdapter est fait en utilisant le @XmlJavaTypeAdapter-annotation.

19voto

Gary Kephart Points 2056

Vous pouvez regarder sur xstream: http://xstream.codehaus.org/

4voto

Archimedes Trajano Points 2729

Disponible avec la version 6 de Java est une API pour convertir annoté des Objets Java pour XML. Le code suivant montre comment convertir un annotée objet d'une chaîne de caractères XML

final JAXBElement<Type> o = new ObjectFactory().createElement(nouveau Type());

final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller();

// Faire cela si vous voulez que le résultat soit plus lisible par l'homme.
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.maréchal(o, Système.out);

Vous pouvez encore étendre en ajoutant de la validation du schéma (remarque très lent, mais utile pour le débogage)

final JAXBElement<Type> o = new ObjectFactory().createElement(nouveau Type());

final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller();
finale du Schéma du schéma = SchemaFactory.newInstance(
"http://www.w3.org/2001/XMLSchema").newSchema(
getClass().getResource("/META-INF/wsdl/schéma.xsd"));
m.setSchema(schéma);
m.maréchal(o, Système.out);

Vous n'avez pas besoin de faire une conversion de type de JAXBElement si le Type est un élément précis. (c'est à dire a une annotation @XmlRootElement)

3voto

RealHowTo Points 13117

Qu'en est-il de java.beans.XMLEncoder et de java.beans.XMLDecoder?

Exemple sur http://www.rgagnon.com/javadetails/java-0470.html

Au revoir.

3voto

user1738754 Points 41

Pour quelqu'un qui décide d'utiliser JAXB, assurez-vous que le cache de JAXBContext. JAXBContext.newInstance est connu pour être très coûteux. J'ai documenté les cas où la conversion en xml est utilisé dans l'exploitation forestière et JAXBContext.newInstance n'est pas mis en cache, il a provoqué une surcharge des performances jusqu'à 5seconds lorsqu'il est appelé par 20 utilisateurs simultanés.

http://app-inf.blogspot.com/2012/10/performance-tuning-logging-right-way.html

Ce n'est pas pour décourager quiconque, à l'aide de JAXB. Une fois JAXBContext est mis en cache, les performances sont excellentes, comme expliqué dans le lien ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X