viernes, 7 de junio de 2013

Uso de JAXB en el trabajo con XML y XSD en JAVA.

En esta entrada veremos cómo usar el framework JAXB en JAVA para trabajar con los XML, el escenario podría ser el siguiente.

Se nos ha entregado como parte de un proyecto un XSD a partir del cual debemos generar XMLs y los mismos deben ser deserializados a objetos JAVA. Esto puede incluir acciones de validación contra el XSD, lo cual será objeto de otra entrada.

Veremos como usando el XSD podemos:

1. Llevar el XSD al eclipse.

2. Generar las clases que se encargaran de trabajar en la serialización y deserialización de los objetos y XML.

3. Crear los XML.

4. Leer los datos del XML y usarlos en los objetos de nuestra aplicación.

Los pasos serán los siguientes:

1. Creamos un proyecto JAVA en el Eclipse.

2. Lo convertimos en un proyecto Maven desde el mismo eclipse.

3. Le agregamos las dependencias necesarias.

4. Creamos un XSD con una estructura definimos por nosotros.

5. Creamos las clases que se encargaran de acceder a los XML correspondientes a este XSD.

6. Creamos un XML a partir del XSD del paso 4.

7. Creamos una clase que nos permita obtener los datos del XML.

Los 2 primeros pasos no necesitan explicación.

Para el paso 3 deben ir al pom del proyecto Maven y agregar estas dependencias.

Para las dependencias de Maven deben usar las siguientes:

<dependencies>

<dependency>

<groupId>com.sun.xml.bind</groupId>

<artifactId>jaxb-xjc</artifactId>

<version>2.1.13</version>

</dependency>

<dependency>

<groupId>com.sun.xml.bind</groupId>

<artifactId>jaxb-impl</artifactId>

<version>2.1.13</version>

</dependency>

</dependencies>

En la siguiente imagen pueden ver las dependencias que se descargan:

clip_image002

Paso 4:

Para crear el XSD Ahora hacemos clic derecho sobre la carpeta src y creamos un nuevo archivo XSD tal y como se muestra en la imagen:

clip_image003

clip_image004

Luego veremos la siguiente pantalla:

clip_image006

En la sección de Types daremos clic derecho y crearemos un tipo complejo llamado Capitulo.

Para añadirle elementos al tipo complejo damos clic derecho encima de él y luego damos clic en Add Element, en mi caso queda algo como lo siguiente:

clip_image007

Ahora debemos crear un elemento para que nos almacene el tipo complejo que acabamos de crear. Para eso vamos a la sección Elements y damos clic derecho y luego en Add Element. Por defecto nos lo pone de tipo String, así que debemos darle doble clic y luego en el elemento damos clic derecho y seleccionamos “Set Type” y luego “Browse” para buscar el tipo complejo que creamos.

clip_image008

Ahí damos OK y listo.

clip_image009

Tendremos lo siguiente:

clip_image011

Si pasan a la sección de Source verán lo siguiente:

clip_image013

Paso 5:

Damos clic derecho sobre el esquema creado en el paso 4 y seleccionamos Generate -> JAXB clases.

clip_image015

Aquí seleccionamos el proyecto, damos Next, y llegamos a esta pantalla donde especificamos el paquete en que queremos que se generen las clases.

clip_image017

Damos finish y listo. Si todo fue bien veremos lo siguiente:

clip_image018

clip_image019

Como ven se nos ha creado el paquete con las clases dentro que representan el tipo de dato complejo que creamos en el XSD. Revisen la clase Capitulo para que vean el código generado.

Paso 6:

Ahora damos clic derecho sobre el XSD y seleccionamos la opción Generate -> XML File.

clip_image020

Damos Next.

clip_image021

Y luego Finish.

Ahora vamos al XML y editamos sus datos, en mi caso puse este.

clip_image023

Paso 7:

Ahora la clase que debemos crear es realmente sencilla. Les dejo el código porque se explica por sí solo.

clip_image024

Cuando ejecutamos vemos lo siguiente:

clip_image026

El código lo pueden descargar desde aquí  y compilar con Maven.

Cualquier duda pues dejen un comentario.





¿Te ha gustado este Post? Compártelo con tus amigos.

2 comentarios:

  1. podrias volver a subir el codigo por favor

    ResponderEliminar
  2. Buenas tardes mi estimado, podrias generar un video con la explicacion ya que me pierdo en el paso 1-3 te lo agradecería bastante.Saludos!

    ResponderEliminar

IconIconIcon