XStream es una libreria para serializar objetos a XML y viceversa.
Es de las librerias mas faciles de usar, y cuando dice 'fácil' es realmente facil! (después de hacerse con la dependencia)
- Crear un objeto de la clase XStream a través de un contructor vacío...
1
XStream xstream = new Xstream();
- Simplemente llamando al método toXML(Object objecto), 'a xml' tiene sentido no?, y pasandóle como parámetro el objeto.
1
xstream.toXML(objeto);
- el mismo objeto xstream llamará al método fromXML(String xml), pasandóle el xml como un objeto String
1
xstream.fromXML(stringXml);
Serializar a XML
Deserializar
Pequeño ejemplo ilustrado:
Contamos con una entidad llamada persona:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package com.dar10.entity; public class Persona { // ATRIBUTOS private String nombre; private String apellido; private Integer años; // CONSTRUCTORES public Persona() { } public Persona(String nombre, String apellido, Integer años) { super(); this.nombre = nombre; this.apellido = apellido; this.años = años; } // GETTERS Y SETTERS public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getApellido() { return apellido; } public void setApellido(String apellido) { this.apellido = apellido; } public Integer getAños() { return años; } public void setAños(Integer años) { this.años = años; } } |
Es necesario declarar un constructor vacío en caso de usar otro con los atributos, ya que xstream usará el por defecto para serializar el objeto.
Corriendo la app
1 2 3 4 5 6 | public static void main(String[] args) { XStream xstream = new XStream(); Persona pepe = new Persona("José", "Hernandez", 28); String xml = xstream.toXML(pepe); System.out.println(xml); } |
La salida será:
1 2 3 4 5 | <com.dar10.entity.Persona> <nombre>JOSE</nombre> <apellido>Hernadez</apellido> <años>15</años> </com.dar10.entity.Persona> |
Si de repente parece feo el nombre de la clase a través de todos los paquetes a los que pertenece, puede ser cambiado configurando el objeto 'xstream' con su
metodo
alias(String alias, <nombre de la clase>)
metodo
alias(String alias, <nombre de la clase>)
1 | xstream.alias("criatura", Persona.class); |
Recordando como guardar cadenas de texto en algun viejo post
podemos obtener algo asi:
Convirtiendo a Objeto
Si bien el método que hace la magia es fromXML
Existen diversos problemas como que:
- El xml contenga otra jerarquia de etiquetas/atributos
- El xml contenga distintos tipos de variables(un string en lugar de un número)
- El xml esté vacío o finalice abrutamente
- O simplemente el xml no es el correcto para deserializar la clase pretendida entre tantas otras...
Si el camino es feliz o tenemos la seguridad de convertir el xml que soñamos se hará correctamente, de lo contrario hay que cachear el XStreamException
1 2 3 4 5 | try{ xstream.fromXML(xmlString) }catch(XStreamException e){ e.printStackTrace(); } |
No hay comentarios:
Publicar un comentario