XML en classe Java (JAXB)
Générez des classes Java annotées JAXB à partir d'un XML d'exemple ; un attribut devient @XmlAttribute, un élément répété List<>
Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.
Cet outil a-t-il fait le travail ?
Merci, votre retour nous est bien parvenu.
Comment ça marche
Pour lire en Java le contenu d'une réponse SOAP ou d'un fichier XML d'échange sous forme d'objets, JAXB a besoin de classes annotées. Collez un XML d'exemple à gauche : à droite apparaît une classe par élément. L'élément racine reçoit @XmlRootElement(name = "commande") ; les éléments imbriqués sont écrits dans la classe racine en public static class, donc la sortie se compile en un seul fichier Commande.java. Les attributs d'un élément (numero="1024") deviennent des champs @XmlAttribute, ses sous-éléments des champs @XmlElement. Quand un élément a à la fois des attributs et du texte (<article ref="MA-11">Marmite en fonte</article>), le texte va dans un champ @XmlValue nommé value. Si un élément apparaît deux fois sous le même parent, le champ devient List<Article>. Le type est lu dans le texte : 1024 donne int, 590.50 double, true boolean ; 04000 commence par zéro, c'est peut-être un code postal ou un téléphone, il reste donc String. Un attribut absent de certains éléments (quantite) prend un type enveloppe comme Integer pour pouvoir rester vide. Choisissez jakarta pour Spring Boot 3 et Jakarta EE, javax pour un projet Java 8.
Cet outil est aussi connu sous le nom de xml en classe java, xml to java, xml to java class, jaxb class generator.
Qu'est-ce que JAXB ?
JAXB (Jakarta XML Binding) est le standard Java qui traduit des objets Java en documents XML et inversement. Les annotations @XmlRootElement, @XmlElement et @XmlAttribute posées sur une classe indiquent quel champ correspond à quelle partie du XML ; un Unmarshaller lit le XML en objets, un Marshaller écrit les objets en XML. Depuis Java 11, JAXB ne fait plus partie du JDK : on l'ajoute au projet comme dépendance.
Qu'est-ce que Attribut et élément XML ?
En XML, une information se transmet de deux façons : un élément (<montant>590.50</montant>) ou un attribut (<commande numero="1024">). Un attribut porte une seule valeur texte et ne peut pas se répéter ; un élément peut contenir des sous-éléments et apparaître plusieurs fois. JAXB distingue les deux avec @XmlAttribute et @XmlElement ; avec la mauvaise annotation, le champ reste vide à la lecture.
Quelle est la différence entre JAXB et Jackson XML ?
JAXB est le standard Java pour le XML et fonctionne avec des annotations comme @XmlElement ; les clients SOAP, les classes générées par xjc depuis un XSD et les serveurs Jakarta EE l'attendent. Jackson XML (jackson-dataformat-xml) est l'extension XML de Jackson, la bibliothèque JSON bien connue ; elle a ses propres annotations comme @JacksonXmlProperty et peut aussi lire les annotations JAXB grâce à un module. Si votre projet repose sur SOAP ou un XSD, prenez JAXB ; si c'est un projet REST qui utilise déjà Jackson pour le JSON, Jackson XML ajoute moins de dépendances.
Quelle partie du XML devient quelle annotation JAXB
JAXB relie les champs Java au XML par des annotations. L'outil annote chaque champ avec son nom XML d'origine : même si le nom Java diffère, la lecture fonctionne. Les classes portent @XmlAccessorType(XmlAccessType.FIELD) : JAXB lit les champs et pas les getters ; les getters et setters servent seulement à votre code.
La décision « liste ou pas » ne dépend pas d'un seul parent : si une commande a un article et une autre en a trois, article devient List<Article> partout. Sinon la lecture d'un document à un seul article échouerait sur le type du champ.
- <commande numero="1024"> → @XmlAttribute(name = "numero") private int numero;
- <montant>590.50</montant> → @XmlElement(name = "montant") private double montant;
- <article ref="MA-11">Marmite en fonte</article> → classe Article : @XmlAttribute ref + @XmlValue value
- deux <article> → @XmlElement(name = "article") private List<Article> article;
- <codePostal>04000</codePostal> → private String codePostal; (le zéro initial est gardé)
Limites honnêtes : espaces de noms, contenu mixte, dates
Les espaces de noms (xmlns) ne sont pas résolus : le préfixe de <cbc:ID> est retiré et le champ est annoté avec le seul nom « ID ». Si votre document utilise des espaces de noms, ajoutez vous-même namespace = "..." aux annotations ou une annotation @XmlSchema dans package-info.java. Pour de grands schémas comme UBL (factures électroniques), la génération depuis le XSD avec xjc donne un résultat plus juste.
Dans un élément qui mélange texte et sous-éléments (<remarque>Paiement <b>à la livraison</b></remarque>), le texte est ignoré et un commentaire l'indique en tête de la classe : JAXB n'accepte pas @XmlValue et @XmlElement dans la même classe. Les dates en texte (2026-09-27) restent String et ne deviennent pas LocalDate. Le type est déduit d'un seul exemple : plus votre exemple est varié, plus la classe est juste.
Questions fréquentes
Comment générer une classe Java à partir d'un XML ?
Collez un XML d'exemple dans le panneau de gauche de cette page et saisissez le nom du package. À droite apparaît une classe Java avec les annotations JAXB prêtes. Copiez ou téléchargez le code ; le fichier porte le nom de la classe racine et s'ajoute tel quel à votre projet.
Faut-il choisir jakarta ou javax ?
JAXB a été retiré du JDK avec Java 11, et depuis Jakarta EE 9 son package s'appelle jakarta.xml.bind. Avec Spring Boot 3 ou un serveur Jakarta EE récent, choisissez jakarta. Dans un ancien projet sous Java 8 ou Spring Boot 2, choisissez javax. Un mauvais package provoque une erreur de compilation.
Pourquoi le code postal est-il String et pas int ?
Une valeur qui commence par zéro (04000, 0612…) perdrait ce zéro si elle était lue comme un nombre. L'outil laisse donc en String les valeurs qui commencent par zéro et celles de plus de 18 chiffres. Pour recevoir tous les champs en texte, réglez « Nombres et valeurs true/false » sur Tout en String.
Le XML collé est-il envoyé à un serveur ?
Non. La lecture du XML, la déduction des types et l'écriture du code Java se font entièrement dans votre navigateur ; même une réponse de service avec des données clients ne quitte pas cette page.