Encuadernación Java XML
jaxb castor (11)
¿Qué estás usando para vincular 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. El rendimiento de marshalling / unmarshalling y la facilidad de uso son de particular interés.
Aclaración: me gustaría ver no solo qué marco utiliza, sino su razonamiento para usar uno sobre los demás.
Usamos Castor. Se adapta bastante bien a nuestras necesidades.
He usado Jaxb con un éxito variable. En ese momento (un par de años atrás) la documentación general era mediocre y la documentación básica de uso (incluyendo dónde descargar implementaciones) era difícil de encontrar o variada.
El analizador sintáctico que escribió las clases de Java era 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á ese tipo de marco y me interesará saber cómo alguien más realiza la ferias con lo anterior.
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:
- 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. Típicamente, esto significa definir un XSD y generar un código fuente Java equivalente. La interoperabilidad entre diferentes idiomas es la principal prioridad (de ahí el uso de XSD), más típicamente para la implementación de servicios web basados en SOAP.
- Serialización XML: se refiere a escribir un gráfico de objetos en la memoria en una secuencia, para que pueda reconstituirse en algún lugar o en cualquier otro momento. Usted escribe 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 lenguajes como .net suele ser 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 especial 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 vinculación / serialización.
Utilicé castor hace 7 años, funcionó bastante bien. usados DTDs. 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 comando y herramientas disponibles. última versión - 2.1.8 necesita Java 5+.
2) XStream - para eliminar el unificación de Soap - necesita Java 5+. No es tan rápido y cumple con los estándares como JAXB más reciente.
BR,
~ A
Jibx es lo que se usa aquí. Es muy rápido, pero las ataduras pueden ser un poco complicadas. Sin embargo, es especialmente útil si tiene esquemas XML que describen sus objetos de dominio, ya que realmente se corresponde bien con XSD (incluso hay una herramienta beta XSD2Jibx que puede tomar XSD y crear clases y asignaciones de dominio stub, que luego puede tomar y convencer a adaptarse a su modelo de dominio existente).
Manipula bytecode, por lo que debe ejecutarse después de la compilación inicial de los archivos .class de Java. Puede usar el plugin Maven para ello, o simplemente usarlo directamente (el plugin Eclipse no pareció funcionar para mí).
JiBX . Previamente utilicé Castor XML , pero JiBX demostró ser significativamente mejor, particularmente 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 mediante el uso de la manipulación de código byte posterior a la compilación en lugar del enfoque de reflexión adoptado por Castor. Esto tiene la ventaja de que impone menos exigencias en la forma en que escribes tus clases mapeadas. No hay necesidad de getters, setters y constructores no-arg solo para satisfacer las herramientas. La mayoría de las veces puede escribir la clase sin considerar los problemas de mapeo y luego mapearla sin modificaciones.
XmlBeans es una buena opción, especialmente si ha ''roto'' archivos XSD / WSDL.
Don mencionado
EmployeesDocument empDoc = EmployeesDocument.Factory.parse (xmlFile);
... pero también puede tomar un Nodo, un Archivo o cualquier fuente.
Sin pelear con espacios de nombres, atravesar el objeto que desea deshacer, y Factory.parse.
Ojalá lo hubiera encontrado hace 2 semanas.
Me preguntaba 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.
Si tiene un XSD para el XML, y no necesita vincular los datos a un conjunto existente de clases, realmente me gustan los XMLBeans . Basicamente funciona de esta manera:
- Compilar XSD
- Use clases java generadas para leer / escribir documentos que se ajusten a este esquema
Enlazar un documento XML a las clases generadas es tan simple como:
EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);
Relacionado: serialización XML en Java?