8 Serialización de Objetos a XML¶
Introducción¶
Para serializar de forma sencilla objetos Java a XML y viceversa, se suele usar la librería XStream.
Para usarla hay que descargarse los JAR desde el sitio web https://x-stream.github.io/
Se descomprime y se inserta al proyecto los JAR xstream-X.X.X.jar ubicada dentro de la carpeta lib. También será necesario el fichero kxml-X.X.X.jar que se localiza en la carpeta lib/xstream.
Otra manera de poder usar es a través de los gestores de paquetes Maven o Gradle, entre otros.
Escritura de ficheros XML¶
Para escribir un fichero XML usando la librería XStream, deberemos crear una clase que contenga una lista de los datos que queremos insertar, y después deberemos insertamos dicha lista en un XML usando la función toXML() que me permitirá parsear la lista a XML.
En está librería encontramos los siguientes métodos útiles:
- alias(): Este método sirve para cambiar el nombre de la etiqueta de la clase en XML. Por ejemplo, si tenemos una clase ListProduct, la etiqueta XML por defecto será
<ListProduct></ListProduct>
, si queremos cambiar dicha etiqueta usaremos dicho método con el nombre de la etiqueta y la clase necesaria. - aliasField(): Es igual que el método anterior pero para los atributos de la clase.
- addImplicitCollection(). Este método no añade la etiqueta del atributo de la lista que contiene la lista de objetos que queremos parsear.
public class WriteXML {
public void show() {
XStream xStream = new XStream();
ListaContactos listaContactos = new ListaContactos();
File destino = new File("person.xml");
listaContactos.add(new Person("María", 25));
listaContactos.add(new Person("Julián", 33));
try{
xStream.alias("ListaPersonas", ListaContactos.class);
xStream.alias("Contactos", Person.class);
xStream.addImplicitCollection(ListaContactos.class, "list");
xStream.aliasField("NombreContacto", Person.class, "name");
xStream.aliasField("TeléfonoContacto", Person.class, "age");
xStream.toXML(listaContactos, new FileOutputStream(destino));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new WriteXML().show();
}
}
Lectura de ficheros XML¶
Para leer un fichero serializado XML con XStream será necesario volver a indicarle las alías, en caso de haberlo hecho.
¡Importante!
En algunas ocasiones para leer un fichero, será necesario darle permiso, por lo que usaremos la función addPermission()
public class ReadXML {
public void show() {
XStream xStream = new XStream();
ListaContactos listaContactos;
File file = new File("person.xml");
try {
xStream.addPermission(AnyTypePermission.ANY);
xStream.alias("ListaPersonas", ListaContactos.class);
xStream.alias("Contactos", Person.class);
xStream.addImplicitCollection(ListaContactos.class, "list");
xStream.aliasField("NombreContacto", Person.class, "name");
xStream.aliasField("TeléfonoContacto", Person.class, "age");
listaContactos = (ListaContactos) xStream.fromXML(new FileInputStream(file));
for (Person person : listaContactos.getList()) {
System.out.println(person);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ReadXML().show();
}
}