¿Qué es JAXB y por qué lo usaría? [cerrado]


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

 97
Author: halfer, 2009-03-03

9 answers

Soy un gran fan de JAXB por manipular XML. Básicamente, proporciona una solución a este problema (estoy asumiendo familiaridad con XML, estructuras de datos 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 el programa puede manipular.

JAXB tomará un esquema XML que escriba y creará un conjunto de clases que se correspondan con ese esquema. El JAXB utilities creará la jerarquía de estructuras de datos para manipular ese XML.

JAXB se puede usar 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 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 el JAXB .frasco.) La forma en que crea la jerarquía de clases es intuitiva, y en mi experiencia, hace un trabajo decente abstrayendo el " XML "para que pueda enfocarme en"datos".

Así que para responder a su pregunta: Yo 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 estándar de libro de texto" para utilizar clases Java para estructuras de datos. (Clases principales, pequeñas clases internas para representar "nodos", y una enorme jerarquía de ellos.) Por lo tanto, JAXB probablemente no es tan grande 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 binario (que era consumido 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 se podían repetir, otros no), por lo que JAXB fue útil para poder manipular eso.

 91
Author: poundifdef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-25 12:35:41

Aquí hay una razón para no usarlo: el rendimiento sufre. Hay una buena cantidad de gastos generales al organizar y desmarcar. Es posible que también desee considerar otra API para el enlace de objetos XML , como JiBX: http://jibx.sourceforge.net /

 23
Author: codefinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-03 17:50:08

Es un "OR para XML". Más a menudo se usa junto con JAX-WS (y de hecho las implementaciones de Sun se desarrollan juntas) para sistemas de Estrellas de la Muerte WS.

 19
Author: Tom Hawtin - tackline,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-03 16:39:23

Uso JAXB en el trabajo todo el tiempo y realmente me encanta. Es perfecto para esquemas XML complejos que siempre están cambiando y especialmente bueno para el acceso aleatorio de etiquetas en un archivo XML.

Odio ser proxeneta, pero acabo de empezar un blog y esto es, literalmente, la primera cosa que he publicado acerca de!

Compruébalo aquí:

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

 18
Author: artgon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-07 16:52:45

JAXB es excelente si tiene que codificar con alguna especificación XML externa definida como un esquema XML (xsd).

Por ejemplo, usted tiene una aplicación de comercio y debe informar de las operaciones a la Uber Lame Comercio Reporting App y que le han dado ultra.xsd para seguir adelante con. Utilice el compilador $JAVA_HOME/bin/xjc para convertir el XML en un montón de clases Java (por ejemplo, UltraTrade).

Entonces puede escribir una capa simple adaptador para convertir sus objetos comerciales a UltraTrades y usar el JAXB para ordenar los datos a través de Ultra-Corp. Mucho más fácil que jugar acerca de la conversión de sus operaciones en su formato XML.

Donde todo se descompone es cuando Ultra-Corp no ha obedecido realmente su propia especificación, y el comercio price que tienen como un xsd:float en realidad debe expresarse como un double!

 8
Author: oxbow_lakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-03 22:36:37

Con JAXB puede crear automáticamente representaciones XML de sus objetos (marshalling) y representaciones de objetos del XML (unmarshalling).

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

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

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

 8
Author: Fabian Steeg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-04 00:18:15

¿Por qué necesitamos a JAXB? Los componentes remotos (escritos en Java) de los servicios web utilizan XML como medio para intercambiar mensajes entre sí. ¿Por qué XML? Debido a que XML se considera una opción de peso ligero para intercambiar mensajes en redes con recursos limitados. Muy a menudo tenemos que convertir estos documentos XML en objetos y viceversa. Por ejemplo: Simple Java POJO Employee se puede usar para enviar datos de empleados al componente remoto (también un programa Java).

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

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

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

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

¿Qué es JAXB?

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

 5
Author: Prashant_M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-19 18:40:49

También puedes echar un vistazo a 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 los servidores AXIS2. Si está buscando rendimiento y compatibilidad, puede comprobarlo :

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

 4
Author: LostMohican,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-18 09:05:58

JAXB proporciona un rendimiento mejorado a través de optimizaciones de marshalling predeterminadas. JAXB define una API de programador para leer y escribir objetos Java desde y hacia documentos XML, simplificando así la lectura y escritura de XML a través de Java.

 0
Author: Amine Sagaama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-24 22:11:46