¿Qué es JAXB y por qué debería usarlo?

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.

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 progtwig puede manipular.

JAXB tomará un Esquema XML que usted 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 puede usarse 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 Extrayendo el “XML” para poder enfocarme en “datos”.

Entonces 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 progtwig 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.

Aquí hay una razón para no usarlo: el rendimiento sufre. Hay una gran cantidad de sobrecarga al ordenar y desasociar. También es posible que desee considerar otra API para el enlace XML-Object, como JiBX: http://jibx.sourceforge.net/

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.

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 tags en un archivo XML.

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

Compruébalo aquí:

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

JAXB es excelente si tiene que codificar algunas especificaciones XML externas definidas como un esquema XML ( xsd ).

Por ejemplo, tiene una aplicación comercial y debe informar los intercambios a la aplicación Uber Lame Trade Reporting y le han dado ultra.xsd para que ultra.xsd adelante. Utilice el comstackdor $JAVA_HOME/bin/xjc para convertir el XML en un grupo de clases de Java (por ejemplo, UltraTrade ).

Luego puede simplemente escribir una capa de adaptador simple para convertir sus objetos comerciales en UltraTrades y usar JAXB para UltraTrades los datos en Ultra-Corp. Mucho más fácil que jugar sobre la conversión de sus operaciones en su formato XML.

¡Donde todo se descompone es cuando Ultra-Corp no ha obedecido sus propias especificaciones, y el price negociación que tienen como xsd:float debería expressse como un double !

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

En lo que respecta al esquema XML, tiene dos opciones:

  • Generar clases de Java desde un XSD
  • Genera un XSD de tus clases de Java

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

¿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. Muy a menudo necesitamos convertir estos documentos XML en objetos y viceversa. Por ejemplo: Empleado Java POJO simple puede usarse para enviar datos de Empleado a un componente remoto (también un progtwig Java).

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

Este Pojo se debe convertir (Marshall) en un documento XML de la siguiente manera:

  ... ...  

Y en el componente remoto, regrese al objeto Java desde un documento XML (Un-Marshall).

Que 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.

También puedes echarle un vistazo a JIBX. 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 busca rendimiento y compatibilidad, puede verificarlo:

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

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