Java XML Serialization vs .NET XML Serialization

enero 29, 2009

Estoy haciendo un programa que genera reportes a partir de un archivo XML. La idea es que cuando se quiera un nuevo reporte o modificar alguno existente solo se tenga que cambiar la definicion del reporte en un archivo XML y no tener que modificar el codigo. Las clases que utilizo son las siguientes:

Esto lo hice en C# de forma sencilla mediante el uso de la clase System.Xml.Serialization.XmlSerializer y sus métodos Serialize y Deserialize. Esta clase me generó un XML como el siguiente:

<?xml version=”1.0″ encoding=”utf-8″?>
<Reporte xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”&gt;
<Nombre>Reporte de Prueba</Nombre>
<Consultas>
<Consulta>
<Nombre>Consulta 0</Nombre>
<SQL>SELECT * FROM CONSULTA_0</SQL>
</Consulta>
<Consulta>
<Nombre>Consulta 1</Nombre>
<SQL>SELECT * FROM CONSULTA_1</SQL>
</Consulta>
</Consultas>
</Reporte>

a mi parecer esta bastante limpio y se entiende lo suficiente para que una persona lo pueda modificar en cualquier editor de texto.
Luego quise hacer lo mismo en java y encontre que lo podia hacer mediante la clase java.beans.XMLEncoder y java.beans.XMLDecoder, y asi fue. El problema es que me genera XML como el siguiente:

<?xml version=”1.0″ encoding=”UTF-8″?>
<java version=”1.5.0_06″ class=”java.beans.XMLDecoder”>
<object class=”tsj.estadisticas.Reporte”>
<void property=”consultas”>
<void method=”add”>
<object class=”tsj.estadisticas.Consulta”>
<void property=”nombre”>
<string>Consulta 0</string>
</void>
<void property=”sql”>
<string>SELECT * FROM CONSULTA_0</string>
</void>
</object>
</void>
<void method=”add”>
<object class=”tsj.estadisticas.Consulta”>
<void property=”nombre”>
<string>Consulta 1</string>
</void>
<void property=”sql”>
<string>SELECT * FROM CONSULTA_1</string>
</void>
</object>
</void>
<void method=”add”>
<object class=”tsj.estadisticas.Consulta”>
<void property=”nombre”>
<string>Consulta 2</string>
</void>
<void property=”sql”>
<string>SELECT * FROM CONSULTA_2</string>
</void>
</object>
</void>
</void>
<void property=”nombre”>
<string>Nuevo Reporte</string>
</void>
</object>
</java>

Y pues no me gustó para nada, así que busqué otras alternativas.
Buscando en google encontré las 3 opciones que me parecieron mejores: JAXB, Simple y JiBX. Escogí Simple por simple… 😀 jeje … que es lo mismo a fácil de aprender, fácil de usar y eficiente, además de que en escencia es similar a la serializacion de C#.
Simple me produjo el siguiente XML:

<reporte>
<nombre>Nuevo Reporte</nombre>
<consultas class=”java.util.ArrayList”>
<consulta>
<nombre>Consulta 0</nombre>
<sql>SELECT * FROM CONSULTA_0</sql>
</consulta>
<consulta>
<nombre>Consulta 1</nombre>
<sql>SELECT * FROM CONSULTA_1</sql>
</consulta>
<consulta>
<nombre>Consulta 2</nombre>
<sql>SELECT * FROM CONSULTA_2</sql>
</consulta>
</consultas>
</reporte>

que es el mismo que en C# excepto por algunas líneas del encabezado.
El único problema que tuve para poder utilizar Simple fue por no haber leído el siguiente texto en la sección de descarga:

For Java 6 the framework has no external
dependancies and is completely self contained. For Java 5 two external JAR files are required,
the StAX API and the StAX implementation, both are provided with the download.

Como la version de java que utilizo es la 1.5, necesitaba tambien agregar las librerias indicadas. Estas librerias se encuentran en la carpeta “lib” donde hayas descomprimido Simple.
Si no las agregas te genera el siguiente error:

Exception in thread “main” java.lang.NoClassDefFoundError: javax/xml/stream/XMLInputFactory

Anuncios

Una respuesta to “Java XML Serialization vs .NET XML Serialization”


  1. […] – Serializar a XML con XStream Hace poco comparaba la serializacion en .NET con la de Java. En ese entonces utilice una libreria llamada Simple. Ahora me he encontrado con otra libreria […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: