Actualités

[21/09/2010] Smile participe au Salon e-commerce Paris 2010

Smile sera présent sur le salon e-commerce de Paris, Porte de Versailles, les 21, 22 et 23 septembre et animera deux conférences sur les outils e-commerce open source, mardi 21 septembre, à 16h00.

[06/07/2010] Les Rencontres Mondiales du Logiciel Libre fêtent leur 10 ans à Bordeaux

Smile participera activement aux RMLL du 6 au 11 juillet à Bordeaux en animant plusieurs conférences et tables rondes

[29/06/2010] Smile, élu meilleur partenaire de l’année pour eZ Publish

Une récompense particulière a été décernée à Smile à l’occasion des eZ awards 2010 : le prix de partenaire de l’année.

Toutes les actualités
       
Guillemet ouvrant L'actualité des solutions
et des technologies du web Guillemet fermant

XStream ou comment sérialiser / dé-sérialiser facilement du XML

XStream est une bibliothèque JAVA qui permet de sérialiser et dé-sérialiser des objets dans des fichiers XML. Cette bibliothèque permet donc de parser et d'écrire des fichiers XML.

Où trouver XStream ?

XStream est disponible sous forme de Jar sur le site : http://xstream.codehaus.org
Il est également possible d'intégrer XStream dans un projet Maven car celui-ci est disponible dans les repositories standards (central).

<dependency>
  <groupId>com.thoughtworks.xstream</groupId>
  <artifactId>xstream</artifactId>
  <version>1.3.1</version>
 </dependency>

Comment cela fonctionne ?

XStream est très facile à utiliser. Cette bibliothèque ne nécessite aucun mapping extérieur et n'utilise que des annotations Java pour effectuer la relation entre les classes et les balises XML.

Comment sérialiser un objet (écriture) ?

Dans ce paragraphe, nous allons voir comment on peut écrire un fichier XML à partir d'objets Java. Soit les 2 classes suivantes :

package xstream;
 
 import java.util.List;
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
 
 @XStreamAlias("auteur")
 public class Auteur {
 
     @XStreamAlias("nom")
     private String nom;
     @XStreamAlias("prenom")
     private String prenom;
     @XStreamImplicit
     private List<Livre> livres;
 
     public String getNom() {
         return nom;
     }
 
     public void setNom(String nom) {
         this.nom = nom;
     }
 
     public String getPrenom() {
         return prenom;
     }
 
     public void setPrenom(String prenom) {
         this.prenom = prenom;
     }
 
     public List<Livre> getLivres() {
         return livres;
     }
 
     public void setLivres(List<Livre> livres) {
         this.livres = livres;
     }
 
 }

et

package xstream;
 
import com.thoughtworks.xstream.annotations.XStreamAlias;
 
@XStreamAlias("livre")
public class Livre {
    @XStreamAlias("titre")
    private String titre;
    @XStreamAlias("editeur")
    private String editeur;
 
    public String getTitre() {
        return titre;
    }
 
    public void setTitre(String titre) {
        this.titre = titre;
    }
 
    public String getEditeur() {
        return editeur;
    }
 
    public void setEditeur(String editeur) {
        this.editeur = editeur;
    }
 
}

Ces 2 classes sont de simples beans avec des annotations provenant d'XStream.

  • @XStreamAlias : permet de définir le nom de la balise XML
  • @XStreamImplicit : permet de définir une liste comme un ensemble de noeud d'un noeud (ici : <livres><livre></livre><livre></livre>...</livres>).
  • @XstreamImplicit(itemFieldName=«livre» )Il est aussi possible de générer les noeuds directement à la racine du noeud principal (ici : <auteur><livre></livre><livre></livre></auteur>)
  • @XstreamAsAttribute : permet de définir une propriété d'un objet comme attribut du noeud XML

Pour sérialiser notre objet Auteur, il suffit d'instantier un objet XStream puis d'appeler la méthode toXML() en passant l'objet à sérialiser en paramètre.

Par exemple :

package xstream;
 
import java.util.ArrayList;
import java.util.List;
 
import com.thoughtworks.xstream.XStream;
 
public class Serialization {
    private Auteur init() {
        Auteur auteur = new Auteur();
        auteur.setNom("Hugo");
        auteur.setPrenom("Victor");
        List<Livre> livres = new ArrayList<Livre>();
        Livre livre1 = new Livre();
        livre1.setEditeur("Editeur1");
        livre1.setTitre("Les Misérables");
        livres.add(livre1);
        Livre livre2 = new Livre();
        livre2.setEditeur("Editeur2");
        livre2.setTitre("93");
        auteur.setLivres(livres);
        return auteur;
    }
 
    public String serialize() {
        Auteur auteur = init();
        XStream xstream = new XStream();
        String xml = xstream.toXML(auteur);
        return xml;
    }
 
}

Comment dé-sérialiser un objet (parsing) ?

Pour dé-sérialiser un fichier XML, c'est à dire parser un fichier XML pour en récupérer une représentation Objet, il suffit d'instantier un objet XStream, de préciser la classe parente contenant les annotations puis d'appeler la méthode fromXML() en passant la chaine ou le flux à parser en paramètre.

Par exemple :

package xstream;
 
 import java.io.IOException;
 import java.io.InputStream;
 
 import com.thoughtworks.xstream.XStream;
 
 public class DeSerialization {
 
     public Auteur deSerialize() throws IOException {
         XStream xstream = new XStream();
         xstream.processAnnotations(Auteur.class);
         InputStream is = this.getClass().getResourceAsStream("testAuteur.xml");
         Auteur auteur = (Auteur) xstream.fromXML(is);
         is.close();
         return auteur;
     }
 
 }

Pour quoi faire ?

Avec XStream il est très facile de manipuler : lecture / écriture des fichiers XML. Cette bibliothèque peut donc être utilisée pour :

  • gérer facilement la configuration d'une application.
  • dans le cas de tests unitaires pour rapidement mocker des beans à partir de fichier XML.
  • dans la création d'un protocole de communication pour échanger des données via HTTP par exemple
  • ou plus simplement pour persister des beans

En conclusion, XStream permet de manipuler facilement des fichiers XML mais il existe d'autres bibliothèques de ce type comme Simple (http://simple.sourceforge.net/). L'avantage revenant à XStream pour la facilité à rechercher de la documentation.

Aurélien Loth

Commentaires

Soyez la premiere personne à ajouter un commentaire sur cet article.
Ecrire un nouveau commentaire