viernes, 6 de septiembre de 2013

JAXB. Introducción. Crear un objeto a partir de un XML en Java

Como vimos en la entrada anterior (aquí), podemos crear un fichero con el contenido en XML de un objeto. Ahora vamos a realizar la operación contraria. Partimos de un fichero que vamos a leer con el contenido en XML y vamos a crearnos un objeto.

El fichero con el xml del que partimos es el mismo que en la entrada anterior y el siguiente:

Recordad que le habíamos llamado salida.xml. Ahora para leerlo y crearnos un objeto en Java con el contenido del fichero necesitamos el siguiente código:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
 

try {

 File file = new File("salida.xml");
 JAXBContext jaxbContext = JAXBContext.newInstance(Cliente.class);
 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
 

 Cliente clienteUnMarshal = (Cliente) jaxbUnmarshaller.unmarshal(file);
 System.out.println(clienteUnMarshal.getDireccion());
 System.out.println(clienteUnMarshal.getEmail1());

}
 

catch (JAXBException e) {
 e.printStackTrace();
}

Para "deserializar" el XML tenemos que usar un objeto del tipo Unmarshaller, aunque para ello primero tenemos que crearnos el JAXBContext con la clase que queremos emplear para deserializar. Una vez que tenemos el Unmarshaller correctamente inicializado tenemos que pasarle el fichero que estamos leyendo y obtendremos el objeto que estamos buscando. Hemos empleado entonces un par de System.out.println para mostrar que está funcionando correctamente.


A continuación pongo la lista completa de los artículos relacionados con JAXB para poder seguir los ejemplos:
Como crear un archivo XML a partir de un objeto en Java 
Como crear un objeto Java a partir de un archivo xml (este post)
Como crear un archivo XML a partir de una lista de objetos en Java
Como crear una lista de objetos Java a partir de un fichero XMl
Como solucionar el problema de relaciones cruzadas. El error com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML

No hay comentarios :

Publicar un comentario