| XML | |
| Inicio | Cursos infosintesis.net liberados | Java SE Avanzado | Mani. Doc. XML con JAXB a partir de un XML Schema | |
| Manipular un Documento XML con JAXB a partir de un XML Schema | |
| Paso 1: Fundamentos |
JAXB (Java Architecture for XML Binding) es una API que nos permite manipular documentos XML desde un entorno Java de forma transparente.
Gracias al compilador de JAXB (schema compiler) a través del comando xjc se generan una serie de Clases Java que van a ser llamadas desde nuestras aplicaciones a través de setters y getters para así de esta forma obtener, modificar o crear los datos de un documento XML.
El compilador JAXB necesita previamente un XML Schema para poder crear la estructura de las Clases Java que el comando xjc ha creado. De esta forma podemos parsear un documento XML de forma transparente.
Pasos a seguir para parsear un documento XML
Primero de todo tenemos que crear un XML schema que en nuestro caso se va a llamar pedido.xml
Este es el código del XML schema pedido.xml
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" |
Para obtener los POJOs (Plain Old Java Objects) se tiene que ejecutar el comando xjc. De esta forma obtenemos una Clase por cada uno de los tipos complejos del XML Schema.
En nuestro caso se van a crear las Clases PedidoType.java, Articulos.java y DirecccionEEUU.java correspondientes a los tipos complejos <xsd:complexType name="PedidoType">, <xsd:complexType name="Articulos"> y <xsd:complexType name="DireccionEEUU">. También se crea la Clase a modo de factoría de objetos llamada ObjectFactory.java.

Una vez ya se han obtenido las Clases Java, se compilan a través del comando javac y obtemos en nuestro caso los ficheros PedidoType.class, Articulos.class, Articulos$Articulo.class, DirecccionEEUU.class y ObjectFactory.class.

A partir de un documento XML que es validado por su correspondiente XML schema se crea un árbol de objetos que representan los diferentes tipos complejos y la factoría de dichos objetos. A este proceso de instanciación de objetos se le denomina unmarshal.
Este es el código del documento XML pedido.xml
<?xml version="1.0" encoding="UTF-8"?> <pedido xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' |
Este es el árbol de objetos creado en memoria a través del proceso unmarshal

Una vez se han seguido los pasos anteriores, parsear un documento XML es tan sencillo como acceder a los métodos getters y setters del árbol de objetos generados por el proceso unmarshal. En nuestro caso desde nuestra aplicación por ejemplo podremos modificar la dirección de facturación a través de métodos setters a la variable de referencia facturarA, o añadir nuevos articulos a la lista de articulos.
Después de realizar los cambios pertinenentes se utiliza el proceso marshal para sobreescribir el documento XML o crear un nuevo documento XML.