2009-03-03 17 views
91

Hay un tipo aquí jurando que JAXB es lo mejor desde el pan rebanado. Tengo curiosidad por ver qué piensan los usuarios de Stack Overflow que el caso de uso es para JAXB y qué es lo que lo convierte en una solución buena o mala para ese caso.¿Qué es JAXB y por qué debería usarlo?

+2

Lea este artículo (Arquitectura Java para Enlace XML (JAXB)) este es el mejor. URL: http://www.oracle.com/technetwork/articles/javase/index-140168.html#unmars –

Respuesta

85

Soy un gran admirador de JAXB por manipular XML. Básicamente, proporciona una solución a este problema (estoy asumiendo familiaridad con XML, estructuras de datos de Java y esquemas XML):

Trabajar con XML es difícil. Uno necesita una forma de tomar un archivo XML, que es básicamente un archivo de texto, y convertirlo en algún tipo de estructura de datos, que su programa puede manipular.

JAXB tomará un esquema XML que escriba y creará un conjunto de clases que correspondan a ese esquema. Las utilidades de JAXB crearán la jerarquía de estructuras de datos para manipular ese XML.

JAXB se puede utilizar para leer un archivo XML y luego crear instancias de las clases generadas, cargadas con los datos de su XML. JAXB también hace lo contrario: toma clases de Java y genera el XML correspondiente.

Me gusta JAXB porque es fácil de usar y viene con Java 1.6 (si está utilizando 1.5, puede descargar JAXB .jars.) La forma en que crea la jerarquía de clases es intuitiva, y en mi experiencia, hace un trabajo decente abstrayendo el "XML" para poder enfocarme en "datos".

Así que para responder a su pregunta: esperaría que, para archivos XML pequeños, JAXB podría ser excesivo. Requiere que cree y mantenga un esquema XML y que use "métodos de libros de texto estándar" para utilizar las clases de Java para las estructuras de datos. (Clases principales, clases internas pequeñas para representar "nodos", y una gran jerarquía de ellas.) Por lo tanto, JAXB probablemente no sea tan bueno para una simple lista lineal de "preferencias" para una aplicación.

Pero si tiene un esquema XML bastante complejo y muchos datos contenidos en él, entonces JAXB es fantástico. En mi proyecto, estaba convirtiendo grandes cantidades de datos entre binarios (que fueron consumidos por un programa C) y XML (para que los humanos pudieran consumir y modificar esos datos). El esquema XML resultante no era trivial (muchos niveles de jerarquía, algunos campos podían repetirse, otros no) así que JAXB fue útil para poder manipular eso.

+19

JAXB se puede hacer sin XSD. Puede usar anotaciones: https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html – codefinger

+6

JAXB es una especificación (como JPA o JAXP), lo que significa que hay varias implementaciones (Metro, EclipseLink, etc.). Si tiene un problema con uno, puede cambiar a otra implementación. También puede aprovechar las extensiones ofrecidas por diferentes proveedores. –

+0

@BlaiseDoughan, Metro es una implementación de JAXB? ¿No es Metro una implementación de WSIT? –

17

Es un "ORM para XML". La mayoría de las veces se usa junto con JAX-WS (y de hecho las implementaciones de Sun se desarrollan juntas) para los sistemas WS Death Star.

7

Con JAXB puede crear automáticamente representaciones XML de sus objetos (clasificación) y representaciones de objeto de XML (desasignación).

En lo que se refiere al esquema XML, tiene dos opciones:

  • generar clases Java a partir de un XSD
  • generar un XSD de las clases Java

También hay algunos bibliotecas de serialización XML más simples como XStream, Digester o XMLBeans que podrían ser alternativas.

+1

No son marcos vinculantes, son bibliotecas de serialización. Un buen marco vinculante puede asignar cualquier XML a un gráfico de objeto isomórfico o viceversa. Estos mecanismos simples de serialización producen y consumen un esquema XML fijo y no estándar. – erickson

+0

Gracias Erickson, solo he trabajado con JAXB y quería asegurarme de mencionar algunas alternativas. Editaré mi respuesta en función de tu información. –

+0

En realidad, aunque XStream está bien, no es realmente sencillo, ya que ambos son muy simples. Y Digester no es simple, simplemente simplista. – StaxMan

22

