LSID
Universidad de Almería
Laboratorio de
Sistemas de Información Distribuidos

 


PRACTICAS

Práctica 1
Práctica 2
Práctica 3
 

Valid HTML 4.01 Transitional

 
 
 
 
 
 
 
 
 
 

ooooooooooooooo



Práctica 3: Productor/Consumidor CORBA bajo Web

 
MODULO 3: Programación XML
 
Para realizar esta parte de la práctica es necesario disponer de una herramienta de desarrollo XML. Para esta práctica se ha optado por una copia de libre distribución de XML4J.


Para conocer las clases Java y sus métodos consulte la API de XML4J que hay en la copia local de su equipo (suponiendo que ya tiene instalada la herramienta). La API se instala dentro de un directorio /doc/Javadoc/api. Tambien puede consultar una API en linea.

Para hacer uso de la librería XML es necesario indicar donde se encuentra las clases o el paquete JAR, que contiene dichas clases. Para esto es necesario usar el comando CLASSPATH.
-
CLASSPATH=/rutaXML/xml4j_1_1_9.jar:$CLASSPATH
export CLASSPATH
-
-
Programación XML con Java
-
NOTA 1
Esta página web no pretende enseñar a programar XML en Java, sino que sirve de apoyo a las clases de laboratorio. En las clases de teoría se imparten nociones relacionadas con la programación XML + Java.

NOTA 2
Para estas practicas finalmente se ha optado por la versión XML4J de IBM para trabajar con XML en Java. Las funciones de XML usadas normalmente pertenecen al estilo DOM del W3C, y vienen en cualquier paquete XML (como XML4J). Sin embargo, en cada paquete los fabricantes incluyen algunas utilidades propias, como extensiones del DOM de W3C. Por ejemplo, el paquete XML4J incluye la programación DOM en la ruta “org.w3c.dom” (indistintamente del paquete que se use) y tambien incluye la ruta “com.ibm.com” para utilidades.
-
 NOTA 3
Recuerde que en Java el nombre de una clase debe coincidir con el nombre del archivo que la contiene.
-

Ejemplo XML 1
-
Vamos a desarrollar un primer ejemplo en Java que lo único que realiza es una compilación de un documento supuestamente en XML. Esto se realiza con el siguiente código:

1   import org.w3c.dom.Document;
2   import com.ibm.xml.parser.Parser;
3   import java.io.FileInputStream;
4   public class SimpleParse {
5      public static void main(String[] argv) {
6         if (argv.length != 1) {
7            System.err.println("Es necesario un nombre de archivo.");
8            System.exit(1);
9         }
10        try {
11           FileInputStream is = new FileInputStream(argv[0]);
12           Parser parser = new Parser(argv[0]);
13           Document doc = parser.readStream(is);
14           if (parser.getNumberOfErrors() > 0) {
15              System.exit(1);
16           }
17        } catch (Exception e) {
18             e.printStackTrace();
19          }
20     }
21  }
Figura 1. Un programa java que compila un documento XML.
-
Para este programa: -

En la línea 1 se hace uso de la clase Document, extraida de org.w3c.dom del paquete que se está utilizando para trabajar con XML.
-
En la linea 2 se hace uso de la clase Parser, extraida de com.ibm.xml.parser del paquete que se está utilizando para trabajar con XML.
-
Lo normal es que para otros programas java algo mas complejos que el mostrado en la figura anterior, se utilice todas las clases incluidas para el Parser, esto es, hay que incluir al inicio de los programas lo siguiente:
-
import com.ibm.xml.parser.* ;
-
Veamos el comportamiento para el resto de las lineas.
-
11 FileInputStream is = new FileInputStream(argv[0]);
-
Esta línea crea una secuencia de entrada (“input stream”, is) para leer un archivo.
-
12 Parser parser = new Parser(argv[0]);
-
Esta línea crea una instancia de un objeto Parser.
-
13 Document doc = parser.readStream(is);
-
Esta línea pasa la secuencia al analizador sintáctico de XML.
-
Ejercicio
  • Genere un documento XML simple y compruebe el funcionamiento del programa.
  • Incluya algún tipo de error en el documento XML anterior para errores.
  • -
    Ejemplo XML 2
    -
    Ahora vamos a ver un ejemplo que crea un registro XML de la siguiente forma:

    <persona>
       <nombre>Luis Iribarne</persona>
       <edad>35</edad>
       <url href="http://www.ual.es/~liribarn"/>
    </persona>
    -

    El programa para hacer esto es el siguiente:

    import com.ibm.xml.parser.TXDocument;
     import org.w3c.dom.Document;
     import org.w3c.dom.Element;
     import org.w3c.dom.Text;
     import org.w3c.dom.ProcessingInstruction;
     import java.io.PrintWriter;

     public class MakeDocumentWithFactory {
        public static void main(String[] argv) {
           try {
              // Crea un objeto de tipo Document
              Document doc =
                (Document)Class.forName("com.ibm.xml.parser.TXDocument").newInstance();
              // Crea el elemento <persona> como raiz
              Element root = doc.createElement("persona");
              // Crea el elemento <nombre> y lo añade
              Element item = doc.createElement("nombre");
              item.appendChild(doc.createTextNode("Luis Iribarne"));
              root.appendChild(item);
              // Crea un elemento <edad> y lo añade
              item = doc.createElement("edad");
              item.appendChild(doc.createTextNode("35"));
              root.appendChild(item);
              // Crea el elemento <email> y lo añade
              item = doc.createElement("email");
              item.appendChild(doc.createTextNode("liribarne@ual.es"));
              // Crea un elemento <url> con un atributo y lo añade
              item = doc.createElement("url");
              item.setAttribute("href", "http://www.ual.es/~liribarn");
              root.appendChild(item);
              // Ahora añade el raiz al documento,
              doc.appendChild(root);
              // y muestra el documento
              ((TXDocument)doc).setVersion("1.0");// @XML4J
              ((TXDocument)doc).printWithFormat(new PrintWriter(System.out));
           } catch (Exception e) {
                e.printStackTrace();
             }
        }
     }

    Figura 2. Este código crea un registro


    Ejercicio


    Modifique la Servlet del productor/consumidor para crear el registro XML que acepte los dos datos de entrada del productor.
    No intente devolver directamente el documento DOM desde la Servlet hacia el Cliente ya que esta operación no se puede realizar directamente. Para comprobar si se ha creado correctamente el documento XML, almacénelo en un archivo. Devuelva al cliente un mensaje que advierta del resultado de la operacion; por ejemplo, "No se ha podido crear el documento XML", "No se ha podido almacenar el documento XML", "El documento XML se ha creado correctamente", etc.



    LSID, Laboratorio de Sistemas de Informática
    Departamento de Lenguajes y Computación
    Universidad de Almeria, España
    Luis.Iribarne@ual.es