Trabajando con JAXB y Eclipse
0. Índice de contenidos.
- 1. Entorno
- 2. Introducción
- 3. Paso 1: Obtener Implementación de JAXB
- 4. Paso 2: Crear Proyecto Java en Eclipse
- 5. Paso 3: Creación de archivo XSD
- 6. Paso 4: Creación de clases accesoras
- 7. Paso 5: Creación de XML
- 8. Resultado
- 9. Conclusiones
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:
Descargaremos un jar que debemos ejecutar como se indica: java -jar JAXB2_20110512.jar
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:
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:
5. Paso 3: Creación de archivo XSD
Ahora hacemos click derecho sobre la carpeta src y creamos un nuevo archivo 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:
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)
Ahora crearemos el elemento para almacenar el libro usando el tipo complejo creado en los pasos anteriores:
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:
En la siguiente pantalla solo tendremos que introducir el paquete donde queremos crear nuestras clases dentro de nuestro directorio de fuentes:
Si todo ha ido bien, veremos las clases incluidas en el paquete que hemos indicado previamente:
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:
Introducimos el nombre y seguimos los pasos segun se indica:
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.
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.
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
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
Muchísimas gracias por la información, ha sido de gran utilidad
Gracias por el aporte, sencillo y puntual. Me sirvió a la perfección en Eclipse Mars con Java 8. Saludos.
muy bueno, muchas gracias