ws3 what versiones ultima school creador and java xml serialization

what - ¿Conversiones de Java a XML?



xml versiones (9)

¿Cuáles son los diferentes enfoques para convertir Java Objects a XML , sé que una opción es JAXB pero me gustaría saber cuáles son los otros approaches/tools disponibles para la misma?

Nota: No tengo más requisitos y, por lo tanto, no puedo agregar más elementos a la pregunta, pero en este momento sería genial si pudiera tener una idea de los diferentes enfoques disponibles para convertir Java to XML .

Actualización: diferentes enfoques sugeridos son:

  1. javax.xml.bind.Marshaller y javax.xml.bind.Unmarshaller
  2. XStream
  3. XMLBean
  4. JAXB
  5. Castor
  6. JIBX
  7. Apache Digester

Ahora, entre todos los enfoques sugeridos, ¿cuál es el MEJOR enfoque para convertir Java Objects to XML y XML to Java Objects ?


Simple XML Serialization (simpleframework.org)

Otro enfoque es Simple, es mucho más fácil de usar que JAXB, JiBX u otras herramientas similares. Simplemente anota la clase y puedes serializar cualquier POJO a XML. Además, es probablemente el único marco que actualmente funciona en todas las plataformas Java conocidas, incluyendo Android, Google App Engine, cualquier JDK 1.5+. Para obtener más información, puede consultar el Tutorial


Algunas alternativas incluyen:

Sin embargo, una ventaja significativa de ir con JAXB es que se envía con la distribución de Java.


Castor permite la generación de clases Java (implementaciones decentes) directamente desde el esquema XSD (caso de uso n. ° 1 arriba). Solo asegúrate, en Android 2.1, de no usar el SAXParser predeterminado de Android. Obtendrás errores de espacio de nombres. Para ello, defina el analizador como, por ejemplo, Xerces (y agregue los JARS necesarios) en core.properties. En Android 2.2, puede estar bien. Tenga en cuenta que si crea un xmlcontext para el unmarsheler con xerces, aún no funcionará, ya que el mapeo mismo se analizará con el SAX de Android. Debe hacerse en el núcleo (archivo de propiedades de nivel superior) para que incluso la asignación sea analizada por xerces. finalmente - el rendimiento es tan lento como se puede esperar ... :( Buena suerte SM


JAXB es el estándar y el mejor enfoque para convertir objetos Java en XML. Hay varias implementaciones de código abierto disponibles:

Para obtener más información sobre JAXB echa un vistazo a mi blog:

ACTUALIZAR:

¿Cuál es el mejor enfoque?

Esto en última instancia depende de lo que estás tratando de hacer, lo explicaré a continuación:

Caso de uso n. ° 1: comenzando desde un esquema XML

En este caso de uso tiene un esquema XML y desea generar un modelo Java. No muchas de las herramientas mencionadas en este hilo apoyan este caso de uso. XStream, por ejemplo, recomienda XMLBeans para esto .

Nominados:

  • JAXB (todas las implementaciones): genera POJO con anotaciones JAXB.
  • XMLBeans: genera clases propietarias que incluyen lógica de enlace XML.

Caso de uso n. ° 2: comenzando desde las clases de Java (que puede editar)

En este caso de uso tiene mucha más selección (solo se elimina XMLBeans). Las ediciones normalmente implican la adición de anotaciones para controlar el mapeo.

Nominados:

  • Todos excepto XMLBeans

Caso de uso n. ° 3: inicio de clases de Java (que no puede editar)

En este caso de uso, no tiene la fuente para modificar las clases modelo. Esto requiere que los metadatos se suministren externamente con un archivo XML de por código.

Nominados:

  • EclipseLink JAXB (MOXy): ofrece un archivo de enlace externo y los metadatos se pueden aplicar mediante programación.
  • Metro JAXB: puede aprovechar Annox o JAXBIntroducciones
  • Castor - Ofrece un archivo de enlace externo
  • JiBX: ofrece un archivo de enlace externo
  • XStream: los metadatos se pueden aplicar mediante programación

Caso de uso n.º 4: Meet-in-the-Middle (clases y esquema existentes)

En este caso de uso, tiene clases existentes que debe correlacionar con un esquema XML existente. EclipseLink MOXy con su bdoughan.blogspot.com/2010/09/… es la única herramienta que conozco que puede manejar este caso de uso

Nominados:

  • EclipseLink JAXB (MOXy)

Caso de uso n. ° 5 - Preservación del conjunto de datos XML:

En este caso de uso, debe conservar el contenido no asignado: comentarios, instrucciones de procesamiento, etc.

Nominados:

  • JAXB (todas las implementaciones): tiene la función Binder .
  • XMLBeans: el modelo de objetos generado almacena todo el infoset XML.

Caso de uso n. ° 6 - Compatibilidad con JPA

JPA 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 n.º 7: compatibilidad con servicios web XML (JAX-WS)

JAXB es la capa de enlace predeterminada para JAX-WS.

Nominados:

  • JAXB (la implementación depende del proveedor JAX-WS)

Caso de uso n. ° 8 - Compatibilidad con servicios web RESTful (JAX-RS)

JAX-RS ofrece una alternativa ligera a JAX-WS basada en el protocolo HTTP. Mira lo siguiente para ver un example .

Nominados:

  • JAXB (todas las implementaciones): la capa de enlace predeterminada y la 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 n. ° 9 - Compatibilidad con Spring

Spring cuenta con un soporte incorporado para la integración con herramientas de enlace XML; consulte el siguiente enlace para obtener más información:

Nominados:

  • JAXB (todas las implementaciones)
  • Castor
  • XMLBeans
  • JiBX

Otras cosas para considerar

  • ¿La herramienta aún se está desarrollando / apoyando? 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.

¿Mi elección para el MEJOR enfoque? - JAXB

Mirando las categorías anteriores, JAXB puede no ser siempre el más adecuado para un caso de uso en particular (pero siempre es una buena opción), pero es la única biblioteca que se puede usar para todos los casos de uso. 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), y hemos implementado JAXB 1. Entonces nosotros (Yo soy el represetativo) me volví miembros activos en JAXB 2 (JSR-222).


Sé que esto no es lo que preguntaste, pero ¿has considerado JSON en lugar de XML? Actualmente estoy trabajando en un proyecto que hace un uso intensivo de JSON (con la biblioteca de Jackson ) y estoy muy contento con él. Jackson funciona de manera similar a JAXB, incluso funciona con anotaciones JAXB, en caso de que quiera usar ambas.

XMLBean también vale la pena mirar.


Siempre puede hacerlo usted mismo con las interfaces javax.xml.bind.Marshaller y javax.xml.bind.Unmarshaller .

Esto no es tan loco como suena. No es tan difícil de hacer, y tendrás control total y conocimiento de lo que se hace.

Estoy dispuesto a reconocer que muchas personas prefieren un enfoque automatizado. Mi oferta no será popular.

He usado XStream en el pasado y me gustó, pero cuando lo usé no tuve que preocuparme por los espacios de nombres XML. Me dijeron que XStream no los trata bien.


También hay:

  • java.beans.XMLEncoder / -Decoder
  • javax.xml.stream.XMLStreamWriter

Pero recomiendo usar JAXB si no tienes una buena razón para hacer lo contrario.