;

Full width home advertisement

Tutoriales

Programación

Post Page Advertisement [Top]




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

1 comentario:

  1. hice tu ejercicio y se repite al final:



    Neil 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



    ????

    ResponderEliminar

Bottom Ad [Post Page]

| Designed by Colorlib