java xml performance jaxb

java - JAXB vs DOM y SAX



xml performance (6)

He estado usando DOM para analizar mis pequeños documentos XML durante algún tiempo. Después de leer sobre JAXB ( http://www.oracle.com/technetwork/articles/javase/index-140168.html ), estoy planeando usar JAXB insta de DOM.

Por favor, hágame saber si este será un enfoque correcto.


(~ 7 años demasiado tarde, pero aún así)

Para contradecir la respuesta aceptada, dudo mucho que JAXB se implemente sobre DOM: eso requeriría dos Modelos de Objetos (Java y DOM) y anularía completamente el punto de enlace XML (el XB en JAXB) peor para el rendimiento / espacio Requeriría que ambos modelos se apoyen entre sí.

Me parece que JAXB es un claro análogo de DOM al considerar los enfoques para manejar el mapeo bidireccional XML en Java. DOM y JAXB son solo casos de lo que IBM llama XOM .

En casi todos los casos, yo preferiría JAXB sobre DOM, y favorecería a SAX, principalmente porque me parece que el "lenguaje agnóstico" de SAX y DOM API se ha vuelto absolutamente grotesco.

Obviamente, si su conjunto de datos es demasiado grande para caber en la memoria, entonces un Modelo de Objetos no es viable. De otra manera

Como escoger:

  • ¿Tienes un modelo de Java, o estás cargando uno de XML? es serialización, solo usa JAXB
  • Sin modelo Java, tiempo / espacio primordial, consulta simple de atributo / elemento de paso único, ¿esquema desconocido? Utilizar sax
  • ¿Ningún modelo de Java y tiempo / espacio primordiales pero el esquema es conocido, no cambia y es simple? Ruede el suyo, seriamente trivial (sin embargo, use un XSD y JAXB y codegen para probar su implementación)
  • ¿Se desconoce el esquema XML a priori, está sujeto a cambios sin notificación, o permite extensiones desconocidas (espacio de nombre) arbitrarias? Utilizar DOM
  • ¿Está bloqueado el esquema XML o lo posee? Utilizar JAXB

JAXB no es directamente comparable a DOM y SAX. Las API de análisis Java DOM y SAX son API de nivel inferior para analizar documentos XML, mientras que JAXB (API de Java para enlace XML) es una API de nivel superior para convertir elementos y atributos XML a una jerarquía de objetos Java (y viceversa). Las implementaciones de JAXB probablemente usarán un analizador DOM o SAX entre bastidores para realizar el análisis real de los datos de entrada XML.

A menudo querrá convertir el contenido de un documento XML en objetos en su programa Java. Si esto es lo que quiere hacer, entonces probablemente JAXB será más fácil de usar y tendrá que escribir menos código que cuando usaría la API de análisis DOM o SAX.

Si es el enfoque correcto para su caso, depende exactamente de cuáles son los requisitos funcionales y técnicos para su proyecto.


JAXB no soporta XPath. Necesitas un esquema para generar la api. Si tiene un XML desconocido o potencialmente malo, su programa finaliza con un error de validación. No es bueno para el procesamiento XML tolerante a errores, si solo desea analizar y no validar. No es bueno para procesar XML desconocido y buscar estructuras de nodo conocidas dentro. La navegación en estructuras XML complicadas produce una gran cantidad de código mal legible.

Si usa JAXB, implementa un acoplamiento de arreglos entre la estructura XML y su código java. Si se cambia XML, debe cambiar su código y desplegarlo. Puede ser doloroso. Si usa XPath, puede completar el desacoplamiento de XML-structur y el código java, si XPath está en configuración externa.


JAXB será fácil desde el sentido de menos escritura de código. Pero si necesita más control sobre el análisis, debe usar el analizador SAX. Le da más control sobre el análisis y es más rápido que el analizador DOM. Además, JAXB es una API de alto nivel, por lo que tiene una tarea general, por lo que será un poco más lenta que SAX.


JAXB, significa Java Architecture for XML Binding. JAXB se utiliza para Marshalling (objetos Java para representaciones XML) y Unmarshalling (contenido XML para objetos Java)

por favor siga este enlace para una buena comprensión de la arquitectura JAXB