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?
Respuesta
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.
JAXB se puede hacer sin XSD. Puede usar anotaciones: https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html – codefinger
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. –
@BlaiseDoughan, Metro es una implementación de JAXB? ¿No es Metro una implementación de WSIT? –
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.
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.
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
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. –
En realidad, aunque XStream está bien, no es realmente sencillo, ya que ambos son muy simples. Y Digester no es simple, simplemente simplista. – StaxMan
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/
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
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
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
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
!
También tenga en cuenta que PUEDE hacer código primero: comience con beans, genere esquema si lo necesita. – StaxMan
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/
Ejemplo claro en tu blog. Upvoted por eso. :-) –
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:
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.
¿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.
- 1. ¿Qué es PDO y por qué debería usarlo?
- 2. ¿Qué es NHibernate y por qué debería usarlo?
- 3. ¿Qué es .inc y por qué usarlo?
- 4. include() ¿Por qué no debería usarlo?
- 5. ¿Qué es un MvcHtmlString y cuándo debería usarlo?
- 6. ¿Qué es un DSL y dónde debería usarlo?
- 7. ¿Qué es un ÍNDICE ESPACIAL y cuándo debería usarlo?
- 8. ¿Qué es un delegado en Cocoa y por qué debería usarlo?
- 9. ¿Qué es la versión 8.0 del protocolo TDS y por qué debería usarlo?
- 10. ¿Qué es un MQ y por qué quiero usarlo?
- 11. ¿Qué es Request.InputStream y cuándo usarlo?
- 12. ¿Qué es LD_LIBRARY_PATH y cómo usarlo?
- 13. ¿Para qué sirve XML y cuándo debería usarlo?
- 14. ¿Qué es MVVM, y deberíamos usarlo?
- 15. ¿Qué es SproutCore y por qué debería importarme?
- 16. ¿Qué significa "solo exposición"? ¿Por qué usarlo?
- 17. ¿Qué es ICustomTypeDescriptor y cuándo usarlo?
- 18. ¿Qué es __declspec y cuándo debo usarlo?
- 19. ¿Qué es EGL y cómo puedo usarlo?
- 20. Qué hace asm ("pause") y por qué usarlo
- 21. ¿Por qué debería aprender COM?
- 22. ¿Qué es objc_setAssociatedObject() y en qué casos debería usarse?
- 23. ¿Por qué debería usar Flex?
- 24. ¿Qué debería saber sobre Git antes de comenzar a usarlo?
- 25. ¿Cuándo y por qué debería usar TStringBuilder?
- 26. ¿Por qué debería aprender y usar puntales?
- 27. explicación de D_GNU_SOURCE ¿Por qué usarlo y cuándo?
- 28. WOFF Fonts, ¿qué son y por qué debería importarme?
- 29. ¿Por qué debería/no debería usar el operador "nuevo" para instanciar una clase, y por qué?
- 30. ¿Qué es un simulacro y cuándo deberías usarlo?
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 –