Serialización con XML

Esta semana encontré algo que me pareció interesante.  Es la posibilidad de serializar objetos en Java utilizando un codificador XML.  Lo mas interesante se que para realizar esta codificación básica no es necesario de ningún OXM (Object XML Mapper), por el contrario, todo lo necesario viene incluído ya en el J2SE.

Para el ejemplo he creado una clase Worker (POJO) que será serializada y sólo incluye atributos y sus respectivos métodos set/get.  Por presentación también sobreescribí al método toString para presentar el contenido del objeto.

public class Worker
{
    private String username;
    private String password;
    private String name;
    private int age;
    private Date birthDate;

    // ...
}

Creo una instancia de esta clase y asigno valores a sus atributos.

GregorianCalendar birthDate = new GregorianCalendar(2005, 02, 14);  

Worker workerman = new Worker();

workerman.setAge(31);
workerman.setName("Pepito Pimentón");
workerman.setUsername("pepitouser");
workerman.setPassword("pepitopass");
workerman.setBirthDate(birthDate.getTime());

A continuación se procede a codificar el objeto y a generar el archivo XML con su contenido.

// Creates the stream to the file that will storage the serialized object
FileOutputStream outputFile = new FileOutputStream("workerman.xml");

// Relates the XML encoder with the output file stream
XMLEncoder xe = new XMLEncoder(outputFile);

// Serializes the selected object using an XML encoding
xe.writeObject(workerman);

// Closes the XML encoder
xe.close();

Terminado este proceso, deberá existir el archivo workerman.xml con la representación XML del objeto workerman creado anteriormente.  Esta representación de la información podría ser compartida inclusive con otros sistemas/lenguajes/plataformas diferentes a la actual, cosa que podría tener algunos inconvenientes con la serialización convencional de java.io.  El contenido XML (texto plano) probablemente ocupe mas espacio y esto lo haga menos eficiente que una representación binaria.

Por supuesto también es posible realizar el proceso contrario: basados en el archivo workerman.xml con el contenido codificado, obtener la información y crear nuevamente la representación del objeto Worker.

// Creates the stream from the file that storages the already serialized object
inputFile = new FileInputStream("workerman.xml");

// Relates the XML decoder with the input file stream
XMLDecoder xd = new XMLDecoder(inputFile);

// Reads the object from the stream and deserializes it using an XML decoding
clone = (Worker)xd.readObject();

// Closes the XML decoder
xd.close();

El objeto clone deberá contener la misma información que su versión original: workerman.

El contenido del archivo workerman.xml es bastante explícito para su procesamiento en otras plataformas.



 
  
   31
  
  
   
    1110776400000
   
  
  
   Pepito Pimentón
  
  
   pepitopass
  
  
   pepitouser
  
 

Enlace:   XML Serialization Demo (fuentes).

2 thoughts on “Serialización con XML”

  1. Lamentablemente .NET no serializa objetos que tengan referencias cruzadas o circulares, se debe agregar “Ingore” en tales casos, no me ha sido muy util dada la complejidad que tienen los objetos con los que trabajo, obligandome a repensar sobre el codigo que estoy utilizando.

Leave a Reply

Your email address will not be published. Required fields are marked *