Trabajando con JAXB y Eclipse

6
43706

Trabajando con JAXB y Eclipse

0. Índice de contenidos.

1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil 2,4 Ghz Intel Core2 Duo P8600
  • Sistema Operativo: Windows 7 Profesional x86 SP1
  • Eclipse Helios (Revisar tutorial de Alex para su instalación)
  • Versión de JRE 6 instalada en el sistema
  • Implementación de JAXB 2.2.4

2. Introducción

En este tutorial realizaremos el proceso de generación de un schema (XSD) de XML utilizando JAXB y las herramientas proporcionadas por eclipse para realizarlo de forma gráfica.

Paso 1: Obtener Implementación de JAXB

Podemos descargar la distribución de JAXB desde https://github.com/gf-metro/jaxb. En nuestro caso descargaremos la versión siguiente:

Descarga JAXB

Descargaremos un jar que debemos ejecutar como se indica: java -jar JAXB2_20110512.jar

Aceptar condificiones y extraer

Si todo va bien se habrá descomprimido en el directorio jaxb-ri-20110512 (en la misma ubicación del JAR)

4. Paso 2: Crear Proyecto Java en Eclipse

Ahora vamos a eclipse y creamos un nuevo proyecto java:

Proyecto Java

Dentro del proyecto creamos una carpeta llamada lib donde incluiremos las librerias de JAXB indicadas y las agregamos a nuestro buildpath de aplicacion como se muestra en las imagenes siguientes:

Carpeta Lib
Librerias de JAXB
Build Path

5. Paso 3: Creación de archivo XSD

Ahora hacemos click derecho sobre la carpeta src y creamos un nuevo archivo XSD:

Nuevo XSD
Nombre XSD

Una vez creado el XSD hacemos doble click y nos aparecerá la siguiente ventana donde comenzaremos a crear un nuevo tipo complejo que en nuestro caso se llamará Libro:

Complex Type
Libro

Ahora añadimos los elementos del tipo complejo haciendo click derecho sobre el tipo y pulsando sobre «Add Element», para el siguiente elemento nos cambiará la vista de diseño, pero la accion será la misma (click derecho…etc)

Elemento nombre
Elemento ISBN

Ahora crearemos el elemento para almacenar el libro usando el tipo complejo creado en los pasos anteriores:

Añadir Elemento
Asignar tipo

Si todo ha ido bien deberemos tener un xml parecido al siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.example.org/autentia-schema" 
	xmlns:tns="http://www.example.org/autentia-schema" 
	elementFormDefault="qualified">
    <complexType name="Libro">
    	<sequence>
    		<element name="Nombre" type="string"></element>
    		<element name="ISBN" type="string"></element>
    	</sequence>
    </complexType>
    <element name="Libros" type="tns:Libro"></element>
</schema>

6. Paso 4: Creación de clases accesoras

Ahora que tenemos definido el XSD haremos click derecho sobre este y pulsaremos en «Generate–>JAXB Classes…» como se muestra en la imagen:

Generate JAXB classes

En la siguiente pantalla solo tendremos que introducir el paquete donde queremos crear nuestras clases dentro de nuestro directorio de fuentes:

Package Selection

Si todo ha ido bien, veremos las clases incluidas en el paquete que hemos indicado previamente:

JAXB Classes

7. Paso 5: Creación de XML

Ahora volvemos a hacer click derecho sobre el XSD y pulsaremos en «Generate–>XML File…» como se muestra en la imagen:

XML File

Introducimos el nombre y seguimos los pasos segun se indica:

XML name
XML name

Editamos el xml creado con lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<tns:Libros xmlns:tns="http://www.example.org/autentia-schema" 
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
			xsi:schemaLocation="http://www.example.org/autentia-schema autentia-schema.xsd ">
  <tns:Nombre>Libro1</tns:Nombre>
  <tns:ISBN>ISBN1</tns:ISBN>
</tns:Libros>

8. Resultado

Por último creamos una clase ejemplo para obtener los datos del XML:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.autentia.xml.Libro;
public class PruebaAutentia {
	public static void main(String[] args) {	
		try {
			final JAXBContext jc = JAXBContext.newInstance(Libro.class.getPackage().getName());
			final Unmarshaller u = jc.createUnmarshaller();
	        final JAXBElement<Libro> menuElement = (JAXBElement<Libro>)u.unmarshal(PruebaAutentia.class.getResourceAsStream("/autentia-books.xml"));
			System.out.println("Nombre: " + menuElement.getValue().getNombre());
			System.out.println("ISBN: " + menuElement.getValue().getISBN());
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
}

Por último, la ejecución de esta clase nos deberia como salida dar el nombre y el ISBN introducidos al crear el xml:

Nombre: Libro1

ISBN: ISBN1

6. Conclusiones

De esta forma se nos facilita la creación de esquemas xml al hacerlo mas visual, el nivel de complejidad irá aumentando según sea la definición del esquema, pero nos puede quedar mas claro utilizando estos mecanismos. Este método también es valido para crear las clases accesoras y hacer el Unmarshaller partiendo de un xsd ya definido anteriormente.

Con esto ya podemos leer nuestros xml de forma programática.

Cualquier duda o sugerencia podeis comentarlo.

Saludos.

6 COMENTARIOS

  1. Estimado Carlos..

    Intente desarrollar el ejemplo en otra versión de eclipse(INDIGO), seguí los pasos que se menciona en el tuto, pero a la hora de generar el archivo autentia-schema.xsd, el IDE no me da opción (JAXB Clases…)
    tal vez tenga que agregar algún plugin especial al IDE?…

    Gracias por tu Aporte..

    Liz.

  2. Debes partir de la versión de eclipse: eclipse-jee-indigo-win32-x86_64.zip (que es la que se parte en el requisito previo que indicaba del tutorial de Alex). Si quieres partir de la versión clasic, deberás instalar los plugin desde el repo: Indigo – http://download.eclipse.org/releases/indigo, y seleccionar las herramientas Web que es donde se encuentran las opciones del tutorial.

    Saludos

    Carlos León

  3. Necesito sabes que tam bueno para parsear y obtener datos de un XML schema y si es posible que me recomienden otra. Gracias y muy bueno el post

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad