javaee impl java jaxb compatibility backwards-compatibility

java - impl - Objeto a XML, compatibilidad hacia atrás y hacia adelante



jaxb java download (2)

Estoy trabajando en una aplicación donde necesitamos guardar objetos en formato XML y cargarlos más tarde una vez que sea necesario. Para esto, he usado JAXB para ordenar y deshacer XMLs a clases de Java.

Mi problema es que tengo que cambiar los modelos de Java en algún momento (agregando, renombrando o eliminando atributos), como resultado, tendré XML guardados incompatibles que no pueden vincularse al nuevo formulario de clase.

Para resolver esto, cada vez que tengo que hacer un cambio tomo una copia de todas las clases en un nuevo paquete (nombrado después de su versión) y aplico los cambios solicitados. Y cuando guardo un XML, guardo su versión para que pueda decidir qué paquete debe ser escaneado por JAXB para deshacer este XML.

Mi pregunta es, ¿hay alguna otra forma de implementar la compatibilidad hacia atrás y hacia delante con JAXB? Si no, ¿hay alguna otra tecnología que pueda soportar esto?


Si solo agrega nuevos atributos, puede funcionar: se llama "pato escribiendo". Tu objeto es libre, ignora cosas extra que no tiene.

Solo debe preocuparse por el control de versiones si modifica o elimina los atributos que se requieren. Desafortunadamente, este es el caso de los esquemas de bases de datos, la serialización de Java y cualquier otra tecnología de persistencia. XML no es magia; no es inmune


Nota: soy miembro del grupo de expertos JAXB 2 ( JSR-222 ) y líder de EclipseLink JAXB (MOXy) .

Para este caso de uso, prefiero usar un solo modelo cuando sea posible. Esto requerirá que tenga múltiples asignaciones para su modelo de objetos. La especificación JAXB no proporciona un medio para hacer esto, pero se puede hacer utilizando la extensión de metadatos externalizados de MOXy:

Los metadatos se pueden usar para complementar las anotaciones o para reemplazarlos. Por lo tanto, recomendaría mapear su esquema base con anotaciones y usar el formato XML para modificar los metadatos por versión del esquema.

Mi problema es que tengo que cambiar los modelos de Java en algún momento (agregando, renombrando o eliminando atributos), como resultado, tendré XML guardados incompatables que no se pueden vincular al nuevo formulario de clase.

Eliminar un atributo de Java (campo / propiedad) dificulta las cosas, ya que no habrá nada para que el antiguo XML se asigne. En su lugar, puede dejarlos en su modelo y marcarlos como "@XmlTransient" en los archivos de metadatos XML.