Pregunta

¿Qué estás usando para enlazar XML a Java? JAXB, Castor y XMLBeans son algunas de las opciones disponibles. Las comparaciones que he visto tienen tres o cuatro años. Estoy abierto a otras sugerencias. Es de particular interés el rendimiento y la facilidad de uso de la clasificación y la demolición.

Aclaración: me gustaría ver no solo el marco que usa, sino su razonamiento para usar uno sobre los otros.

¿Fue útil?

Solución

JiBX . Anteriormente usé Castor XML , pero JiBX demostró ser significativamente mejor, especialmente en términos de rendimiento (un puerto directo de algún código de aplicación de Castor XML a JiBX lo hizo 9 veces más rápido). También encontré que el formato de mapeo para JiBX es más elegante que el de Castor.

JiBX logra su rendimiento utilizando la manipulación de código de bytes posterior a la compilación en lugar del enfoque de reflexión adoptado por Castor. Esto tiene la ventaja de que pone menos exigencias en la forma en que escribe sus clases asignadas. No hay necesidad de que los captadores, los creadores y los constructores sin argumentos solo satisfagan las herramientas. La mayoría de las veces, puede escribir la clase sin considerar los problemas de asignación y luego asignarla sin modificaciones.

Otros consejos

Si desea tomar una decisión informada, debe tener claro por qué está traduciendo entre objetos XML y Java. La razón es que las diferentes tecnologías en este espacio intentan resolver diferentes problemas. Las diferentes herramientas se dividen en dos categorías:

  1. enlace de datos XML: se refiere al proceso de representar la información en un documento XML como un objeto en la memoria de la computadora. Normalmente, esto significa definir un XSD y generar un código fuente Java equivalente. La interoperabilidad entre diferentes idiomas es la máxima prioridad (de ahí el uso de XSD), generalmente para la implementación de servicios web basados ??en SOAP.
  2. Serialización XML: se refiere a escribir un gráfico de objetos en memoria en un flujo, para que pueda reconstituirse en algún lugar o en otro momento. Escribes las clases de java a mano; La representación xml es de importancia secundaria. Además, la necesidad de rendimiento suele ser mayor y la necesidad de interoperación con otros idiomas, como .net, a menudo es menor.

Para la serialización xml, Xstream es difícil de superar. JAXB es el estándar para el enlace XML.

En cualquier caso, si está utilizando J2EE, deberá prestar mucha atención a las clases recuperadas de JPA ya que los proxies de clase y los tipos de recopilación específicos de persistencia pueden confundir las herramientas de enlace / serialización.

Si tiene un XSD para el XML y no necesita enlazar los datos a un conjunto de clases existente, entonces me gusta mucho XMLBeans . Básicamente, funciona así:

  • Compilar XSD
  • Utilice las clases Java generadas para leer / escribir documentos que se ajusten a este esquema

Unir un documento XML a las clases generadas es tan simple como:

EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile); 

Usamos xstream . Marshalling / Unmarshalling es trivial. Consulte su tutorial para ver ejemplos.

Jibx es lo que se usa aquí. Es muy rápido, pero los enlaces pueden ser un poco difíciles. Sin embargo, es especialmente útil si tiene esquemas XML que describen sus objetos de dominio, ya que realmente se asigna bien a XSD (incluso hay una herramienta beta XSD2Jibx que puede tomar XSD y crear clases de dominios de código auxiliar y asignaciones, que luego puede tomar y convencer para ajuste su modelo de dominio existente).

Manipula el código de bytes, por lo que debe ejecutarse después de la compilación inicial de los archivos .class de Java. Puede usar el complemento de Maven para él, o simplemente usarlo directamente (el complemento de Eclipse no parece funcionar para mí).

He usado Jaxb con éxito variable. En el momento (hace un par de años), la documentación general era mediocre y la documentación de uso básico (incluyendo dónde descargar implementaciones) era difícil de encontrar o variaba.

El analizador que escribió las clases de Java fue bastante bueno con poca discrepancia con respecto al XSD original (aunque creo que tenía problemas para soportar elementos XML abstractos).

No lo he usado desde entonces, pero tengo un próximo proyecto que requerirá un marco de este tipo y me interesará saber cómo otras personas se reúnen con lo anterior.

Utilicé castor hace 7 años, funcionó bastante bien. DTDs utilizados. No hay muchas opciones en ese momento.

En proyectos actuales, he usado
1) JAXB: basado en estándares, implementación de referencia disponible, línea de comandos y herramientas ant disponibles. última versión - 2.1.8 necesita java 5+.
2) XStream - para Soap Unmarshalling - necesita Java 5+. No es tan rápido y compatible con los estándares como JAXB más reciente.

BR,
~ A

XmlBeans es una buena opción, especialmente si tiene archivos XSD / WSDL 'rotos'.

Don mencionado

  

EmployeesDocument empDoc = EmployeesDocument.Factory.parse (xmlFile);

..pero también puede tomar un Nodo, un Archivo o casi cualquier fuente.

No luchar con los espacios de nombres, Recorrer el objeto que desea desmarcar, y Factory.parse it.

Ojalá lo hubiera encontrado hace 2 semanas.

Utilizamos Castor. Se adapta a nuestras necesidades bastante bien.

Me estaba preguntando exactamente la misma pregunta, y finalmente encontré estas pruebas de rendimiento realizadas por IBM. http://www.ibm.com/developerworks/library/x-databdopt2/ . JiBX es mi elección, supongo, jeje.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top