JAXB, Java Architecture for XML Binding es un es un estándar de java para definir objetos que provienen o van hacer XML. Define propiedades para leer y escribir XML.
Usando JAXB permite que sea muy sencillo manejar XML desde java.
Anotaciones principales.
- @XmlRootElement(namespace = "namespace"): Define la raíz del XML.
- @XmlType(propOrder = { "field2", "field1",.. }): Permite definir en que orden se van escribir los elementos dentro del XML.
- @XmlElement(name = "neuName"): Define el elemento de XML que se va usar.
Empecemos con el Ejemplo:
Clase Libro:
package javajaxb;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
//Esto significa que la clases "Libreria.java" es el elemento raiz
@XmlRootElement(namespace = "prueba.xml")
public class Libreria {
//Wrapper
@XmlElementWrapper(name = "ListaLibro")
@XmlElement(name = "Libro")
private ArrayList<Libro> ListaLibro;
private String nombre;
private String lugar;
public ArrayList<Libro> getListaLibro() {
return ListaLibro;
}
public void setListaLibro(ArrayList<Libro> ListaLibro) {
this.ListaLibro = ListaLibro;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setLugar(String lugar) {
this.lugar = lugar;
}
public String getNombre() {
return nombre;
}
public String getLugar() {
return lugar;
}
}
Luego creamos una clase librería:
package javajaxb;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name = "LIbro")
//Si quieres definir el orden en que seran escritas las etiquetas
// Opcional
@XmlType(propOrder = {"autor", "nombre", "editorial", "isbn"})
public class Libro {
private String nombre;
private String autor;
private String editorial;
private String isbn;
public String getNombre() {
return nombre;
}
public String getAutor() {
return autor;
}
public String getEditorial() {
return editorial;
}
public String getIsbn() {
return isbn;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setAutor(String autor) {
this.autor = autor;
}
public void setEditorial(String editorial) {
this.editorial = editorial;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
}
Ahora usaremos la clase JAXB para crear, escribir y leer un archivo XML:
package javajaxb;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JavaJAXB {
private static final String LIBRERIA_XML = "./libreria-jaxb.xml";
public static void main(String[] args) throws JAXBException, IOException {
//Lista de LIbros
ArrayList<Libro> libroLista = new ArrayList<Libro>();
// Creamos varios libros
Libro libro1 = new Libro();
libro1.setIsbn("978-0060554736");
libro1.setNombre("The Game");
libro1.setAutor("Neil Strauss");
libro1.setEditorial("Harpercollins");
libroLista.add(libro1);
Libro libro2 = new Libro();
libro2.setIsbn("978-3832180577");
libro2.setNombre("Feuchtgebiete");
libro2.setAutor("Charlotte Roche");
libro2.setEditorial("Dumont Buchverlag");
libroLista.add(libro2);
// Se crea La libreria y se le asigna la lista de libros
Libreria libreria = new Libreria();
libreria.setNombre("LIbreria sin limite");
libreria.setLugar("Barrio Obrero");
libreria.setListaLibro(libroLista);
// Creamos un contexto de la clase JAXB y lo intanciamos
JAXBContext context = JAXBContext.newInstance(Libreria.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// Lo creamos con system out
m.marshal(libreria, System.out);
// Escribimos en el archivo
m.marshal(libreria, new File(LIBRERIA_XML));
// Obtenemos las variables obtenidas del XML creado anteriormente
System.out.println();
System.out.println("Salida del XML: ");
Unmarshaller um = context.createUnmarshaller();
Libreria libreria2 = (Libreria) um.unmarshal(new FileReader(LIBRERIA_XML));
ArrayList<Libro> lista = libreria2.getListaLibro();
for (Libro libro : lista) {
System.out.println("Libro: " + libro.getNombre() + " de "
+ libro.getAutor());
}
}
}
Con esto ya podemos manejar cualquier XML a nuestra voluntad, espero que les sea de utilidad.
Codigo Fuente



hice tu ejercicio y se repite al final:
ResponderEliminarNeil Strauss
The Game
Harpercollins
978-0060554736
Charlotte Roche
Feuchtgebiete
Dumont Buchverlag
978-3832180577
Neil Strauss
The Game
Harpercollins
978-0060554736
Charlotte Roche
Feuchtgebiete
Dumont Buchverlag
978-3832180577
Barrio Obrero
Libreria FORJA S.A.C.
por que se repite
Charlotte Roche
Feuchtgebiete
Dumont Buchverlag
978-3832180577
????