Automatizar generación de XML con JAXB

Hace poco en mi trabajo tenía que realizar ciertos artefactos que se empaquetan en un archivo jar, el cual incluye un XML, despues de hacer los primeros 2 o 3 note que estaba cayendo en la mala practica de copiar y pegar la estructura del XML de mi viejo artefacto y en ocasiones por rapidez no cambiaba el nombre, tipo de dato o argumento de alguna etiqueta y cuando desplegaba el artefacto pues fallaba, un compañero de trabajo me mencionó que definiera el xsd del archivo, y luego creará los objetos mapeados con xjc (imagino que significa xml java compiler, no estoy muy seguro de ello), y despues diseñara un standalone que preguntara por los valores de los atributos que variaran, y pues seguí las indicaciones realizando los siguientes pasos:

1.- Identifique los elementos que varian que fueron:

Valor del tag autor, email, creationDate, description e implementation.
Valor de los atributos type y length del tag Attribute.
Valor del atributo name del tag Plugin.

 

2.- Definí el schema de acuerdo a la estructura (Este paso es opcional algunas veces ya se tiene el esquema .xsd):

 

3.- Generé los objetos del archivo .xsd con el comando xjc:

$ xjc -p domain.objects Plugin.xsd

En donde la opción p nos sirvió para definir el paquete y Plugin.xsd es nuestro archivo que define el esquema del XML, si todo salió bien y sin errores esta herramienta (xjc) nos genero las clases y anotaciones adecuadas de JAXB para el mapeo de los objetos que se encuentran en el paquete domain.objects:

Existe un paso intermedio aqui, si quieres generar valores por default, JAXB no es muy inteligente (link) para ello y se deben de hardcodear en mi caso modifique algunos valores de atributos y tags simplemente asignandoles el valor directamente.

4.- Generar el standalone para crear el XML con JAXB:

 

Y si todo salio bien pues te preguntará por los valores de los tags y atributos que son variables y te generará el archivo y la salida a pantalla adecuados:

Introduce plugin name:
MyPlug
Introduce autor:
Hiroshige Cid
Introduce email:
algo@gmail.com
Introduce package where is the implementation class:
com.package
Tipo de plugin:
1 Lib Plugin
2 Auth Plugin
2
Which prefix do you need for namespace´s variable
generic_
How many attributes do you need ?
2
We need the data for attribute #1
Introduce type (i.e. string):
string
Introduce length (i.e. 100):
50
Introduce value (i.e. idUser):
iduser
We need the data for attribute #2
Introduce type (i.e. xs:string):
string
Introduce length (i.e. 100):
50
Introduce value (i.e. idUser):
password

 

Si alguien tiene algo por mejorar o darme una idea mejor de como generar mi xml se los agradecería, de igual forma si le sirve a alguien más pues que bien.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

JAXB & eclipse

 

También puedes generar las clases con eclipse: