Hay un tipo aquí jurando que JAXB es lo mejor desde el pan de molde. Tengo curiosidad por ver qué piensan los usuarios de Stack Overflow que es el caso de uso de JAXB y qué lo convierte en una buena o mala solución para ese caso.
Hay un tipo aquí jurando que JAXB es lo mejor desde el pan de molde. Tengo curiosidad por ver qué piensan los usuarios de Stack Overflow que es el caso de uso de JAXB y qué lo convierte en una buena o mala solución para ese caso.
Respuestas:
Soy un gran fan de JAXB para manipular XML. Básicamente, proporciona una solución a este problema (supongo que está familiarizado con XML, estructuras de datos Java y esquemas XML):
Trabajar con XML es difícil. Se 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 luego su programa puede manipular.
JAXB tomará un esquema XML que usted escriba y creará un conjunto de clases que correspondan a ese esquema. Las utilidades JAXB crearán la jerarquía de estructuras de datos para manipular ese XML.
Luego, 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 de Java y genera el XML correspondiente.
Me gusta JAXB porque es fácil de usar y viene con Java 1.6 (si está usando 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. abstraer el "XML" para poder concentrarme en los "datos".
Entonces, para responder a su pregunta: esperaría que, para archivos XML pequeños, JAXB sea excesivo. Requiere que cree y mantenga un esquema XML y que utilice "métodos de libro de texto estándar" 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 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, convertía grandes cantidades de datos entre binarios (que eran consumidos por un programa en C) y XML (para que los humanos pudieran consumir y modificar esos datos). El esquema XML resultante no fue trivial (muchos niveles de jerarquía, algunos campos podrían repetirse, otros no), por lo que JAXB fue útil para poder manipular eso.
Aquí hay una razón para no usarlo: el rendimiento se ve afectado. Hay una gran cantidad de gastos generales al ordenar y descalificar. Es posible que también desee considerar otra API para el enlace de objetos XML, como JiBX: http://jibx.sourceforge.net/
Es un "ORM para XML". Se utiliza con mayor frecuencia 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 están cambiando y es especialmente bueno para el acceso aleatorio de etiquetas en un archivo XML.
Odio ser chulo, pero acabo de comenzar un blog y esto es literalmente lo primero que publiqué
Compruébalo aquí:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Con JAXB puede crear automáticamente representaciones XML de sus objetos (ordenación) y representaciones de objetos del XML (desagrupación).
En lo que respecta al esquema XML, tiene dos opciones:
También hay algunas bibliotecas de serialización XML simples como xstream , digestor o XMLBeans que podrían ser alternativas.
JAXB es excelente si tiene que codificar en alguna especificación XML externa definida como un esquema XML ( xsd
).
Por ejemplo, tiene una aplicación comercial y debe informar las operaciones a la aplicación Uber Lame Trade Reporting y le han dado ultra.xsd
para seguir adelante. Utilice el $JAVA_HOME/bin/xjc
compilador para convertir el XML en un montón de clases de Java (por ejemplo UltraTrade
).
Luego, puede simplemente escribir una capa de adaptador simple para convertir sus objetos comerciales UltraTrades
y usarlos JAXB
para ordenar los datos a Ultra-Corp. Mucho más fácil que jugar a convertir sus operaciones a su formato XML.
Donde todo se rompe es cuando Ultra-Corp en realidad no ha obedecido su propia especificación, y el intercambio price
que tienen como un en xsd:float
realidad debería expresarse como un double
!
¿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 liviana para intercambiar mensajes en redes con recursos limitados. Muy a menudo necesitamos convertir estos documentos XML en objetos y viceversa. Por ejemplo: Simple Java POJO Employee se puede utilizar para enviar datos de empleados a un componente remoto (también un programa Java).
class Employee{
String name;
String dept;
....
}
Este Pojo debe convertirse (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 herramienta para realizar esta operación de Marshalling y UnMarshalling. Te ahorra este dolor de cabeza, tan simple como eso.
También puede consultar JIBX. También es una carpeta de datos xml muy buena, que también está especializada en OTA (Open Travel Alliance) y es compatible con servidores AXIS2. Si busca rendimiento y compatibilidad, puede comprobarlo:
JAXB proporciona un rendimiento mejorado a través de optimizaciones de clasificación 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.