XStream: De objetos a XML de forma simple

Muchas veces en el ámbito de Java nos toca trabajar con XML ya sea en la generación de los mismos como leerlos para convertirlos en objetos con el fin de poder manipular sus datos de manera simple. Ahora bien existen muchas formas de hacer esto manualmente pero siempre caemos en algo que pueda no ser la solución mas optima o la que requiera menor cantidad de lineas de código.

A lo largo del tiempo han aparecido diversas librerías que cubrían parcialmente algunas de las funciones necesarias para poder manipular de manera simple los XML, esto fue así hasta el surgimiento de XStream.

¿Que es?

XStream es una librería open-source que nos permite serializar los objetos Java a un XML como así también realizar la operación inversa (recuperar el contenido de un XML en objetos Java).

Esta librería ha ganado gran popularidad dentro de la comunidad Java debido a su eficiencia, la gran simplicidad para poder utilizarla y en las ultimas versiones de la misma se ha añadido soporte para la generación e interpretación de JSON. pero veamos mejor algunas las ventajas que ofrece en el próximo apartado.

Ventajas

Algunas de las ventajas que ofrece XStream son:

  • Soporta anotaciones (annotations) lo cual facilita su configuración
  • No requiere modificación o creación de un objeto particular para el XML
  • La conversión de objeto a XML o XML a objeto es sencilla (apenas unas pocas lineas de código).
  • Permite indicar cuales atributos no deben ser incluidos en la generación de un XML
  • Permite indicar que atributo del XML se relaciona con el objeto.
  • Se pueden crear conversores para darle un determinado formato a ciertos atributos.

¿Como la agrego a mi proyecto?

Para poder usarla dentro de nuestro proyecto primero deberemos tenerla referenciada dentro de nuestro classpath para ello hay varias alternativas:

  1. Descargar la librería manualmente desde aqui
  2. Referenciarla desde Maven o Gradle

A los fines de este post mostraremos como usarla por medio de Maven por lo cual deberemos agregar dentro de nuestro archivo POM lo siguiente:

Debe tenerse en cuenta que la versión de la librería que actualmente esta vigente puede ser superior a la mencionada en este post por lo cual se debería chequear aqui.

¿Como lo uso?

Existen dos formas de usar esta librería ya se por medio de anotaciones o sin ellas, la ventaja del uso de anotaciones radica en que nos permite indicar que propiedades no deben ser tenidas en cuenta o cuales dentro del XML tienen otro nombre.

Ahora bien una buena forma de poder ver las cualidades de esta librería es por medio de un ejemplo que nos oriente como realizar lo básico, desde la conversión de un XML a la generación del mismo por medio de un objeto.

Convertir objetos a XML

La forma de convertir objetos a un XML es relativamente sencilla, para demostrarlo usaremos la siguiente clase como ejemplo:

Una vez que tengamos una instancia de la misma clase el código es muy simple y de pocas lineas

Como se puede ver en este ejemplo actualmente no se usan anotaciones es por eso que se debe indicar cual es el alias de la clase, esto es para que el nombre del nodo padre del XML tenga un nombre mas amigable y nos ponga todo el package de la clase.

Veamos ahora que nos genera la librería una vez que se ejecuta el código:

Ahora veamos una forma de solucionar tener que poner el alias de cada una de las clases implicadas en el XML como así también cambiarle el nombre a un atributo, para esto usaremos anotaciones dentro de la clase Invoice la cual quedaría de la siguiente manera:

Como se puede ver la manera de cambiarle el nombre a un atributo es bastante sencilla y no es requerida salvo en los casos en los que se quiera generar con otro nombre el atributo en cuestión.

Una vez que cambiemos nuestra clase con las anotaciones deberemos cambiar parte del código para que detecte automáticamente todas las clases con anotaciones sin necesidad de declararlas. El código quedaría de la siguiente forma:

Luego de ejecutar este código el String que nos retornara el método toXML es similar a este:

Convertir XML a objetos

En el apartado anterior hemos visto como hacer la conversión de un objeto a un XML, ahora realizar la operación inversa es bastante sencilla. Para demostrar esto usaremos la clase Invoice que se encuentra en el apartado anterior con las anotaciones ya existentes y pondremos como XML de entrada algo similar a esto:

Ahora para este ejemplo supondremos que existiría algún método se encargara de leer el contenido del XML y lo pondrá dentro de un String para su posterior conversión. Una vez hecho la lógica necesaria para realizar la operación de conversión es bastante sencilla

Una vez que ejecutemos este código convertirá todo el XML y seteara los valores correspondientes dentro del objeto Invoice. Cabe resaltar una diferencia con el código del apartado anterior el método autodetectAnnotations es para indicar que detecte cuales son las clases que tienen anotaciones y genere el correspondiente XML, en cambio para poder realizar la operación contraria debemos indicar a de que clase debe usar las anotaciones para realizar la conversión.

Conclusión

Como hemos visto a lo largo de este post, XStream nos presenta una gran facilidad para poder crear XML a partir de nuestros objetos como también modificar el formato de alguno de los atributos sin la necesidad de grandes fragmentos de código lo cual lo convierte en una buena opción para el manejo de XML.

Para aquellos que hicieran hacer pruebas con algun ejemplo de XStream aqui esta el codigo que se uso durante este ejemplo.

You may also like...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *