+ Responder Tema
Resultados 1 al 1 de 1
  1. #1
    Achievements:
    Three FriendsRecommendation First ClassCreated Album picturesTagger First Class1000 Experience Points
    Awards:
    Discussion Ender

    Fecha de Ingreso
    25 Jan 2008
    Mensajes
    836
    Points: 19,464, Level: 60
    Points: 19,464, Level: 60
    Level completed: 86%,
    Points required for next Level: 86
    Level completed: 86%, Points required for next Level: 86
    Overall activity: 0%
    Overall activity: 0%
    Agradecio
    3
    Agradecido 47 Veces en 31 Mensajes

    Predeterminado Introducción a JAXB con NetBeans

    Cómo manipular un fichero XML con JAXB (Java Architecture for XML Binding ) de Java.
    Hay muchas técnicas de manipular ficheros XML en el mundo Java, y vamos a ver una muy buena opción con JAXB (Java Architecture for XML Binding )

    Antes de hacer un ejemplo con esta tecnología, vamos a montar el Kit de desarrollo de Web Services, donde viene incluido (utilizaremos este tutorial como base para otros relacionados con Web Services)

    Descarga de WSDP

    Lo descargamos del Web de Sun




    Y arrancamos el ejecutable



    Nos aparece el asistente



    Elegimos la máquina virtual (un consejo, evitad los espacios en los trayectos de instalación)



    Elegimos la opción de utilizar un Tomcat como contenedor para nuestra aplicaciones y servicios Web



    Nos descargamos el Tomcat para WSDP



    Lo descomprimimos un directorio



    Ahora seleccionamos el producto recién instalado



    Elegimos el directorio del resto de componentes



    Realizamos la instalación típica



    Aunque os muestro las opciones en la personalizada..... que ya tenemos tema para un montón de tutoriales sobre las últimas especificaciones relacionadas con los servicios web (sobre todo debemos estar atentos a la evolución de la seguridad)



    Definimos el usuario que usuremos para manejar remotamente el Tomcat



    No olvidéis que este usuario hay que darlo de alta en el TOMCAT

    <!--
    NOTE: By default, no user is included in the "manager" role required to operate the "/manager" web application. If you wish to use this app, you must define such a user - the username and password are arbitrary.
    -->
    <tomcat-users>
    <user name="tomcat" password="tomcat" roles="tomcat" />
    <user name="role1" password="tomcat" roles="role1" />
    <user name="both" password="tomcat" roles="tomcat,role1" />
    <user name="admin" password="admin" roles="manager,admin" />
    </tomcat-users>

    No se os olvide leer las instrucciones finales (lo digo porque al final hacemos ok, ok, ok y no nos funcionan las cosas)



    Copiamos los jar al directorio propuesto



    Y ahora acabamos



    Y al arrancar sobre los iconos creados ..... no podr&#237;a dar este peque&#241;o error... solo tenemos que ir al directorio de binarios de tomcat y localizar el fichero catalina.bat (actualizando as&#237; el acceso directo)



    Primer ejemplo de JAXB

    Creamos un proyecto dentro de NetBeans 4.1. Ser&#225; una aplicaci&#243;n Web b&#225;sica



    Elegimos el nombre y trayecto



    La gracia est&#225; en que a partir de un Schema (esquema) XML podemos crear una estructura de clases que nos permitan un acceso c&#243;modo y seguro (verificaci&#243;n de que hacemos lo que debemos en compilaci&#243;n y no en ejecuci&#243;n)

    Creamos el esquema



    Le damos un nombre (libros.xsd)



    <?xml version="1.0" encoding="ISO-8859-1"?>

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.adictosaltrabajo.com/esquemas/libro"
    xmlns="http://www.adictosaltrabajo.com/esquemas/libro"
    elementFormDefault="qualified">

    <xsd:element name="libro">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="titulo" type="xsd:token"/>
    <xsd:element name="autor" type="xsd:token"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>

    <xsd:element name="libros" >
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element ref="libro" maxOccurs="unbounded" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>

    </xsd:schema>

    Creamos un fichero XML que use ese esquema



    Decimos que se valide contra un esquema



    Y le damos los detalles (el fichero lo llamamos libros.xml)



    <?xml version="1.0" encoding="ISO-8859-1"?>

    <libros xmlns='http://www.adictosaltrabajo.com/esquemas/libro'
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xsi:schemaLocation='http://www.adictosaltrabajo.com/esquemas/libro file:/C:/xml/libros.xsd'>
    <libro>
    <titulo>El fin de una odisea</titulo>
    <autor>Desconocido</autor>
    </libro>
    <libro>
    <titulo>Un lugar en la mente de Kerz</titulo>
    <autor>Desconocido</autor>
    </libro>
    </libros>

    Bueno, hasta ahora no hemos realizado nada raro .... vamos con la parte espec&#237;fica

    Invocamos fichero xjc.bat pasando como par&#225;metro el trayecto del fichero xml. Tambi&#233;n podemos especificar el directorio donde se generar&#225;n las clases

    xjc.bat -d directoriofinal ficheros.xsd



    Ahora, en nuestro proyecto le vamos a incorporar los JAR de JAXB



    Las elegimos



    Y pinchando sobre las propiedades del proyecto, a&#241;adimos el trayecto de los ficheros generados autom&#225;ticamente.



    Vemos es aspecto de nuestro proyecto



    Y ya solo nos queda escribir el c&#243;digo espec&#237;fico.

    package adictosjaxb;

    import com.adictosaltrabajo.esquemas.libro.*;
    import com.adictosaltrabajo.esquemas.libro.impl.*;
    import javax.xml.bind.*;
    import java.io.*;
    import java.util.*;

    /**
    *
    * @author Roberto Canales
    */
    public class Main {

    public static void depura(String cadena) {
    System.out.println("adictosjaxb: " + cadena);

    }

    public static void main(String[] args) {
    depura("Empezamos la operaci&#243;n");
    try {
    JAXBContext jc = JAXBContext.newInstance( "com.adictosaltrabajo.esquemas.libro" );
    Unmarshaller u = jc.createUnmarshaller();

    // es una chapuza pero para el ejemplo nos vale
    InputStream in = new FileInputStream("c:/xml/libros.xml");

    if(in == null) {
    depura("No encuentro el fichero");
    return;
    }

    // construimos el modelo a partir el stream de entrada
    Libros mifichero = (Libros)u.unmarshal( in );

    // recuperamos la lista de libros
    List mislibros = mifichero.getLibro();

    int numero = mislibros.size();
    depura("El numero de libros es " +numero );

    for (int i = 0; i < numero; i++) {
    Libro libroconcreto = (Libro)mislibros.get(i);
    depura(libroconcreto.getTitulo() + " - de - " + libroconcreto.getAutor());
    }

    // ahora a&#241;adimos un libro nuevo
    LibroTypeImpl nuevoLibro = new LibroTypeImpl();

    // establecemos los elementos
    nuevoLibro.setTitulo("Domina tu proyecto");
    nuevoLibro.setAutor("An&#243;nimo");

    // a&#241;adimos a la lista
    mislibros.add(nuevoLibro);

    // vamos a pintar ahora el arbol XML generado para asegurarnos que se ha a&#241;adido
    Marshaller formateador = jc.createMarshaller();
    formateador.setProperty(Marshaller.JAXB_FORMATTED_ OUTPUT, Boolean.TRUE);
    formateador.marshal( mifichero, System.out );

    // ahora escribimos a un fichero, en el correcto juego de caracteres
    formateador.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
    FileOutputStream salida = new FileOutputStream("c:/xml/salida.xml");
    formateador.marshal( mifichero, salida);

    } catch(Exception e) // esto es otra chapucilla, no me copieis
    {
    depura("el error es " + e.toString());
    }
    }
    }

    Analizamos el c&#243;digo

    Si lo analizamos, veremos que con 4 l&#237;neas, hacemos operaciones comunes...

    Recuperar el contenido de un fichero:

    JAXBContext jc = JAXBContext.newInstance( "com.adictosaltrabajo.esquemas.libro" );
    Unmarshaller u = jc.createUnmarshaller();

    // es una chapuza pero para el ejemplo nos vale
    InputStream in = new FileInputStream("c:/xml/libros.xml");

    if(in == null) {
    depura("No encuentro el fichero");
    return;
    }

    // construimos el modelo a partir el stream de entrada
    Libros mifichero = (Libros)u.unmarshal( in );

    // recuperamos la lista de libros
    List mislibros = mifichero.getLibro();

    int numero = mislibros.size();
    depura("El numero de libros es " +numero );

    for (int i = 0; i < numero; i++) {
    Libro libroconcreto = (Libro)mislibros.get(i);
    depura(libroconcreto.getTitulo() + " - de - " + libroconcreto.getAutor());
    }

    Insertar un nuevo nodo

    // ahora a&#241;adimos un libro nuevo
    LibroTypeImpl nuevoLibro = new LibroTypeImpl();

    // establecemos los elementos
    nuevoLibro.setTitulo("Domina tu proyecto");
    nuevoLibro.setAutor("An&#243;nimo");

    // a&#241;adimos a la lista
    mislibros.add(nuevoLibro);

    Volcar el contenido a la pantalla

    // vamos a pintar ahora el arbol XML generado para asegurarnos que se ha a&#241;adido
    Marshaller formateador = jc.createMarshaller();
    formateador.setProperty(Marshaller.JAXB_FORMATTED_ OUTPUT, Boolean.TRUE);
    formateador.marshal( mifichero, System.out );

    Y escribir el contenido en un fichero

    // ahora escribimos a un fichero, en el correcto juego de caracteres
    formateador.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
    FileOutputStream salida = new FileOutputStream("c:/xml/salida.xml");
    formateador.marshal( mifichero, salida);

    Conclusiones

    La opci&#243;n de JAXB, junto con JDOM, es una de mis preferidas para manipular de un modo r&#225;pido y sencillo ficheros XML.

    De todos modos podemos sacar algunas conclusiones importantes:

    Cada vez hay m&#225;s t&#233;cnicas para hacer lo mismo.

    Los conocimientos (aparentemente) cada vez tienen un ciclo de vida m&#225;s corto
    No es tan importante el manipular el fichero XML como definir bien su esquema desde un principio (lo que requiere saber analizar).
    Última edición por Adrian; 30/01/2008 a las 04:01 PM


 

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

     

Temas Similares

  1. Taller de PHP: Introducción
    Por billnick en el foro Cursos y Talleres
    Respuestas: 0
    Último Mensaje: 25/02/2008, 05:46 AM
  2. Taller de Adobe Dreamweaver: Introducción
    Por billnick en el foro Cursos y Talleres
    Respuestas: 0
    Último Mensaje: 25/02/2008, 05:38 AM
  3. Curso de introducción a Ubuntu
    Por billnick en el foro Tutoriales Linux
    Respuestas: 0
    Último Mensaje: 20/02/2008, 08:07 AM

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes