La construcción de código personalizado con el api de java para xml (jaxb)

Se puede construir con código personalizado JAXB - el Java API para XML Binding. Con JAXB, se toma un documento XML y hacer un archivo de clase Java que es perfecto para procesar el documento. Cuando cambian sus necesidades y la clase ya no hace lo que usted quiere que haga, que acaba de generar una nueva subclase.

Video: Writing and Reading XML with JAXB

Cuando se escribe SAX o DOM código, se crea un programa de procesamiento de XML. Su programa lee un documento, y utiliza el documento para realizar trabajo útil - comenzando con algo inofensivo como startElement public void o node.getNodeName (). De cualquier manera, su programa no hace suposiciones sobre lo que hay dentro del documento. El documento tiene una raíz elemento, algunos elementos secundarios, y eso es todo. Cualquier hipótesis especiales que tome acerca de este documento realidad estrechan la utilidad del código.

código versátil frente código personalizado

Considere el código en los listados 1 y 2. Listado 1, escanea cinco nodos en un árbol de documentos. Esos cinco nodos tienen que ser dispuestos de una manera determinada, o de lo contrario el programa se bloquea. (La lista quiere un comentario y un nodo raíz, con al menos dos hijos directamente bajo el nodo raíz.)

Listado 1: Viendo un par de nodos

importación org.w3c.dom.Node-
importación org.w3c.dom.NamedNodeMap-
clase MyTreeTraverser
{
MyTreeTraverser (nodo Node)
{
System.out.println (node.getNodeName ()) -
nodo = node.getFirstChild () -
System.out.println (node.getNodeName ()) -
nodo = node.getNextSibling () -
System.out.println (node.getNodeName ()) -
nodo = node.getFirstChild () -
System.out.println (node.getNodeName ()) -
nodo = node.getNextSibling () -
System.out.println (node.getNodeName ()) -
}
}

Video: Java and XML Training - JAXB Tutorial | How to Use XML Binding for Java Using Eclipse

Listado 2: Recorriendo el árbol DOM

importación org.w3c.dom.Node-
importación org.w3c.dom.NamedNodeMap-
clase MyTreeTraverser
{
node- nodo
MyTreeTraverser (nodo Node)
{
this.node = node-
nombre para mostrar()-
DisplayValue () -
si (node.getNodeType () == Node.ELEMENT_NODE)
displayAttributes () -
System.out.println () -
displayChildren () -
}
anulará idioma ()
{
System.out.print ( “Nombre:“) -
System.out.println (node.getNodeName ()) -
}
DisplayValue anular ()
{
Cadena nodeValue = node.getNodeValue () -
si (nodeValue! = null)
nodeValue = nodeValue.trim () -
System.out.print ( “Valor:“) -
System.out.println (nodeValue) -
}
displayAttributes void ()
{
NamedNodeMap attribs = node.getAttributes () -
for (int i = 0- i lt; attribs.getLength () - i ++)
{
System.out.println () -
System.out.print ( “Atributo:“) -
System.out.print (attribs.item (i) .getNodeName ()) -
System.out.print (”=“) -
System.out.println (attribs.item (i) .getNodeValue ()) -
}
}
displayChildren void ()
{
niño nodo = node.getFirstChild () -
mientras que (el niño! = null)
{
nueva MyTreeTraverser (infantil) -
niño = child.getNextSibling () -
}
}
}

El código en el Listado 2 es mucho más general. Este código comprueba la estructura del documento, ya que corre. Cuando el código encuentra un nodo hijo, que escanea el niño y mira a los nietos. Si no hay nietos, el código busca hermanos y hermanas. El código puede manejar cualquier árbol de documentos - si tiene un nodo o nodos mil.

Por lo tanto, el Listado 2 es más versátil que el Listado 1. Sin embargo, esta versatilidad viene con inconvenientes - incluyendo la posibilidad de muy alto por encima. El código del Listado 2 tiene que analizar todo el documento XML - y luego poner una representación de árbol del documento en la memoria del ordenador. Si el documento es muy grande, entonces la representación es grande: la memoria se hinchado con todo lo que los datos temporales, y el código en el Listado 2 se desacelera a paso de tortuga.

Los beneficios de la personalización

Imagínese que usted está tratando de conducir a Faneuil Hall en Boston, Massachusetts. No importa donde se inicia el viaje de- siempre será confuso y difícil. De todos modos, hay que planificar la ruta. Puede perderse en Revere cercana o Cambridge o en el centro de Boston. En función de sus recursos, tiene dos opciones:

Video: JAXP API Part-1 | XML Tutorial | Mr. Satish B

  • Se puede parar en una gasolinera y comprar un mapa. Si lo hace, entonces es posible que nunca llegan a Faneuil Hall. Después de todo, usted tiene que encontrar dónde está en el mapa, buscar rutas alternativas, elegir una ruta, y luego (el cielo te ayudan a) tratar de seguir la ruta sin perderse de nuevo.
  • Se puede decir que su caro sistema GPS, hablando que desea llegar a Faneuil Hall. El sistema trazará una ruta personalizada y guiará, a su vez por turno, desde cualquier lugar miserable que está en la ruta óptima que conduce desde allí a Faneuil Hall. La ruta es tan personalizada que la voz del GPS dice (por ejemplo), “No hay ninguna señal en esta intersección, pero gire a la izquierda de todos modos.” Más tarde, la voz dice: “Hay dos señales en esta intersección, y las señales se contradicen entre sí . Pero de todos modos girar a la derecha “.

Utilizando el mapa de papel necesita más trabajo (más tiempo, esfuerzo, destreza y paciencia) de utilizar el GPS que habla. ¿Por qué? Debido a que el mapa de papel no se adapta a su necesidades-específico en efecto, que dice: “Aquí está toda el área metropolitana de Boston. Faneuil Hall se encuentra en alguna parte. averiguar qué hacer a continuación “.

Un sistema personalizado es (como era de esperar) más fácil de usar que una que no se adapta a su situación inmediata. Por lo tanto, el código de procesamiento XML del Listado 2 hace una enorme, árbol DOM-tragando recursos en el espacio de memoria del equipo ( “Aquí está el árbol - averiguar qué hacer a continuación. . .”) Porque el código no está personalizado. El código funciona para cualquier documento de edad - no sólo el que tiene a mano - y siempre se traga a los recursos para hacerlo.

La esencia de JAXB

La idea detrás de JAXB es crear la clase hecho a medida para satisfacer sus necesidades actuales. Se toma la descripción de un documento XML, ejecuta a través de un programa especial llamado compilador de esquema, y obtener una nueva clase llamada la marca clase generada. Esta clase generada es más sencillo trabajar con documentos XML particulares.

Por ejemplo, si los documentos XML tienen elementos nombrados total, entonces la clase generada puede tener métodos setTotal y getTotal. Si el elemento de un documento tiene un atributo fullName, a continuación, la clase generada puede tener métodos setFullName y getFullName. (Véase la figura 1.)

La conexión entre una parte de un documento XML y una parte de una clase Java se llama Unión. Con todos estos enlaces, una instancia de la clase representa un único documento XML.

Figura 1: Un objeto representa un documento.

Entonces, ¿cómo se conecta un objeto con un documento XML? Bueno, la clase generada tiene métodos denominados unmarshal y Mariscal. (Véase la Figura 2.)

  • El método unmarshal lee un archivo XML. El método obtiene los valores del documento XML, y asigna estos valores a las variables del objeto Java.

Video: jaxb demo

  • El método Mariscal escribe un archivo XML. El método obtiene los valores del objeto de Java, y utiliza estos valores para crear el documento XML.

Con métodos como estos, puede recuperar y modificar los datos de un documento XML.

Figura 2: Lectura y escritura de valores.
Artículos Relacionados