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:
- 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.
- 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.
- 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:
- Instanciando las clases generadas.
- Invocando al método
unmarshall
de una clase generada y pasarlo en el documento. El métodounmarshall
toma un documento XML válido y construye una representación de árbol de objetos.
- Acceder al árbol de contenido usando nuestra aplicación: ahora podemos acceder al árbol de contenido y modificar sus datos.
- 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.
- 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.
- Deben compilarse todas las clases generadas, los archivos fuente y el código de la aplicación .
- Aplicar Marshall a los objetos de las clases mapeadas para crear XML
- 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);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(libreria, System.out);
o bien
File libreria-jaxb = this.getFile();
if (libreria-jaxbl != null) {
marshaller.marshal(libreria, libreria-jaxb);
}
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.