Java XML Serialization vs .NET XML Serialization

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» xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>
<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

Un comentario sobre “Java XML Serialization vs .NET XML Serialization

Replica a Java - Serializar a XML con XStream « Blogging googling Cancelar la respuesta