XStream es una interesante y simple libreria para serializar objetos a XML y viceversa.
Caracteristicas de XStream
- Fácil de usar. Cuenta una fachada de alto nivel que simplifica los casos más comunes de uso.
- No requiere homologaciones “mappings”. La mayoría de los objetos se puede serilizar sin necesidad de crear archivos de homologación o “mapping”.
- Rendimiento. Velocidad y bajo consumo de memoria son parte esencial del diseño, lo que hace que XStream sea adecuada sistemas con grandes objetos o alta demanda de envío de mensajes.
- XML Limpio. XStream usa “reflection” y crea archivos XML facilmente entendibles por humanos y más compactos que usando la serialización nativa de Java.
- No requiere modificar los objetos. Se serializan los campos internos, incluyendo privados y finales. Las clases internas y no publicas son soportadas. No se requiere que las clases tengan un constructor por defecto (sin parametros).
- Soporte completo para objetos complejos. Las referencias duplicadas (duplicate references) encontradas en el objeto se mantienen. Soporta referencias duplicadas (circular references).
- Integración con otras API de XML. Implementado un interfaz, Xstream puede serializar directamente hacia/desde cualquier estructura de arbol (tree structure) no sólo XML.
- Estratégias de conversión personalizables. Las estrategias de conversión se pueden registrar permitiendo personalizar como los tipos son representados en XML.
- Mensajes de error. Cuando una excepción, por XML mal formado, es encontrada se provee un diagnostico detallado para ayudar a encontrar y solucionar el problema.
- Formato se salida alterno. El diseño modular permite otros formatos de salida. Xstream tiene actualmente soporte para JSON.
Manos a la obra:
Pueden consultar el tutorial de dos minutos en el cual me estoy basando para este post, con algunos detalles adicionales.
Estoy omitiendo los constructores y métodos para ahorrar espacio ;-)
Supongamos que tenemos los siguientes POJOs (Plain Old Java Object) :
ejemplo 1 - pojos
public class PhoneNumber { private int code; private String number; // ... constructores y métodos } public class Person { private String firstname; private String lastname; private PhoneNumber phone; private PhoneNumber fax; // ... constructores y métodos }
El siguiente es un ejemplo de como serializar un objeto tipo Person:
ejemplo 2 - usando XStream
XStream xstream = new XStream(); //[1] alias opcionales xstream.alias("person", Person.class); Person joe = new Person("Joe", "Walnes"); joe.setPhone(new PhoneNumber(123, "1234-456")); joe.setFax(new PhoneNumber(123, "9999-999")); String xml = xstream.toXML(joe);
ejemplo 2.1 - contenido de la variable xml
Joe Walnes 123
1234-456 123
9999-999
Para convertir de XML a un objeto java:
ejemplo 2.2 - xml a java.
//usamos la variable xml del ejemplo 2 Person newJoe = (Person)xstream.fromXML(xml);
En el siguiente post hablaré sobre las Anotaciones en XStream.
[Notas]
1 Sino agregamos los alias opcionales el código aun funcionará pero los etiquetas de los elementos contendrán el nombre completo de cada clase (fully qualified name).