JAXB

RECU-0231 (Recurso Ficha Técnica)

Descripción

JAXB es la tecnología Java que provee un API y una herramienta para ligar el esquema XML a una representación en código Java. Con el uso de un esquema, se realiza una definición de los elementos que pueden estar contenidos en un documento XML. Este esquema también es utilizado para la definición de la firma y la relación entre los elementos existentes.

La API está dotada de métodos que permiten la creación de árboles de contenido de un documento XML (unmarshalling) y de métodos que permiten la creación de árboles a partir de los documentos XML (marshalling). Un esquema de lo que se realiza mediante JAXB puede observarse en la siguiente representación gráfica.

Usos conocidos

  • Dependiente del proyecto Glassfish

Ventajas e inconvenientes

Usar JAXB proporciona las siguientes ventajas en el proceso de datos:

  • Asegura que los datos son válidos: Es imprescindible disponer de un esquema para poder utilizar la API JAXB. Sin un esquema no pueden garantizar que sus datos sean válidos. No es posible crear un árbol de objetos Java a través del empleo de JAXB si el documento XML es inválido con respecto al esquema usado para crear las clases.
  • Es Rápida:. Las dos principales API's de uso general para analizar XML son SAX y DOM. Por definición, un analizador de sintaxis basado en SAX realiza el análisis mediante el empleo de eventos, lo que implica una reacción a los eventos que se encuentran dentro del documento mientras se está analizando, sin salvar ninguna parte del documento en memoria. Un analizador sintáctico basado en DOM mantiene la estructura de datos del documento en la memoria cuyo contenido puede ser manipulado, en general es más lento que SAX. Una aplicación JAXB, por otra parte, mantiene las ventajas de ambas implementaciones, por un lado puede mantener la velocidad de acceso de un analizador basado SAX y es capaz de almacenar toda la estructura de información de un analizador basado en DOM. JAXB puede incluso ser más rápido que los analizadores basado en SAX debido a que el análisis se basa en clases generadas, que se encuentran precompiladas, que contienen la lógica del esquema. De esta manera se suprime la fase de interpretación que debe realizar un analizador SAX. También puede almacenar la información de un analizador DOM pero no incluye la gran cantidad de funciones adicionales necesarias para el manejo de las modificaciones, simplificando la complejidad y aumentando la velocidad. Una aplicación JAXB es específica de un esquema; no podemos utilizarla para procesar los documentos de XML que se basan en otro esquema. De esta forma, se consigue un uso de memoria más eficiente.
  • Es Fácil de Usar: Mediante el empleo de JAXB se simplifica el acceso al contenido. Con un único stream de entrada se accede a todo el contenido. En la mayoría de ocasiones nos encontramos que los analizadores de sintaxis XML se limitan al tipado de datos ofrecido por un DTD. Un DTD es un tipo de lenguaje de esquema de XML. Todavía necesitamos proporcionar el código de conversión, que puede ser propenso a errores y difícil de mantener. JAXB genera automáticamente el código, que podemos personalizar, para que realice la conversión de contenidos por nosotros.
  • Puede Restringir Datos: Una de las principales características de JAXB es permitir que se valide la información en el código que se genera, así como la estructura de la misma. De esta manera, se pueden aplicar restricciones que no son mantenidas en un XML, como por ejemplo que solo exista un entero entre dos etiquetas. Es posible realizar asignaciones de tipos específicos del lenguaje Java, ya que JAXB es el encargado de generarlo
  • Es Personalizable: Para poder generar las clases desde el DTD necesitamos crear un esquema, denominado de unión, que utilizamos para especificar cómo se construyen las clases. Este esquema está basado en lenguaje XML. Especialmente importante es este aspecto en las conversiones de tipos de datos. Además de las conversiones de tipos de datos, podemos utilizar el esquema de unión para controlar los nombres de las clases, los paquetes y los tipos; y podemos generar constructores, interfaces, y enumeraciones personalizadas. El esquema de unión también permite que manejemos la evolución del esquema.
  • Es Extensible: Tras la generación de las clases Java que dan soporte, es posible aumentar la funcionalidad de las mismas de forma sencilla. El proceso de derivación de subclases es simple.

Requisitos e incompatibilidades

  • J2SE 5.0
  • W3C XML Schema
  • XML DTD
  • jsr173_1.0_api.jar
  • jaxb-impl.jar
  • jaxb-api.jar
  • activation.jar
  • jaxb-xjc.jar

Contenidos relacionados

Pautas
Área: Desarrollo » Librerías y Módulos » Java
Código Título Tipo Carácter
LIBP-0348 Librerías para el tratamiento de XML en Java Libro de pautas Directriz Recomendada