He aquí un motivo para no usarlo: el rendimiento sufre. Hay una gran cantidad de sobrecarga al ordenar y desasociar.También puede ser que desee considerar otra API XML para la unión a objetos - como JiBX: http://jibx.sourceforge.net/

+1

Considere también usar la herramienta XSD2Jibx si tiene problemas con los enlaces: está en estado "alfa", pero es realmente útil para ilustrar las clases y enlaces que le gustan con los esquemas XSD ... ahora, si solo dejó de usar SQL date by predeterminado, y utiliza Java util Fecha en su lugar ... – MetroidFan2002

+3

Bullshit. JAXB es bastante rápido, siempre y cuando utilice un analizador rápido (como Woodstox), una sobrecarga de aproximadamente un 30-40% en comparación con el encuadernado manual. JiBX está bien, no hay problema con eso, pero la diferencia de rendimiento no es enorme. – StaxMan

+6

He usado JAXB en varios proyectos y sigo usándolo. Pero es importante entender cómo se compara con otros marcos. Si está ordenando/desasignando documentos que son cientos de megabytes, y el tiempo es importante, JiBX es una buena alternativa. JAXB == reflexión, JiBX == instrumentación de código de bytes. – codefinger

7

JAXB es grande si usted tiene que codificar a alguna especificación XML externo se define como un esquema XML (xsd).

Por ejemplo, si tiene una aplicación de comercio y usted debe reportar los oficios a la Uber Lame Comercio de Información Aplicación y le he dado ultra.xsd ser seguir adelante con. Use el compilador $JAVA_HOME/bin/xjc para convertir el XML en un grupo de clases Java (por ejemplo, UltraTrade).

continuación, sólo puede escribir una sencilla capa de adaptador para convertir sus objetos comerciales a UltraTrades y utilizar el JAXB para reunir los datos a través de ultra-Corp. Mucho más fácil que meterse la costumbre de convertir sus operaciones en su formato XML.

Cuando todo se derrumba cuando es ultra-Corp no han obedecido en realidad su propia especificación, y la trata de price que tienen abajo como xsd:float realidad debería expresarse como un double!

+1

También tenga en cuenta que PUEDE hacer código primero: comience con beans, genere esquema si lo necesita. – StaxMan

17

Uso JAXB en el trabajo todo el tiempo y realmente me encanta. Es perfecto para esquemas XML complejos que siempre cambian y especialmente buenos para el acceso aleatorio de etiquetas en un archivo XML.

Odio el proxenetismo pero acabo de empezar un blog y ¡esto es, literalmente, lo primero que publico!

Échale un vistazo aquí:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/

+4

Ejemplo claro en tu blog. Upvoted por eso. :-) –

3

también se puede comprobar a cabo JiBX también. También es una muy buena carpeta de datos xml, que también está especializada en OTA (Open Travel Alliance) y es compatible con servidores AXIS2. Si usted está buscando un rendimiento y compatibilidad, se puede comprobar que funciona:

http://jibx.sourceforge.net/index.html

0

JAXB proporciona un rendimiento mejorado a través de optimizaciones de clasificación predeterminado. JAXB define una API de programador para leer y escribir objetos Java desde y hacia documentos XML, lo que simplifica la lectura y escritura de XML a través de Java.

4

¿Por qué necesitamos JAXB? Los componentes remotos (escritos en Java) de los servicios web utilizan XML como medio para intercambiar mensajes entre ellos. ¿Por qué XML? Porque XML se considera una opción ligera para intercambiar mensajes en redes con recursos limitados. Por lo general, necesitamos convertir estos documentos XML en objetos y viceversa. E.g: Empleado Java POJO simple se puede usar para enviar datos de Empleado a un componente remoto (también un programa Java).

class Employee{ 
String name; 
String dept; 
.... 
} 

Este Pojo debe ser convertido (Marshall) en el documento XML de la siguiente manera:

<Employee> 
    <Name>...</Name> 
    <Department>...</Department> 
</Employee> 

Y al componente remoto, de vuelta al objeto Java de documento XML (Un-Marshall).

¿Qué es JAXB?

JAXB es una biblioteca o una herramienta para realizar esta operación de Marshalling y UnMarshalling. Te salva de este dolor de cabeza, tan simple como eso.

Cuestiones relacionadas