Java JAXB o Java XML API Binding nos permite trabajar con XML y JSON de una forma cómoda usando Java. Vamos a ver una introducción a este estándar y sus anotaciones. Para ello nos apoyaremos en la clase Libro y las anotaciones de JAXB:
package com.arquitecturajava; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Libro { private String titulo; private int paginas; public String getTitulo() { return titulo; } public Libro(String titulo, int paginas) { super(); this.titulo = titulo; this.paginas = paginas; } public Libro() { super(); } public void setTitulo(String titulo) { this.titulo = titulo; } @XmlElement(name="numeroPaginas") public int getPaginas() { return paginas; } public void setPaginas(int paginas) { this.paginas = paginas; } }
Hemos añadido dos anotaciones @XmlRootElement que especifica la clase raiz que vamos a convertir a XML . Por otro lado @XmlElement permite cambiar el nombre de los elementos cuando el fichero XML se construya. Es momento de generar el fichero XML .
package com.arquitecturajava; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.PropertyException; public class Principal { public static void main(String[] args) { try { Libro libro= new Libro("Odisea 2001",400); JAXBContext contexto = JAXBContext.newInstance( libro.getClass() ); Marshaller marshaller = contexto.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal(libro, System.out); } catch (PropertyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Disponemos de dos objetos el contexto y el marshaller . El contexto se encarga de definir los objetos de negocio que vamos a utilizar y el marshaller en que forma vamos a generar la estructura.
Si ejecutamos el código veremos un XML en la consola:
La misma operación se puede realizar al contrario , leer un fichero XML y rellenar un objeto Java.
package com.arquitecturajava; import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; public class Principal2 { public static void main(String[] args) { try { JAXBContext context = JAXBContext.newInstance( Libro.class ); Unmarshaller unmarshaller = context.createUnmarshaller(); Libro libro = (Libro)unmarshaller.unmarshal( new File("src/Libro.xml") ); System.out.println(libro.getTitulo()); System.out.println(libro.getPaginas()); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Como vemos trabajar con Java JAXB es sencillo y podremos generar ficheros XML o leerlos de forma inmediata.
Otros artículos relacionados:
public class ManejadorJaxb {
public static void main(String[] args) throws JAXBException {
// TODO Auto-generated method stub
File file = new File(“text.xml”);
JAXBContext contexto = JAXBContext.newInstance(Html.class);
Unmarshaller u = contexto.createUnmarshaller();
Html html = (Html) u.unmarshal(file);
System.out.println(html.getHead().getValue());
System.out.println(html.getBody().getValue());
}
}