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.
Commentaires