JAXB es el estándar y el mejor enfoque para la conversión de objetos Java a XML.Hay varias implementaciones de código abierto disponibles:
Para obtener más información sobre JAXB echa un vistazo a mi blog:
ACTUALIZACIÓN:
¿Cuál es el mejor enfoque?
Esto depende en última instancia de lo que está tratando de hacer, voy a explicar a continuación:
Uso Caso # 1 - A partir de un esquema XML
En este caso de uso tiene un XML esquema y desea generar un modelo de Java. No muchas de las herramientas mencionadas en este hilo apoyan este caso de uso. XStream for example recommends XMLBeans for this.
Nominados:
- JAXB (todas las implementaciones) - Genera POJOs con anotaciones JAXB.
- XMLBeans - Genera clases propietarias que incluyen lógica de enlace XML.
Caso de uso # 2 - A partir de clases de Java (que se puede editar)
En este caso de uso que tiene mucho más la selección (sólo XMLBeans se elimina). Las ediciones normalmente implican la adición de anotaciones para controlar el mapeo.
Nominados:
Caso de uso # 3 - Inicio de Clases forma de Java (que no se puede editar)
En este caso de uso no hacer tener la fuente para modificar las clases de modelo. Esto requiere que los metadatos se suministren externamente con un archivo XML de por código.
Nominados:
- EclipseLink JAXB (moxy) - Ofrece una external binding file, y los metadatos se pueden aplicar mediante programación.
- metro JAXB - Puede aprovechar Annox o JAXBIntroductions
- Castor - Ofrece un archivo de unión externa
- JiBX - Ofrece un archivo de unión externa
- xstream - Los metadatos se pueden aplicar mediante programación
Caso de Uso # 4 - Meet-in-the-Middle (Esquemas y clases existentes)
En este caso de uso tiene clases que necesita para m ap a un esquema XML existente. EclipseLink moxy con su XPath based mapping es la única herramienta que soy consciente de que puede manejar este caso de uso
Nominados:
Caso de uso # 5 - XML Infoset Preservation:
En este caso de uso, necesita conservar el contenido no asignado: comentarios, instrucciones de procesamiento, etc.
Nominados:
- JAXB (todas las implementaciones) - tiene la característica Binder.
- XMLBeans: el modelo de objetos generado almacena todo el infoset XML.
Caso de uso # 6 - Compatibilidad con JPA
APP es el estándar de Java para la persistencia de Java. JPA tiene muchos conceptos: claves compuestas, relaciones bidireccionales, carga diferida, etc. que pueden ser difíciles de usar con una solución de enlace XML. Por ejemplo, cualquier herramienta XML que solo interactúa con objetos a través del campo generalmente tendrá problemas con las propiedades de carga diferida.
Nominados:
Caso de uso # 7 - Compatibilidad con los Servicios Web XML (JAX-WS)
JAXB es la capa de enlace predeterminada para JAX-WS.
Nominados:
- JAXB (aplicación depende del proveedor de JAX-WS)
Caso de uso # 8 - Compatibilidad con los Servicios Web REST (JAX-RS)
JAX-RS ofrece una alternativa ligera a JAX-WS basada en el protocolo HTTP.Consulte lo siguiente para obtener un example.
Nominados:
- JAXB (todas las implementaciones) - La capa de enlace por defecto y más fácil de usar con JAX-RS.
- Todo lo demás: puede aprovechar los conceptos de MessageBodyReader/Writer para usar otras herramientas XML.
Caso de uso # 9 - Compatibilidad con la primavera
primavera ha algunas de ellas construidas en apoyo para la integración con herramientas de unión XML, revisa el siguiente enlace para más información:
Nominados:
- JAXB (todas las implementaciones)
- Castor
- XMLBeans
- JiBX
otras cosas a considerar
- es la herramienta aún en desarrollo/compatibles? Por divertido que parezca, he visto personas que recomiendan herramientas que no han sido actualizadas en 5 años. Algunas de las herramientas mencionadas aquí no se han lanzado en 2 años.
My Pick for BEST approach? - JAXB
Mirando las categorías anteriores, JAXB puede no ser siempre el más adecuado para un caso de uso particular (pero siempre es una buena opción), pero es la única biblioteca que se puede usar para todo el uso casos. Esto significa que siempre puede hacer el trabajo. La alternativa es usar diferentes bibliotecas para diferentes tareas que le brindan múltiples bibliotecas para admitir.
Dirijo una implementación de JAXB EclipseLink MOXy, pero MOXy comenzó su vida como una biblioteca propietaria de enlace XML TopLink OXM. TopLink siempre ha entendido el beneficio de los estándares (es decir, EJB/JPA), e implementamos JAXB 1. Luego, nosotros (soy el represetativo) pasamos a ser miembros activos en JAXB 2 (JSR-222).
Utilicé XStream en el pasado. Fue relativamente poco doloroso y flexible, pero la flexibilidad proviene de la capacidad de ampliar/agregar diferentes visitantes en el código en sí contra algunos funky XML/XSD o DSL. –
Entonces, ¿cómo se compara 'XStream' con' JAXB'? – Rachel
Aquí está mi comparación de JAXB y XStream: http://bdoughan.blogspot.com/2010 /10/how-does-jaxb-compare-to-xstream.html como ya he admitido, conduzco una implementación JAXB pero creo que la comparación es justa. Hice una comparación similar entre JAXB y Simple XML, y Simple XML sitio lo enumera en su sección de artículos. –