Dernière modification : 23/08/2022

 

JAXB 2.0 (Java Architecture for XML Binding)

JAXB est une spécification permettant la correspondance  d'un document XML à un ensemble de classes et inversement au moyen d'opérations de sérialisation/désérialisation nommées marshalling/unmarshalling.
Dans cet article nous allons voir comment utiliser JAXB 2.0 (Java Architecture for XML Binding) pour manipuler ces documents XML.

1. Introduction

JAXB permet la manipulation de documents XML sans pour autant avoir à les manipuler directement. En effet, les données manipulées seront les classes java où seront importées les données (désérialisation => unmarshalling) et exportées (sérialisation => marshalling) dans des fichiers.

JAXB permet également la création automatique des entités java gâce au schéma XML (fichier xsd) et inversement.

Le fichier XSD suivant sera pris pour exemple dans cet article :



	
		
			
				
					
						
							
							
								
									
										
										
									
								
							
						
					
				
			
		
	

2. Création des entités java via le schéma

2.1 Génération via la commande xjc

Afin de générer les classes annotées et donc d'obtenir un mapping avec le fichier xsd, utiliser la commande xjc :

xjc library.xsd

Options de la commande :

option Rôle

-p nom_package

Package contenant les classes générées

-d répertoire

Répertoire contenant les classes générées

-nv

Supprime la validation du schéma

2.2 Génération via maven

Dans le fichier pom.xml, insérer les dépendances suivantes :


	
		jakarta.xml.bind
		jakarta.xml.bind-api
		2.3.3
	
	
		com.sun.xml.bind
		jaxb-impl
		2.3.3
		runtime
	

Les dépendances ci-dessus sont indispenssable depuis java 11 car java.xml.bind a été supprimé dans cette version et déprécié depuis java 9. Sans, les classes générées ne sont pas utilisables.

Dans le pom.xml insérer le plugin suivant :


	org.codehaus.mojo
	jaxb2-maven-plugin
	
		
			xjc
			
				xjc
			
			
				
					src/main/resources/schema.xsd
				
				src.main.resources
			
		
	

Insérer le fichier XSD contenant le schéma (ici nommé schema.xsd) dans le dossier src/main/resources/. C'est ce plugin qui permet la génération automatique des classes.

Remarque : Pour une utilisation du projet avec Eclipse, il est nécessaire d'ajouter les nouvelles sources dans le projet. Pour ce faire, aller dans les propriétés du projet, puis dans Java Build Path > Source et ajouter le dossier target/generated-sources/jaxb.

3. Importer un fichier XML (unmarshaling)

Fichier XML importé (library.xml) positionné dans le dossier src/main/resources/ :



    
        Java book
        
            Alex
            Lemaire
        
    

Exemple d'import :

try {
    final JAXBContext jc = JAXBContext.newInstance("src.main.resources");
    final Unmarshaller unmarshaller = jc.createUnmarshaller();
    final Library library = (Library) unmarshaller.unmarshal(
            new File("src/main/resources/library.xml"));
    final List livres = library.getBook();
    for (final Book book : livres) {
        System.out.println("Book ");
        System.out.println("Title : " + book.getTitle());
        System.out.println("Author : " + book.getAuthor().getFirstName()
                + " " + book.getAuthor().getLastName());
        System.out.println();
    }
} catch (final Exception e) {
    e.printStackTrace();
}

4. Exporter un fichier XML (marshaling)

Exemple d'export :

try {
    final JAXBContext context = JAXBContext.newInstance(Library.class);
    final Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    final ObjectFactory fabrique = new ObjectFactory();
    final Library bibliotheque = fabrique.createLibrary();
    final Book book = fabrique.createLibraryBook();
    final Author author = fabrique.createLibraryBookAuthor();
    author.setFirstName("Alex");
    author.setLastName("Lemaire");
    book.setAuthor(author);
    book.setTitle("Java book");
    bibliotheque.getBook().add(book);
    m.marshal(bibliotheque, System.out);
} catch (final Exception e) {
    e.printStackTrace();
}

Sortie :



    
        Java book
        
            Alex
            Lemaire