Mapeo de Objetos a XML con JAXB: Guía Paso a Paso

JAXB (Java Architecture for XML Binding) es una API de Java que permite convertir (mapear) objetos Java en documentos XML y viceversa, de manera sencilla y eficiente. Utiliza anotaciones para definir cómo se deben representar las clases y sus propiedades en un documento XML.

En este artículo, aprenderás a usar JAXB para:

  1. Convertir objetos Java a XML (marshalling).
  2. Leer un documento XML y convertirlo en objetos Java (unmarshalling).

¿Qué es JAXB?

JAXB permite trabajar con documentos XML utilizando clases Java, lo que simplifica el manejo de datos estructurados. A través de anotaciones, puedes definir la estructura del XML directamente en tus clases.


Configuración de JAXB

Para usar JAXB, necesitas incluir las dependencias adecuadas. Si utilizas Maven, añade lo siguiente a tu archivo pom.xml:

<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.2</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.2</version>
</dependency>

Paso 1: Definir la Clase Java (JavaBean)

Usa anotaciones de JAXB para definir cómo mapear la clase y sus propiedades al XML.

Ejemplo: Clase Libro

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "libro")
public class Libro {
    private String titulo;
    private String autor;
    private double precio;

    // Constructor sin argumentos (requerido por JAXB)
    public Libro() {}

    public Libro(String titulo, String autor, double precio) {
        this.titulo = titulo;
        this.autor = autor;
        this.precio = precio;
    }

    @XmlElement(name = "titulo")
    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    @XmlElement(name = "autor")
    public String getAutor() {
        return autor;
    }

    public void setAutor(String autor) {
        this.autor = autor;
    }

    @XmlElement(name = "precio")
    public double getPrecio() {
        return precio;
    }

    public void setPrecio(double precio) {
        this.precio = precio;
    }
}

Explicación de las Anotaciones:

  • @XmlRootElement: Define el elemento raíz del XML.
  • @XmlElement: Especifica el nombre de las etiquetas para las propiedades.

Paso 2: Convertir un Objeto Java a XML (Marshalling)

El proceso de marshalling convierte un objeto Java en un documento XML.

Código:

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import java.io.File;

public class MarshallingExample {
    public static void main(String[] args) {
        try {
            // Crear un objeto Libro
            Libro libro = new Libro("Java Básico", "Juan Pérez", 19.99);

            // Crear el contexto JAXB
            JAXBContext context = JAXBContext.newInstance(Libro.class);

            // Crear el Marshaller
            Marshaller marshaller = context.createMarshaller();

            // Formatear el XML para que sea legible
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            // Convertir el objeto a XML y guardarlo en un archivo
            marshaller.marshal(libro, new File("libro.xml"));

            // También se puede imprimir directamente en la consola
            marshaller.marshal(libro, System.out);

            System.out.println("XML generado con éxito.");
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Salida (libro.xml):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<libro>
    <titulo>Java Básico</titulo>
    <autor>Juan Pérez</autor>
    <precio>19.99</precio>
</libro>

Paso 3: Convertir un XML a Objeto Java (Unmarshalling)

El proceso de unmarshalling convierte un documento XML en un objeto Java.

Código:

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
import java.io.File;

public class UnmarshallingExample {
    public static void main(String[] args) {
        try {
            // Crear el contexto JAXB
            JAXBContext context = JAXBContext.newInstance(Libro.class);

            // Crear el Unmarshaller
            Unmarshaller unmarshaller = context.createUnmarshaller();

            // Leer el archivo XML y convertirlo a un objeto
            Libro libro = (Libro) unmarshaller.unmarshal(new File("libro.xml"));

            // Mostrar los datos del objeto
            System.out.println("Título: " + libro.getTitulo());
            System.out.println("Autor: " + libro.getAutor());
            System.out.println("Precio: " + libro.getPrecio());
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Salida:

Título: Java Básico
Autor: Juan Pérez
Precio: 19.99

Paso 4: Trabajar con Listas de Objetos

Si necesitas mapear una colección de objetos, define una clase contenedora.

Clase Contenedora: ListaLibros

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement(name = "libros")
public class ListaLibros {
    private List<Libro> libros;

    public ListaLibros() {}

    public ListaLibros(List<Libro> libros) {
        this.libros = libros;
    }

    @XmlElement(name = "libro")
    public List<Libro> getLibros() {
        return libros;
    }

    public void setLibros(List<Libro> libros) {
        this.libros = libros;
    }
}

Marshalling y Unmarshalling de una Lista

  • Marshalling:
    Crea una lista de objetos Libro, asígnala a una instancia de ListaLibros y mapea todo a XML.
  • Unmarshalling:
    Mapea el XML de la colección a un objeto ListaLibros.

Consejos para Trabajar con JAXB

  1. Constructor sin Argumentos:
    Las clases deben tener un constructor público sin argumentos.
  2. Compatibilidad con Listas:
    Usa listas genéricas (List<T>) para mapear colecciones de objetos.
  3. Formateo del XML:
    Usa marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true) para generar XML legible.
  4. Control de Nombres:
    Personaliza los nombres de las etiquetas con @XmlElement y @XmlRootElement.
  5. Excluir Propiedades:
    Usa @XmlTransient para excluir propiedades del XML.

Conclusión

JAXB simplifica enormemente el mapeo entre objetos Java y documentos XML, permitiendo integrar aplicaciones con datos estructurados de manera eficiente. Con la guía y los ejemplos proporcionados, podrás empezar a usar JAXB en tus proyectos para manejar XML de manera profesional. ¡Ponte manos a la obra!

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad