Question

Qu'est-ce que vous utilisez pour lier XML à Java? JAXB, Castor et XMLBeans sont quelques-uns des choix disponibles. Les comparaisons que j'ai vues ont toutes trois ou quatre ans. Je suis ouvert à d'autres suggestions. La performance et la facilité d’utilisation de la fonction de marshalling / unmarshalling sont d’un intérêt particulier.

Clarification: je voudrais voir non seulement le cadre que vous utilisez, mais aussi votre raisonnement pour l’utiliser les uns sur les autres.

Était-ce utile?

La solution

JiBX . Auparavant, j'utilisais Castor XML , mais JiBX s'est révélé nettement supérieur, notamment en termes de performances. (un portage direct de code d'application de Castor XML à JiBX l'a rendu 9 fois plus rapide). J’ai également trouvé que le format de mappage de JiBX était plus élégant que celui de Castor.

JiBX réalise ses performances en utilisant une manipulation de bytecode post-compilation plutôt que la méthode de réflexion adoptée par Castor. Cela présente l’avantage de poser moins de contraintes à la façon dont vous écrivez vos classes mappées. Il n'y a aucun besoin de getters, setters et constructeurs sans argument juste pour satisfaire les outils. La plupart du temps, vous pouvez écrire la classe sans prendre en compte les problèmes de mappage, puis la mapper sans modifications.

Autres conseils

Si vous souhaitez prendre une décision éclairée, vous devez comprendre pourquoi vous traduisez entre des objets XML et java. La raison en est que les différentes technologies dans cet espace tentent de résoudre différents problèmes. Les différents outils appartiennent à deux catégories:

  1. Liaison de données XML - fait référence au processus de représentation des informations d’un document XML sous forme d’objet dans la mémoire de l’ordinateur. En règle générale, cela signifie définir un fichier XSD et générer un équivalent de code source Java. L'interopérabilité entre différentes langues est une priorité absolue (d'où l'utilisation de XSD), le plus souvent pour la mise en œuvre de services Web basés sur SOAP.
  2. Sérialisation XML - fait référence à l'écriture d'un graphe d'objets en mémoire dans un flux, afin qu'il puisse être reconstitué quelque part ou à un autre moment. Vous écrivez les classes java à la main; la représentation xml est d'importance secondaire. De plus, le besoin de performances est souvent plus grand et le besoin d'interopérabilité avec d'autres langages tels que .net est souvent moindre.

Pour la sérialisation XML, Xstream est difficile à battre. JAXB est la norme pour la liaison XML.

Dans les deux cas, si vous utilisez J2EE, vous devrez porter une attention particulière aux classes extraites de JPA, car les mandataires de classes et les types de collecte spécifiques à la persistance peuvent confondre les outils de liaison / de sérialisation.

Si vous avez un XSD pour le XML et que vous n'avez pas besoin de lier les données à un ensemble de classes existant, alors j'aime beaucoup XMLBeans . En gros, cela fonctionne comme ceci:

  • Compiler XSD
  • Utiliser les classes Java générées pour lire / écrire des documents conformes à ce schéma

La liaison d'un document XML aux classes générées est aussi simple que:

EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile); 

Nous utilisons xstream . La planification / la résolution des problèmes est triviale. Voir leur tutoriel pour des exemples.

Jibx est ce qui est utilisé ici. C'est très rapide, mais les fixations peuvent être un peu délicates. Toutefois, cela est particulièrement utile si vous avez des schémas XML décrivant vos objets de domaine, car ils s’appliquent bien à XSD (il existe même un outil bêta, XSD2Jibx, qui peut prendre des XSD et créer des classes de domaine et des mappages, que vous pouvez ensuite associer à correspond à votre modèle de domaine existant).

Il manipule le bytecode, il doit donc être exécuté après la compilation initiale des fichiers Java .class. Vous pouvez utiliser le plugin Maven pour cela, ou simplement l’utiliser directement (le plugin Eclipse ne semblait pas fonctionner pour moi).

J'ai utilisé Jaxb avec plus ou moins de succès. À l’époque (il y a quelques années), la documentation générale était terne et la documentation de base sur l’utilisation (y compris où télécharger les implémentations) était difficile à trouver ou à modifier.

L’analyseur qui a écrit les classes Java était assez bon, avec peu d’inconvénients par rapport au XSD original (bien que je pense qu’il avait des problèmes pour supporter les éléments XML abstraits).

Je ne l'ai pas utilisé depuis, mais j'ai un projet à venir qui nécessitera un tel cadre et je serais intéressé de savoir comment quelqu'un d'autre se comporte avec ce qui précède.

J'ai utilisé la roulette il y a 7 ans. Elle fonctionnait assez bien. DTD utilisées. Pas beaucoup de choix à cette époque.

Dans les projets en cours, j'ai utilisé
1) JAXB - basé sur les normes, implémentation de référence disponible, ligne de commande et outils ant disponibles. dernière version - 2.1.8 nécessite java 5+.
2) XStream - pour Soap unmarshalling - nécessite Java 5+. N’est pas aussi rapide et conforme aux normes que JAXB le plus récent.

BR,
~ A

XmlBeans est un bon choix, en particulier si vous avez des fichiers XSD / WSDL "cassés".

Don mentionné

  

EmployeesDocument empDoc = EmployeesDocument.Factory.parse (xmlFile);

.. mais il peut aussi prendre un nœud, un fichier ou n'importe quelle source.

Pas de combat avec les espaces de noms, traversez pour atteindre l'objet que vous souhaitez annuler, et Factory.parse.

Si seulement je l'avais trouvé il y a deux semaines.

Nous utilisons Castor. Cela répond assez bien à nos besoins.

Je me posais exactement la même question et, finalement, j’ai trouvé les tests de performances réalisés par IBM. http://www.ibm.com/developerworks/library/x-databdopt2/ / a>. JiBX est mon choix, je suppose, hehe.

scroll top