[Métodos] Generar XML a partir de un BEAN y viceversa - Java XStream



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();
    
  • Serializar a XML

  • 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);
    
  • Deserializar

  • el mismo objeto xstream llamará al método fromXML(String xml), pasandóle el xml como un objeto String
    1
    xstream.fromXML(stringXml);
    


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>)
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