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
????