domingo, 1 de diciembre de 2013

Java a XML (Marshalling)

En este artículo vamos a hablar un poco acerca de cómo convertir objetos Java a XML. Este proceso de conversión recibe el nombre de Marshalling, que en computación define el proceso de transformar la representación de un objeto en memoria a un formato de transmisión o almacenamiento. En este contexto Marshalling es convertir un objeto Java en su respectiva representción XML.

Bien, empecemos creando una clase en Java con una serie de atributos.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rolandopalermo.test;

/**
 *
 * @author Rolando
 */
@XmlRootElement
public class Factura {

    protected String razonSocial;
    protected String nombreComercial;
    protected String ruc;
    protected String claveAcceso;
    protected String codigoDoc;

    public String getClaveAcceso() {
        return claveAcceso;
    }

    public void setClaveAcceso(String claveAcceso) {
        this.claveAcceso = claveAcceso;
    }

    public String getCodigoDoc() {
        return codigoDoc;
    }

    public void setCodigoDoc(String codigoDoc) {
        this.codigoDoc = codigoDoc;
    }

    public String getNombreComercial() {
        return nombreComercial;
    }

    public void setNombreComercial(String nombreComercial) {
        this.nombreComercial = nombreComercial;
    }

    public String getRazonSocial() {
        return razonSocial;
    }

    public void setRazonSocial(String razonSocial) {
        this.razonSocial = razonSocial;
    }

    public String getRuc() {
        return ruc;
    }

    public void setRuc(String ruc) {
        this.ruc = ruc;
    }
}
A partir de esa clase nosotros podemos crear su representación XML a través del siguiente código:
public static void main(String[] args) {
    Factura f = new Factura();
    f.setClaveAcceso("123456789");
    f.setCodigoDoc("0149");
    f.setNombreComercial("Rolando Palermo Consulting");
    f.setRuc("10456095424");
    OutputStreamWriter out = null;
    try {
        JAXBContext context = JAXBContext.newInstance(
                new Class[]{Factura.class});
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty("jaxb.encoding", "UTF-8");
        marshaller.setProperty("jaxb.formatted.output",
                Boolean.valueOf(true));
        out = new OutputStreamWriter(new FileOutputStream(
                "D:\test01.xml"), "UTF-8");
        marshaller.marshal(f, out);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
El resultado de la ejecución de este método main dará el siguiente resultado:


   123456789
   0149
   Rolando Palermo Consulting

2 comentarios:

  1. ammm no se si me equivoco pero hacer eso es sencillo aplicando el uso de reflection capturamos los nombres de los campos y su valor y convertir los campos en etiquetas, el valor, y el nombre del mismo campo como cerradura de etiqueta...

    ResponderEliminar
    Respuestas
    1. Saludos Roliver
      Claro, lo que dices es correcto. Y justamente las librerías nativas de java que se utilizan para el marshalling, y que muestro en este artículo, utilizan el API Reflection. Pronto publicaré un artículo muy interesante en donde explicaré un poco más sobre las anotaciones que soporta JAXB.

      Eliminar