Saltar la navegación

6.7.3.- Funcionamiento de JAXB.

Código de fichero XML escrito en papel.

Para construir una aplicación JAXB necesitamos tener un esquema XML.

ras obtener el esquema XML, seguimos los siguientes pasos para construir la aplicación JAXB:

  1. Escribir el esquema: es un documento XML que contiene la estructura que se tomará como indicaciones para construir las clases. Estas indicaciones pueden ser, por ejemplo, el tipo primitivo al que se debe unir un valor de atributo en la clase generada.
  2. Generar los ficheros fuente de Java: para esto usamos el compilador de esquema, ya que éste toma el esquema como entrada de información. Cuando se haya compilado el código fuente, podremos escribir una aplicación basada en las clases que resulten.
  3. Construir el árbol de objetos Java: con nuestra aplicación, se genera el árbol de objetos java, también llamado árbol de contenido, que representa los datos XML que son validados con el esquema. Hay dos formas de hacer esto:
    1. Instanciando las clases generadas.
    2. Invocando al método unmarshall de una clase generada y pasarlo en el documento. El método unmarshall toma un documento XML válido y construye una representación de árbol de objetos.
  4. Acceder al árbol de contenido usando nuestra aplicación: ahora podemos acceder al árbol de contenido y modificar sus datos.
  5. Generar un documento XML desde el árbol de contenido. Para poder hacerlo tenemos que invocar al método marshall sobre el objeto raíz del árbol.

JAXB proporciona dos principales características:

  • La capacidad de serializar (marshalling) objetos Java a XML.
  • Lo inverso, es decir, deserializar (unmarshalling) XML a objetos Java.

O sea que JAXB permite almacenar y recuperar datos en memoria en cualquier formato XML, sin la necesidad de implementar un conjunto específico de rutinas XML de carga y salvaguarda para la estructura de clases del programa.

El compilador de JAXB (schema compiler) permite generar una serie de clases Java que podrán ser llamadas desde nuestras aplicaciones a través de métodos sets y gets para obtener o establecer los datos de un documento XML.

Los pasos en el proceso de enlace de JAXB están representados en la figura:

  1. Generar clases: podemos escribirlas manualmente, como en el capitulo anterior o utilizar las clases  generadas por el IDE JAXB automáticamente utilizando el esquema .xsd correspondiente al XML, lo veremos más adelante.
  2. Deben compilarse todas las clases generadas, los archivos fuente y el código de la aplicación .
  3. Aplicar Marshall a los objetos de las clases mapeadas para crear XML
  4. Aplicar UnMarshall al XML para obtener objetos de las clases mapeadas . 

Marshall

Para poder poder hacer esta traducción, lo primero que necesitamos es un contexto, el cual instanciaremos pasándole la clase de nuestro root:             

 JAXBContext jaxbContext = JAXBContext.newInstance(Libreria.class);
Ya tenemos un contexto y ahora toca generar nuestro Marshaller
           
   Marshaller marshaller = jaxbContext.createMarshaller();
   marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Para obtener un resultado, debemos pasarle una salida a nuestro marshaller. Aquí tienes un par de ejemplo de como hacerlo.        
marshaller.marshal(libreria, System.out);

o bien 

             
 File libreria-jaxb = this.getFile();
 if (libreria-jaxbl != null) {
        marshaller.marshal(libreria, libreria-jaxb);
    }
UnMarshall

Otra parte también fácil, tenemos varios inputs y utilizaremos el fichero por ahora para poder parsear. Partiendo de que tenemos ya un contexto, el cual reutilizaremos en esta parte.    

 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

 Libreria libreria = (Libreria) unmarshaller.unmarshal( libreria-jaxb);

Así de simple, recuperaremos o pasaremos de nuestro fichero xml a un objeto el cual tenemos ya mapeado

Instanciar consiste en crear un objeto de una clase. Por ejemplo, supongamos un plano para construir casas, una clase de nombre casa. Una casa concreta, en la que podemos vivir y construida a partir de ese plano, sería un objeto de la clase casa. Es posible crear múltiples objetos casa utilizando la definición de la clase, el plano comentado.

Para saber más

En el siguiente enlace puedes ver un ejemplo paso a paso en el que:

  • Se crea el fichero de esquema XML.
  • Se crea un proyecto nuevo con NetBeans.
  • Se añade un JAXB Binding utilizando el fichero XSD creado anteriormente.
  • Se añade un servicio web y se utiliza las clases Java JAXB Binding como un tipo de objeto.