Qu’est-ce que JAXB et pourquoi l’utiliser?

Il y a un gars ici qui jure que JAXB est la meilleure chose depuis le pain tranché. Je suis curieux de voir ce que les utilisateurs de Stack Overflow pensent du cas d’utilisation pour JAXB et de ce qui en fait une bonne ou une mauvaise solution pour ce cas.

Je suis un grand fan de JAXB pour la manipulation de XML. Fondamentalement, il fournit une solution à ce problème (je suppose que vous connaissez bien XML, les structures de données Java et les schémas XML):

Travailler avec XML est difficile. Il faut un moyen de prendre un fichier XML – qui est essentiellement un fichier texte – et de le convertir en une sorte de structure de données, que votre programme peut alors manipuler.

JAXB utilisera un schéma XML que vous écrivez et créera un ensemble de classes correspondant à ce schéma. Les utilitaires JAXB créeront la hiérarchie des structures de données pour manipuler ce XML.

JAXB peut alors être utilisé pour lire un fichier XML, puis créer des instances des classes générées, chargées des données de votre XML. JAXB fait aussi l’inverse: prend des classes Java et génère le XML correspondant.

J’aime JAXB car il est facile à utiliser et est livré avec Java 1.6 (si vous utilisez 1.5, vous pouvez télécharger les .jars JAXB). La façon dont il crée la hiérarchie des classes est intuitive et, selon mon expérience, fait un travail décent abstraire le “XML” pour que je puisse me concentrer sur les “données”.

Donc, pour répondre à votre question: je m’attendrais à ce que, pour les petits fichiers XML, JAXB soit exagéré. Vous devez créer et gérer un schéma XML et utiliser des “méthodes standard de manuel” d’utilisation des classes Java pour les structures de données. (Classes principales, petites classes internes pour représenter des “nœuds”, et une hiérarchie énorme). JAXB n’est donc probablement pas très utile pour une liste linéaire simple de “préférences” pour une application.

Mais si vous avez un schéma XML assez complexe et beaucoup de données, JAXB est fantastique. Dans mon projet, je convertissais de grandes quantités de données entre des fichiers binarys (consommés par un programme C) et XML (pour que les humains puissent consumr et modifier ces données). Le schéma XML résultant était non sortingvial (plusieurs niveaux de hiérarchie, certains champs pouvaient être répétés, d’autres ne pouvaient pas l’être). JAXB était donc utile pour pouvoir le manipuler.

Voici une raison pour ne pas l’utiliser: la performance en souffre. Il y a beaucoup de frais généraux lors du rassemblement et du démantèlement. Vous pouvez également envisager une autre API pour la liaison XML-Object – telle que JiBX: http://jibx.sourceforge.net/

C’est un “ORM for XML”. Le plus souvent utilisé aux côtés de JAX-WS (et même les implémentations de Sun sont développées ensemble) pour les systèmes WS Death Star.

J’utilise JAXB au travail tout le temps et je l’aime vraiment. C’est parfait pour les schémas XML complexes qui changent constamment et surtout pour l’access aléatoire aux balises dans un fichier XML.

Je déteste avoir un proxénète, mais je viens juste de créer un blog et c’est littéralement la première chose dont j’ai parlé!

Vérifiez le ici:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/

JAXB est génial si vous devez coder avec une spécification XML externe définie en tant que schéma XML ( xsd ).

Par exemple, vous avez une application de trading et vous devez signaler les transactions à l’application Uber Lame Trade Reporting et elles vous ont donné ultra.xsd . Utilisez le compilateur $JAVA_HOME/bin/xjc pour transformer le XML en un groupe de classes Java (par exemple, UltraTrade ).

Vous pouvez ensuite simplement écrire une couche d’ adaptateur simple pour convertir vos objects commerciaux en UltraTrades et utiliser JAXB pour UltraTrades les données vers Ultra-Corp. Beaucoup plus facile que de manipuler vos trades dans leur format XML.

Là où tout tombe en panne, c’est quand Ultra-Corp n’a pas vraiment obéi à ses propres spécifications, et le price qu’il a baissé en tant que xsd:float devrait en fait être exprimé en double !

Avec JAXB, vous pouvez créer automatiquement des représentations XML de vos objects (marshalling) et des représentations d’object du XML (unmarshalling).

En ce qui concerne le schéma XML, vous avez deux choix:

  • Générer des classes Java à partir d’un XSD
  • Générer un XSD à partir de vos classes Java

Il existe également des bibliothèques de sérialisation XML plus simples, telles que XStream , Digester ou XMLBeans, qui pourraient constituer des alternatives.

Pourquoi avons-nous besoin de JAXB? Les composants distants (écrits en Java) des services Web utilisent XML comme moyen d’échange de messages entre eux. Pourquoi XML? Parce que XML est considéré comme une option légère pour échanger des messages sur les réseaux avec des ressources limitées. Nous avons souvent besoin de convertir ces documents XML en objects et inversement. Exemple: Simple Java POJO Employee peut être utilisé pour envoyer des données Employé à un composant distant (également un programme Java).

 class Employee{ Ssortingng name; Ssortingng dept; .... } 

Ce Pojo devrait être converti (Marshall) en document XML comme suit:

  ... ...  

Et sur le composant distant, retour à l’object Java à partir d’un document XML (Un-Marshall).

Qu’est ce que JAXB?

JAXB est une bibliothèque ou un outil permettant d’effectuer cette opération de marshalling et d’UnMarshalling. Il vous évite ce mal de tête, aussi simple que cela.

Vous pouvez également consulter JIBX également. Il s’agit également d’un très bon classeur de données XML, également spécialisé dans l’OTA (Open Travel Alliance) et pris en charge par les serveurs AXIS2. Si vous recherchez des performances et une compatibilité, vous pouvez le vérifier:

http://jibx.sourceforge.net/index.html

JAXB fournit des performances améliorées via des optimisations de regroupement par défaut. JAXB définit une API de programmation pour lire et écrire des objects Java depuis et vers des documents XML, simplifiant ainsi la lecture et l’écriture de XML via Java.