SlideShare una empresa de Scribd logo
INTRODUCCIÓN A LOS WEB
SERVICES

    »   Prácticas
Prácticas

• Contenido
  − ¿Qué es Axis?. Axis Services Vs JEE5 Services
      • Creación de un web service calculadora con Axis (modo JWS)
      • Creación de un web service calculadora mediante herramientas JEE5

   − Más sobre axis: Implementación de un servicio mediante un
    WSDD
Prácticas

• AXIS
   − Apache Axis es una implementación de SOAP
   − Con axis, es muy sencillo crear y usar un Web Service. Hasta que apareció
     JEE5, era una opción bastante buena para muchas organizaciones para
     construir sus Web Services.
   − La versión que usaremos es la más reciente, la 1.4 *
       • NO ES CIERTO:  * la más reciente, es AXIS2; pero el desarrollo no es aún lo
         suficientemente maduro, y además se trata de una implementación de WS
         distinta.

• AXIS Web Services VS JEE5 Web Services
   − Axis es un “añadido” innecesario para construir Web Services si nuestra
     plataforma es JEE5
   − Sin embargo es muy útil conocerlo, ya que podemos implantarlo fácilmente
     en nuestros entornos J2EE (por ejemplo, con Tomcat).
   − Los Web Services en JEE5 se construyen con JAX-WS. En AXIS se
     construyen con JAX-RPC.
Prácticas

• Preparando el entorno (I)
   − Instalación del JRE
   − Instalación SDK+App. Server
   − Instalación de netbeans
   − Crear directorio c:temp y c:cursosoa
   − Cambiar variable entorno TMP a %SystemRoot%TEMP o al valor c:temp
   − Cambiar el valor de la variable de usuario TMP a c:temp
       • Sirve para evitar un bug de Application Server y glassfish

   − Copiar el script setenv.bat a c:windows
   − Añadir al path estos directorios:
       • App-server-install-dirbin
       • App-server-install-dirlibantbin
Prácticas

• Preparando el entorno (II)
   − Comprobar si tenemos instalado notepad2. Notepad2 es un
     editor sencillo con reconocimiento de sintaxis.
   − Comprobar si tenemos instalado console. Console es una
     ventana de comandos con un buffer mayor que el cmd de
     windows y con unas fuentes más atractivas.
      • Una de las mejores características que tiene es la de poder marcar
       texto mediante el botón de shift+click_izquierdo. El menú copy/paste es
       ahora contextual.
      • Tambien ocurre que si tenemos texto en el portapapeles, podemos
       pegarlo con click_derecho sobre la ventana.
      • Eliminaremos la transparencia comentando la línea transparency del
       archivo c:windowsconsole.xml (<!– transparency…. -->).
Prácticas

• Preparando el entorno (III)
   − Descargarmos de la máquina jcrubio.cica.es el archivo:
       • OPCIONAL-axis-bin-1_4.zip

   − Lo copiamos a c:temp y descomprimimos.
   − Entramos a la carpeta axis-1_4webappsaxisWEB-INF.
   − Editamos con notepad el archivo web.xml
       • Comprobamos que los saltos de carro no son correctamente interpretados.

   − Editamos con notepad2 web.xml
   − Eliminamos el comentario a la línea que nos permite habilitar el Admin
      Servlet. Salvamos
   − Vamos a axis-1_4webappsaxis
   − Ejecutamos jar –cvf axis.war *
Prácticas

• Preparando el entorno (IV)
   − Ejecutamos asadmin deploy axis.war
   − Si no tenenos arrancado el servidor, fallará.
   − Comprobaremos los domains instalados y en ejecución con el
     comando:
      • Asadmin list-domains
   − Arrancar/Detener el servicio
      • Asadmin start-domain domain1 (como sólo un dominio, es opcional)
      • Asadmin stop-domain domain1
   − Arrancamos el servicio con el comando start-domain.
   − Volvemos a intentar asadmin deploy axis.war .
      • Usuario admin: admin
      • Password: curso.curso
Prácticas

• Preparando el entorno (V)
   − Comprobamos que se ha desplegado la aplicación con un navegador
     http://localhost:8080/axis
   − Ahora iniciamos la consola de administración (Programas, Sun
     Microsystems, Admin Console)
   − Nos logamos con admin/curso.curso
   − EN el panel de la izquierda, en Applications, pinchamos en web
     applications, y en el panel de la derecha, seleccionamos axis y pulsamos
     undeploy.
   − Logout
   − Comprobamos con el navegador que la aplicación ya no es accesible.
   − Con el servidor iniciado, abrimos un console y tomamos axis.war y lo
     copiamos al directorio:
       • App-server-install-dirdomainsdomain1autodeploy
Prácticas

• Preparando el entorno (VI)
   − Comprobamos que axis también se ha desplegado.
   − El autodeploy es por tanto también una forma rápida y cómo
     de desplegar aplicaciones en nuestro Application Server.

   − Por último…
   − Copiamos el archivo 03-librerias externas en netb-ide7-
     modules-ext.zip a un directorio temporal y extraemos su
     contenido.
   − Copiamos todas las librerías que aparezcan a:
      • Netbeans-install-dirSunnetbeans-5.5betaide7modulesext


• ¡TODO LISTO!
Prácticas

Preparando el entorno en un sistema LINUX
− Copiamos el archivo siguiente en nuestra máquina guadalinex:
    •   axis-bin-1_4.zip
− Una vez en /home/guadalinex,
  lo copiamos a /tmp y
  descomprimimos con unzip.
− Entramos a la carpeta
  cd axis-1_4/webapps/axis/WEB-INF
− Editamos con gvim –y el archivo
  web.xml
− Eliminamos el comentario
  para habilitar el
  Admin Servlet. Salvamos
− Vamos a axis-1_4/webapps/axis
− Ejecutamos:
  cp WEB-INF/classes/SOAP*.class .
− Ejecutamos jar –cvf axis.war *

           OJO con el
            PUNTO
Prácticas


• Preparando el entorno en un sistema LINUX (II)
   − Ejecutamos asadmin deploy axis.war
   − Si no tenenos arrancado el servidor, fallará.
   − Comprobaremos los domains instalados y en ejecución con el comando:
       • asadmin list-domains

   − Arrancar/Detener el servicio
       • asadmin start-domain       domain1 (como sólo un dominio, es opcional)
       • asadmin stop-domain domain1

   − Arrancamos el servicio con el comando start-domain.
   − Volvemos a intentar asadmin deploy axis.war .
       • Usuario admin: admin
       • Password: curso.curso
Prácticas


• Preparando el entorno en un sistema LINUX(III)
   − Comprobamos que se ha desplegado la aplicación con un navegador
       http://localhost:8080/axis
   −   Ahora iniciamos la consola de administración (abrimos un navegador y
       tecleamos la URL: http://localhost:4848)
   −   Nos logamos con admin/curso.curso
   −   En el panel de la izquierda, en Applications, pinchamos en web
       applications, y en el panel de la derecha, comprobamos que se encuentra
       la aplicación axis.
   −   Logout
   −   Si con el servidor iniciado, hubiésemos tomado el archivo axis.war y lo
       hubiésemos copiamos al directorio:
        • App-server-install-dir/domains/domain1/autodeploy
        • También se habría desplegado y aparecería en la consola de administración.
Prácticas

• Preparando el entorno en un sistema LINUX(IV)
   − El autodeploy es por tanto también una forma rápida y cómo
     de desplegar aplicaciones en nuestro Application Server.
   − Copiamos el archivo lib-ext-netb-ide7-modules-ext.zip a
     nuestra máquina guadalinex, y lo copiamos desde
     /home/guadalinex a /tmp. Ahí, extraemos su contenido con
     unzip.
   − Copiamos todas las librerías CON sudo que aparezcan a:
      • /opt/netbean-5.5/ide7/modules/ext
Creación de un web service calculadora con Axis (modo JWS)
Prácticas

• Una vez instalado AXIS, ya podemos también construir
  Web Services mediante él.

• Otro camino para arrancar el servidor es mediante el
  PROGRAMAS->Sun->App.->Start Default Server, y
  luego arrancamos la Admin Console del Application
  Server. Nos autenticamos con admin/curso.curso

• El path de despliegue de la aplicación axis.war será:
     • AppServer-install-dirdomainsdomain1applicationsj2ee-modulesaxis


• Será el directorio donde crearemos los JWS.
Práctica

• Debemos encontrarnos con lo siguiente:
Prácticas

• Ahora abrimos el archivo Calculadora.jws del directorio
  de prácticas. Debe contener algo como esto:
        /**
        * Servicio Web que realiza las operaciones Suma,
        * Resta, Multiplicación y División de dos números
        * @author JC
        */
        public class Calculadora {
            public int suma(int x, int y) {
            return x + y;
            }

            public int resta(int x, int y) {
            return x-y;
            }

            public int multiplica(int x, int y) {
            return x * y;
            }

            public int divide(int x, int y) {
            return x / y;
            }
        }
Prácticas

•   Cerramos el archivo, y con el server arrancado, y la
    aplicación axis desplegada, copiamos ese archivo al
    directorio:
       AppServer-install-dirdomainsdomain1applicationsj2ee-modulesaxis

•   Comprobamos ahora si ha generado un web service
    así:
    http://localhost:8080/axis/Calculadora.jws


•   Debemos obtener
    como respuesta esto:
Prácticas

• Una vez que sabemos que axis funciona correctamente,
  usaremos el Web Service Calculadora proporcionado
  por axis, construido sobre un archivo JWS.
   − Crearemos un proyecto de tipo “Web”.
   − Le daremos como nombre de proyecto 01CalculadoraJws
   − Una vez creado, en la zona de librerías, añadiremos los
    siguientes .jar de la carpeta ext:
     • axis.jar
     • jaxrpc.jar
     • commons-discovery-0.2.jar
     • commons-logging-1.0.4.jar
     • wsdl4j-1.5.1.jar
Prácticas

• De este modo:
Prácticas

• Ahora crearemos un servlet, que llamaremos
  resultados. El código fuente de este servlet, lo podemos
  extraer del directorio de prácticas: base-resultados.txt.
  Arreglamos los errores que marque Netbeans y
  salvamos.

• El index.jsp lo podemos extraer del directorio de
  prácticas; básicamente contiene un formulario que
  permite introducir dos argumentos para el cálculo que
  queramos hacer con la calculadora.
Prácticas

• Probamos el código con un Run de nuestro proyecto:
Creación de un web service calculadora
          mediante herramientas JEE5
Prácticas

• Ahora vamos a crear un proyecto del mismo web
  service que hemos implementado en AXIS, pero con la
  tecnología JEE5.

• Para ello, arrancamos netbeans, y creamos un nuevo
  proyecto. En el asistente, elegimos la opción de un
  proyecto tipo Web.

• Elegimos el nombre: 01CalculadoraJEE5
Prácticas

• Ahora creamos un web service mediante los menús,
  pulsando botón derecho en el proyecto, New File, Web
  Services, Web Service.

• Lo llamaremos “calculadora”, y en el nombre del
  paquete le daremos calculadoraJEE5.

• El asistente creará un archivo .java en la carpeta
  “Web Services”. Editamos el código de ejemplo que nos
  ha dejado Netbeans, y lo rellenamos con el archivo
  base-Calculadora.txt. Arreglar lo que netbeans marque
  con flags de error.
Prácticas

• Este proyecto tiene un index.jsp cuyo código dejaremos así:
  <%
  String URLRedireccion = "/01CalculadoraJEE5/calculadoraService?WSDL";
  response.sendRedirect(URLRedireccion);
  %>


• Hacemos un Clean and Build y un RUN del proyecto.

• El navegador se dirigirá hacia:
      • http://localhost:8080/01CalculadoraJEE5/calculadoraService?WSDL


• Ahora que ya tenemos nuestro Web Service Calculadora,
  debemos crear un cliente para probar el funcionamiento.

• Observamos que el web service JEE5 lleva el sufijo “Service”.
Prácticas

• Creamos un nuevo proyecto, de tipo Web, con el
  nombre 01CalculadoraJEE5Client .
• El index.jsp del proyecto, lo dejamos idéntico al
  index.jsp del proyecto 01CalculadoraJws.
• Creamos un Servlet llamado resultados, y en el nombre
  del paquete, establecemos calculadoraJEE5Client .
• Luego, pinchamos en nuestro proyecto, pulsamos botón
  derecho del ratón, New File, y en el asistente, elegimos
  Web Services, y en el panel derecho, elegimos Web
  Service Client.
Prácticas

• En la ventana siguiente, podemos elegir entre buscar el Web
  Service entre uno de nuestros proyectos o bien a través de la
  opción WSDL URL.

• Si elegimos Project, basta navegar hacia 01CalculadoraJEE5 y
  seleccionar nuestro web service. Si elegimos WSDL URL,
  debemos especificar esta URL:
      • http://localhost:8080/01CalculadoraJEE5/calculadoraService?WSDL


• Como nombre de paquete, elegimos calculadorajee5client

• Una vez que ya tenemos el web service referenciado en nuestro
  proyecto, podemos usar una característica de Netbeans de
  escritura automática de código.
Práctica

• Seleccionamos nuestro proyecto y creamos un nuevo Servlet, y
  lo llamaremos “resultados”; también en el paquete
  calculadorajee5client.
• En la ventana de código, tenemos que irnos al método
  processRequest . En una línea vacía de la ventana de Editor,
  dentro de este método, pulsamos botón derecho del ratón y
  elegimos Web Service Client Resources, y dentro de este menú,
  Call Web Service Operation.
• Seleccionamos el Web Service que tenemos referenciado y
  elegimos la operación suma.
• Las sentencias para capturar los parámetros del formulario que
  usará el Web Service en nuestras operaciones son:
   Integer arg0 = Integer.parseInt(request.getParameter("arg0"));
   Integer arg1 = Integer.parseInt(request.getParameter("arg1"));
Práctica

• Si dejamos el código tal como lo presenta el asistente,
  podemos obtener al final este aspecto en nuestro
  proyecto, una vez desplegado y ejecutándose:
Más sobre axis: Implementación de
   un servicio mediante un WSDD
Prácticas

• Lo primero que tenemos que hacer es asegurarnos de
  que tenemos disponible el archivo setenv.bat en una
  ubicación dentro del PATH.

• Luego abrimos un “console”, y nos dirigimos hacia:
  AppServer-Install-dirdomainsdomain1applicationsj2ee-modulesaxis

• En este path, ejecutamos:
  copy Calculadora.jws WEB-INFclassesCalculadora.java

• Acto seguido, ejecutamos cd WEB-INFclasses

• Y por último “javac Calculadora.java”
Prácticas

• El fichero batch “setenv” crea unas variables de entorno
  para que podamos usar el AdminService de axis, que
  sirve para dar de alta Web Services compilados y que
  aparecen en la lista inicial list junto con sus métodos.

• Para poder usar el AdminService, es necesario crear en
  este mismo directorio un fichero Calculadora.wsdd

• El fichero Calculadora.wsdd puede copiarse del
  directorio de prácticas.
Prácticas

• Calculadora.wsdd:
   <deployment
     xmlns="http://xml.apache.org/axis/wsdd/"
     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
     <!--Definimos el servicio Web a activar:
       Nombre y tipo de Servicio Web.
       RPC: Llamadas a procedimientos remotos con ejecucion sincrona
     -->
     <service name="CalculadoraWS" provider="java:RPC">
       <!-- Nombre de la clase que implementa los metodos expuestos -->
       <parameter name="className" value="Calculadora"/>
       <!-- Expone todos los metodos como visibles desde el exterior -->
       <parameter name="allowedMethods" value="*"/>
     </service>
   </deployment>
WEB SERVICES

• También creamos un archivo que se llame “undeploy-
  calculadora-ws.wsdd”. Servirá si tenemos que dar de
  baja el web service:
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">

 <service name="CalculadoraWS"/>

</undeployment>
Prácticas

• Es muy importante que en fichero wsdd no exista ningún
  carácter acentuado.
• Si existe algún carácter acentuado incluso en la zona de
  comentarios, el AdminService generará un error.

  Ahora, para usar el AdminService:
   − Iniciamos el servidor donde esté axis
   − setenv
   − java
    org.apache.axis.client.AdminClient
         -lhttp://localhost:8080/axis/services/AdminService
         Calculadora.wsdd
Prácticas

• Captura de pantalla de la ejecución:
Prácticas

• Si todo ha ido bien, podremos ver algo como esto:
Prácticas

• Llegados a este punto, el fichero Calculadora.java
  podría eliminarse de ese directorio, si quisiéramos.
• Es importante destacar que AdminService ha añadido la
  terminación WS al web service, porque así lo hemos
  especificado en el WSDD. Podríamos haber añadido el
  sufijo “Service”, como en los WS de JEE5. Ahora para
  acceder al wsdl la URL es:
   − http://localhost:8080/axis/services/CalculadoraWS?wsdl
• Los web services JEE5 tienen una URL terminada en
  service
  − http://localhost:8080/01CalculadoraJEE5/calculadoraService?WSDL
Prácticas

• ¿Podríamos haber creado el WS sin tener el servidor de
  aplicaciones levantado, o el admin servlet habilitado?

• Sí; de este modo:
  − setenv
  − java org.apache.axis.transport.http.SimpleAxisServer -p 8080
  − Java org.apache.axis.client.AdminClient
         -p 8080 Calculadora.wsdd
    .. .. .. .. .. .. .. .. ..
  Processing file Calculadora.wsdd
    <Admin>Done processing</Admin>


• Y ya tendríamos el Web Service Calculadora
  Disponible.
Prácticas

• Para detener el SimpleAxisServer, ejecutamos:
   − java org.apache.axis.client.AdminClient -p 8080 quit
   − <Admin> quitting.</Admin>


• Obtendré del sistema lo siguiente:
  − Administration service requested to quit, quitting.
  − SimpleAxisServer quitting.
  − SimpleAxisServer quitting.
EJERCICIO: Utilizar WSDL2Java para
        crear un clientes standalone
PRÁCTICAS

• Abrimos un “console”
• Creamos una carpeta en el temporal:
  − Mkdir c:tempcarpeta
  − Cd c:tempcarpeta
• Levantamos el servidor
• Por últimos, una vez el servidor arriba, ejecutamos lo
  siguiente:
  − Setenv
  − wget http://localhost:8080/axis/services/CalculadoraWS?wsdl -O CalculadoraWS.wsdl


• NOTA: disponemos de wget gracias a unxutils.
Prácticas

• Ahora ejecutamos:
  wget http://localhost:8080/axis/services/CalculadoraWS?wsdl -O CalculadoraWS.wsdl


• Eso nos descargará el archivo CalculadoraWS.wsdl

• Con él, usaremos una herramienta que creará los stubs
  o plantillas java para usar el web service.

• Usándolas, nos quedará un código mucho más legible.
Prácticas

• Generamos la implementación de los stubs del Web
  Service, ejecutando:
  java org.apache.axis.wsdl.WSDL2Java CalculadoraWS.wsdl

• Comprobamos que debe existir ahora esta estructura:
  ls ./localhost/axis/services/CalculadoraWS/Calculadora*
./localhost/axis/services/CalculadoraWS/Calculadora.java
./localhost/axis/services/CalculadoraWS/CalculadoraService.java
./localhost/axis/services/CalculadoraWS/CalculadoraServiceLocator.java
./localhost/axis/services/CalculadoraWS/CalculadoraWSSoapBindingStub.java


• Ya tenemos lo necesario para usarlo con un cliente.
Prácticas

• Código del cliente más legible (“CalculadoraClient2.java”) que
  podemos crear (seguimos en el directorio c:tempcarpeta):
import localhost.axis.services.CalculadoraWS.*;
/**
* Prueba el Web Service
* @author JC
*/
public class CalculadoraClient2 {
   public static void main(String[] args) {
        localhost.axis.services.CalculadoraWS.CalculadoraServiceLocator locator;
        localhost.axis.services.CalculadoraWS.Calculadora calc;
        try {
                locator = new CalculadoraServiceLocator();
                calc = locator.getCalculadoraWS();
                System.out.println(calc.suma(6, 2));
                System.out.println(calc.resta(3, 2));
                System.out.println(calc.multiplica(9, 2));
                System.out.println(calc.divide(100, 4));
         } catch (Exception ex){
                System.out.println(ex);
         }
   }
}
Prácticas

• Compilamos el cliente con el    • Si movemos el binario a
  comando:                          otra ubicación, fallará al
  javac CalculadoraClient2.java
                                    no encontrar la vía que
• Lo ejecutamos con:                empieza por localhost.
  java CalculadoraClient2
                                  • Tendríamos que arrastrar
• Obtenemos:                        la carpeta localhost junto
  8                                 con el
  1                                 CalculadoraClient2.class
  18
  25                              • Vamos a programarlo sin
                                    usar los stubs que crea la
                                    utilidad WSDL2Java.
Prácticas
• Código de CalculadoraClient3.java
/* import org.apache.axis.client.Call;
   import org.apache.axis.client.Service;
                                                         => Esta aplicación es mucho
   import org.apache.axis.encoding.XMLType;
   import javax.xml.rpc.ParameterMode;
                                                         más engorrosa de usar.
   /**
   * Prueba el Web Service 2
   * @author JC
   */
   public class CalculadoraClient3 {
             public static void main(String [] args) throws Exception {
             String endpoint = "http://localhost:8080/axis/services/CalculadoraWS";
             Integer op1 = new Integer(100);
             Integer op2 = new Integer(200);
             Service service = new Service();
             Call call = (Call) service.createCall();
             // Establecemos la dirección en la que está activado el WebService
             call.setTargetEndpointAddress( new java.net.URL(endpoint) );
             // Establecemos el nombre del método a invocar
             call.setOperationName( "multiplica" );
             // Establecemos los parámetros que necesita el método
             // Observe que se deben especificar correctamente tanto el nómbre
             // como el tipo de datos..
             // esta información se puede obtener viendo el WSDL del servicio Web
             call.addParameter( "in0", XMLType.XSD_INT, ParameterMode.IN );
             call.addParameter( "in1", XMLType.XSD_INT, ParameterMode.IN );
             call.setReturnType( XMLType.XSD_INT );
             Integer result = (Integer) call.invoke( new Object [] { op1, op2 });
             System.out.println("El resultado de la multiplicacion es: " + result);
             }
   }
EJERCICIO: Crear un proyecto netbeans
con el código fuente de CalculadoraClient2
Prácticas

• Se pide:
   − Crear un proyecto 01CalculadoraClient2, que realice la misma
     función que CalculadoraClient2.

• NOTAS
  − Tenemos que tener en cuenta que WSDL2Java genera un
     paquete con fuentes que necesitamos.
   − Este proyecto, necesita las siguientes librerías:
EJERCICIO: Crear aplicaciones web que
 sean clientes de nuestros Web Services
Prácticas

• Como ejercicio, debemos crear un cliente de web service.
  CalculadoraWS. Tendremos de nuevo que añadir a mano las
  librerías externas como en el proyecto cliente JWS.
• Creamos un proyecto llamado: 01CalculadoraWsdd, de tipo Web.
• Creamos un servlet resultados, y en el nombre del paquete, le
  ponemos: calculadoraWsdd
• Copiamos todo el trozo de código del servlet del proyecto
  01CalculadoraJws, sin copiar la línea “package”.
• Cambiamos la línea:
   miLlamada.setTargetEndpointAddress(new URL("http://localhost:8080/axis/Calculadora.jws"));

• Por la línea:
   miLlamada.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/CalculadoraWS"));
Prácticas

• Lo ejecutamos, y debemos ver algo como esto:
PRÁCTICAS REPASO
Práctica repaso 1
Práctica repaso 1
− Construir un web service que tome dos argumentos; sean A y B.
− El WS debe devolver el resultado de la siguiente operación:
    •   A*B+2*(A+B) -1
− Lo construiremos:
    • Mediante un JWS, con su cliente
    • Mediante una clase Java, con su WSDD y su cliente
    • Mediante JEE5, con un WS (@webservice) y su cliente.
− PERO: nuestros clientes atacarán al web service del compañero de al lado. Los
  nombres de ficheros/proyectos y métodos:
    • El método que ofrecerá el cálculo A*B+2*(A+B) -1 se llamará calculo.
    • El index.jsp con el formulario que captura los dos argumentos será el habitual.
    • El JWS que implemente el WS se llamará: pfinal1.jws
    • El PROYECTO que actúa como cliente de pfinal.jws se llamará pfinal1JwsClient

    •   El PROYECTO que actúa como cliente del servicio implementado con WSDD se llamará
        pfinal1WSDDClient. El WSDD llevará como service name pfinalWS1

    • El PROYECTO JEE5 que implemente el Web Service se llamará pfinal1JEE5WService,
      el servicio se llamará pfinal1
    • El PROYECTO cliente del Web Service se llamará pfinal1JEE5Client.
          −   OJO CON LOS SUFIJOS EN EL DESPLIEGUE DE SERVICIOS.
Práctica repaso 2
Práctica repaso 2

• Construiremos ahora dos web services:
   − Uno llamado pfinal2a, que realice la operación A*3+B*4
   − Uno llamado pfinal2b, que realice la operación A+3+B-2
   − Los construiremos de tipo AXIS/WSDD y JEE5
   − Los WSDD’s llevarán como service name pfinal2aWS y pfinal2bWS
   − El PROYECTO JEE5 que implemente el Web Service se llamará
      pfinal2ajee5 y pfinal2bjee5 , los servicios se llamarán pfinal2a y pfinal2b

• Y ADEMÁS:
   − Los clientes, harán lo siguiente:
        • Harán la llamada a TODOS los web services de todos los alumnos, y sumarán
          el resultado que produzcan cada uno de ellos.
        • Construiremos los clientes tanto para pfinal2a como para pfinal2b
EJERCICIO: Aprendemos a usar la
herramienta “Web Services Explorer” que
      viene incorporada en Eclipse WTP
WEB SERVICES

• En nuestra máquina linux, tenemos
  un proyecto funcionando con Web
  Services, pero nuestro IDE es capaz
  de hacer más cosas. Algunas de
  ellas muy útiles en cuanto a
  depuración: Web Services Explorer

• Dentro de la carpeta src/WEB-INF,
  creamos una nueva carpeta que se
  llame “wsdl”. La vía completa será
  pues: src/WEB-INF/wsdl

• Seleccionamos esa carpeta, y
  pulsamos “File->Import->File
  System”
WEB SERVICES

Seleccionamos el WSDL de nuestra calculadora:
WEB SERVICES

• Si todo ha ido
  correctamente, debemos
  tener en el Package
  Explorer una imagen
  como la de la figura.

• Si hacemos doble click
  sobre el nombre del
  archivo que hemos
  importado, se abrirá una
  vista en diseño muy útil y
  clarificadora.
WEB SERVICES
WEB SERVICES

• Para lo siguiente que vamos a hacer, necesitamos
  arrancar JBOSS (por ejemplo, desde Eclipse, mediante
  la configuración de debugging que hemos creado).

• Ahora nos aseguramos de seleccionar
  CalculadoraWS.wsdl, y pulsamos:
  click-dcho->Web Services->Test with Web Services
  Explorer

• Se abrirá una ventana de navegador con una aplicación
  web como la de la figura siguiente.
WEB SERVICES

• ¿Cómo puedo buscar en un repositorio UDDI?
WEB SERVICES
WEB SERVICES

• ¿Y los repositorios UDDI para publicar o buscar?
FIN

Más contenido relacionado

PDF
9/9 Curso JEE5, Soa, Web Services, ESB y XML
PDF
6/9 Curso JEE5, Soa, Web Services, ESB y XML
PPT
Charla Web Services
PPT
JBoss AS jeap - Curso JBoss JB366 Día 1
PPTX
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
PDF
8/9 Curso JEE5, Soa, Web Services, ESB y XML
KEY
Rails intro
PDF
3/9 soa y web services
9/9 Curso JEE5, Soa, Web Services, ESB y XML
6/9 Curso JEE5, Soa, Web Services, ESB y XML
Charla Web Services
JBoss AS jeap - Curso JBoss JB366 Día 1
JBoss AS Installation -JBoss as jeap - Curso JBoss JB366 Día 2
8/9 Curso JEE5, Soa, Web Services, ESB y XML
Rails intro
3/9 soa y web services

La actualidad más candente (19)

PDF
Sun Java System Web Server 6.1
PDF
PDF
1/9 Curso JEE5, Soa, Web Services, ESB y XML
PDF
Programacion web java
PDF
Apache Camel - Parte II
PDF
Cjee a-leccion-web services-jax-ws
PDF
Dreamweaver
PDF
Curso Básico de JDBC
PDF
Entornos apex onpremise
PDF
Ruby on Rails - ETyC 2011
PPTX
Presentacion sobre asp
PPT
Curso: Programación Web con Tecnología Java
PDF
Migrating to ICEfaces 2 (Spanish)
PPTX
Oracle Forms
PDF
Manual programacion - java - jsp & xml
PPT
Asp .net
ODP
Introducción a Kohana Framework
PPT
webutil oracle forms
Sun Java System Web Server 6.1
1/9 Curso JEE5, Soa, Web Services, ESB y XML
Programacion web java
Apache Camel - Parte II
Cjee a-leccion-web services-jax-ws
Dreamweaver
Curso Básico de JDBC
Entornos apex onpremise
Ruby on Rails - ETyC 2011
Presentacion sobre asp
Curso: Programación Web con Tecnología Java
Migrating to ICEfaces 2 (Spanish)
Oracle Forms
Manual programacion - java - jsp & xml
Asp .net
Introducción a Kohana Framework
webutil oracle forms
Publicidad

Destacado (20)

PPTX
Introduccion Servicios Web
PDF
Ebe2013: productividad conherramientas en la nube
PPTX
Servicios web xml
PDF
El Proyecto Polymer
PPTX
SOA y Web Services
PDF
7/9 Curso JEE5, Soa, Web Services, ESB y XML
PDF
Componentes Web y El Framework Polymer
PPT
144 Rest Web Services
PPTX
Web services
PDF
Curso node.js
PPTX
Curso de javascript y node avanzado
PDF
Servidor API REST con Node.js
PPTX
Introducción a Xamarin
PPT
SOAP y Web Services
PDF
Taller de Programación Funcional en JavaScript
PDF
Principios de Diseño de Componentes Web
PDF
Arquitecturas Reactivas de Streams
PDF
SOA y Web Services
PDF
Programación Asíncrona en Node JS
PDF
Arquitectura Orientada a Servicios (SOA)
Introduccion Servicios Web
Ebe2013: productividad conherramientas en la nube
Servicios web xml
El Proyecto Polymer
SOA y Web Services
7/9 Curso JEE5, Soa, Web Services, ESB y XML
Componentes Web y El Framework Polymer
144 Rest Web Services
Web services
Curso node.js
Curso de javascript y node avanzado
Servidor API REST con Node.js
Introducción a Xamarin
SOAP y Web Services
Taller de Programación Funcional en JavaScript
Principios de Diseño de Componentes Web
Arquitecturas Reactivas de Streams
SOA y Web Services
Programación Asíncrona en Node JS
Arquitectura Orientada a Servicios (SOA)
Publicidad

Similar a 4/9 Curso JEE5, Soa, Web Services, ESB y XML (20)

DOCX
DOCX
Servicios web
DOCX
Servicios web
PDF
004 Desarrollo de aplicaciones web.pdf
PDF
004 Desarrollo de aplicaciones web.pdf
PDF
Desarrollo de aplicaciones web.pdf
PDF
2/9 Curso JEE5, Soa, Web Services, ESB y XML
PDF
Manual basico
PDF
200405 - Aplicaciones Web
DOCX
TEMA Nº 2: ENTORNO DE DESARROLLO
DOCX
TEMA Nº 2: ENTORNO DE DESARROLLO
DOCX
Temario java web_j2_ee_02
DOCX
Temario java web_j2_ee_02
DOCX
TEMA Nº 2: ENTORNO DE DESARROLLO
DOC
Introducción al desarrollo de aplicaciones web
PDF
PDF
Master j2ee
DOCX
Aprendiendo php my sql, javascript, css, html5 capitulo 2
PDF
Servicios web
PDF
Servicios web
Servicios web
Servicios web
004 Desarrollo de aplicaciones web.pdf
004 Desarrollo de aplicaciones web.pdf
Desarrollo de aplicaciones web.pdf
2/9 Curso JEE5, Soa, Web Services, ESB y XML
Manual basico
200405 - Aplicaciones Web
TEMA Nº 2: ENTORNO DE DESARROLLO
TEMA Nº 2: ENTORNO DE DESARROLLO
Temario java web_j2_ee_02
Temario java web_j2_ee_02
TEMA Nº 2: ENTORNO DE DESARROLLO
Introducción al desarrollo de aplicaciones web
Master j2ee
Aprendiendo php my sql, javascript, css, html5 capitulo 2
Servicios web
Servicios web

Más de Juan Carlos Rubio Pineda (15)

PDF
Anexo seguridad tic-centrorespaldo
PDF
Continuidad de sistemas
PDF
Redes lan2 : instrucción 1/2006 de la Junta de Andalucía
PDF
Redes lan1: cableado (orden 25/9/2007)
PDF
Zentyal curso-ja
PDF
Supercomputación y Cloud computing en CICA. Jornadas Universidad de Huelva
PDF
Seminario metodologías agiles bloque II
PDF
Seminario de metodologías ágiles, bloque I
PDF
5/9 Curso JEE5, Soa, Web Services, ESB y XML
PDF
Virtualizacion
PDF
Guadalinex con colinux y Tecnología Nomachine NX
PDF
Exportador S I C A C V N 1
PDF
Sistema de colas Condor en CICA
Anexo seguridad tic-centrorespaldo
Continuidad de sistemas
Redes lan2 : instrucción 1/2006 de la Junta de Andalucía
Redes lan1: cableado (orden 25/9/2007)
Zentyal curso-ja
Supercomputación y Cloud computing en CICA. Jornadas Universidad de Huelva
Seminario metodologías agiles bloque II
Seminario de metodologías ágiles, bloque I
5/9 Curso JEE5, Soa, Web Services, ESB y XML
Virtualizacion
Guadalinex con colinux y Tecnología Nomachine NX
Exportador S I C A C V N 1
Sistema de colas Condor en CICA

4/9 Curso JEE5, Soa, Web Services, ESB y XML

  • 1. INTRODUCCIÓN A LOS WEB SERVICES » Prácticas
  • 2. Prácticas • Contenido − ¿Qué es Axis?. Axis Services Vs JEE5 Services • Creación de un web service calculadora con Axis (modo JWS) • Creación de un web service calculadora mediante herramientas JEE5 − Más sobre axis: Implementación de un servicio mediante un WSDD
  • 3. Prácticas • AXIS − Apache Axis es una implementación de SOAP − Con axis, es muy sencillo crear y usar un Web Service. Hasta que apareció JEE5, era una opción bastante buena para muchas organizaciones para construir sus Web Services. − La versión que usaremos es la más reciente, la 1.4 * • NO ES CIERTO: * la más reciente, es AXIS2; pero el desarrollo no es aún lo suficientemente maduro, y además se trata de una implementación de WS distinta. • AXIS Web Services VS JEE5 Web Services − Axis es un “añadido” innecesario para construir Web Services si nuestra plataforma es JEE5 − Sin embargo es muy útil conocerlo, ya que podemos implantarlo fácilmente en nuestros entornos J2EE (por ejemplo, con Tomcat). − Los Web Services en JEE5 se construyen con JAX-WS. En AXIS se construyen con JAX-RPC.
  • 4. Prácticas • Preparando el entorno (I) − Instalación del JRE − Instalación SDK+App. Server − Instalación de netbeans − Crear directorio c:temp y c:cursosoa − Cambiar variable entorno TMP a %SystemRoot%TEMP o al valor c:temp − Cambiar el valor de la variable de usuario TMP a c:temp • Sirve para evitar un bug de Application Server y glassfish − Copiar el script setenv.bat a c:windows − Añadir al path estos directorios: • App-server-install-dirbin • App-server-install-dirlibantbin
  • 5. Prácticas • Preparando el entorno (II) − Comprobar si tenemos instalado notepad2. Notepad2 es un editor sencillo con reconocimiento de sintaxis. − Comprobar si tenemos instalado console. Console es una ventana de comandos con un buffer mayor que el cmd de windows y con unas fuentes más atractivas. • Una de las mejores características que tiene es la de poder marcar texto mediante el botón de shift+click_izquierdo. El menú copy/paste es ahora contextual. • Tambien ocurre que si tenemos texto en el portapapeles, podemos pegarlo con click_derecho sobre la ventana. • Eliminaremos la transparencia comentando la línea transparency del archivo c:windowsconsole.xml (<!– transparency…. -->).
  • 6. Prácticas • Preparando el entorno (III) − Descargarmos de la máquina jcrubio.cica.es el archivo: • OPCIONAL-axis-bin-1_4.zip − Lo copiamos a c:temp y descomprimimos. − Entramos a la carpeta axis-1_4webappsaxisWEB-INF. − Editamos con notepad el archivo web.xml • Comprobamos que los saltos de carro no son correctamente interpretados. − Editamos con notepad2 web.xml − Eliminamos el comentario a la línea que nos permite habilitar el Admin Servlet. Salvamos − Vamos a axis-1_4webappsaxis − Ejecutamos jar –cvf axis.war *
  • 7. Prácticas • Preparando el entorno (IV) − Ejecutamos asadmin deploy axis.war − Si no tenenos arrancado el servidor, fallará. − Comprobaremos los domains instalados y en ejecución con el comando: • Asadmin list-domains − Arrancar/Detener el servicio • Asadmin start-domain domain1 (como sólo un dominio, es opcional) • Asadmin stop-domain domain1 − Arrancamos el servicio con el comando start-domain. − Volvemos a intentar asadmin deploy axis.war . • Usuario admin: admin • Password: curso.curso
  • 8. Prácticas • Preparando el entorno (V) − Comprobamos que se ha desplegado la aplicación con un navegador http://localhost:8080/axis − Ahora iniciamos la consola de administración (Programas, Sun Microsystems, Admin Console) − Nos logamos con admin/curso.curso − EN el panel de la izquierda, en Applications, pinchamos en web applications, y en el panel de la derecha, seleccionamos axis y pulsamos undeploy. − Logout − Comprobamos con el navegador que la aplicación ya no es accesible. − Con el servidor iniciado, abrimos un console y tomamos axis.war y lo copiamos al directorio: • App-server-install-dirdomainsdomain1autodeploy
  • 9. Prácticas • Preparando el entorno (VI) − Comprobamos que axis también se ha desplegado. − El autodeploy es por tanto también una forma rápida y cómo de desplegar aplicaciones en nuestro Application Server. − Por último… − Copiamos el archivo 03-librerias externas en netb-ide7- modules-ext.zip a un directorio temporal y extraemos su contenido. − Copiamos todas las librerías que aparezcan a: • Netbeans-install-dirSunnetbeans-5.5betaide7modulesext • ¡TODO LISTO!
  • 10. Prácticas Preparando el entorno en un sistema LINUX − Copiamos el archivo siguiente en nuestra máquina guadalinex: • axis-bin-1_4.zip − Una vez en /home/guadalinex, lo copiamos a /tmp y descomprimimos con unzip. − Entramos a la carpeta cd axis-1_4/webapps/axis/WEB-INF − Editamos con gvim –y el archivo web.xml − Eliminamos el comentario para habilitar el Admin Servlet. Salvamos − Vamos a axis-1_4/webapps/axis − Ejecutamos: cp WEB-INF/classes/SOAP*.class . − Ejecutamos jar –cvf axis.war * OJO con el PUNTO
  • 11. Prácticas • Preparando el entorno en un sistema LINUX (II) − Ejecutamos asadmin deploy axis.war − Si no tenenos arrancado el servidor, fallará. − Comprobaremos los domains instalados y en ejecución con el comando: • asadmin list-domains − Arrancar/Detener el servicio • asadmin start-domain domain1 (como sólo un dominio, es opcional) • asadmin stop-domain domain1 − Arrancamos el servicio con el comando start-domain. − Volvemos a intentar asadmin deploy axis.war . • Usuario admin: admin • Password: curso.curso
  • 12. Prácticas • Preparando el entorno en un sistema LINUX(III) − Comprobamos que se ha desplegado la aplicación con un navegador http://localhost:8080/axis − Ahora iniciamos la consola de administración (abrimos un navegador y tecleamos la URL: http://localhost:4848) − Nos logamos con admin/curso.curso − En el panel de la izquierda, en Applications, pinchamos en web applications, y en el panel de la derecha, comprobamos que se encuentra la aplicación axis. − Logout − Si con el servidor iniciado, hubiésemos tomado el archivo axis.war y lo hubiésemos copiamos al directorio: • App-server-install-dir/domains/domain1/autodeploy • También se habría desplegado y aparecería en la consola de administración.
  • 13. Prácticas • Preparando el entorno en un sistema LINUX(IV) − El autodeploy es por tanto también una forma rápida y cómo de desplegar aplicaciones en nuestro Application Server. − Copiamos el archivo lib-ext-netb-ide7-modules-ext.zip a nuestra máquina guadalinex, y lo copiamos desde /home/guadalinex a /tmp. Ahí, extraemos su contenido con unzip. − Copiamos todas las librerías CON sudo que aparezcan a: • /opt/netbean-5.5/ide7/modules/ext
  • 14. Creación de un web service calculadora con Axis (modo JWS)
  • 15. Prácticas • Una vez instalado AXIS, ya podemos también construir Web Services mediante él. • Otro camino para arrancar el servidor es mediante el PROGRAMAS->Sun->App.->Start Default Server, y luego arrancamos la Admin Console del Application Server. Nos autenticamos con admin/curso.curso • El path de despliegue de la aplicación axis.war será: • AppServer-install-dirdomainsdomain1applicationsj2ee-modulesaxis • Será el directorio donde crearemos los JWS.
  • 17. Prácticas • Ahora abrimos el archivo Calculadora.jws del directorio de prácticas. Debe contener algo como esto: /** * Servicio Web que realiza las operaciones Suma, * Resta, Multiplicación y División de dos números * @author JC */ public class Calculadora { public int suma(int x, int y) { return x + y; } public int resta(int x, int y) { return x-y; } public int multiplica(int x, int y) { return x * y; } public int divide(int x, int y) { return x / y; } }
  • 18. Prácticas • Cerramos el archivo, y con el server arrancado, y la aplicación axis desplegada, copiamos ese archivo al directorio: AppServer-install-dirdomainsdomain1applicationsj2ee-modulesaxis • Comprobamos ahora si ha generado un web service así: http://localhost:8080/axis/Calculadora.jws • Debemos obtener como respuesta esto:
  • 19. Prácticas • Una vez que sabemos que axis funciona correctamente, usaremos el Web Service Calculadora proporcionado por axis, construido sobre un archivo JWS. − Crearemos un proyecto de tipo “Web”. − Le daremos como nombre de proyecto 01CalculadoraJws − Una vez creado, en la zona de librerías, añadiremos los siguientes .jar de la carpeta ext: • axis.jar • jaxrpc.jar • commons-discovery-0.2.jar • commons-logging-1.0.4.jar • wsdl4j-1.5.1.jar
  • 21. Prácticas • Ahora crearemos un servlet, que llamaremos resultados. El código fuente de este servlet, lo podemos extraer del directorio de prácticas: base-resultados.txt. Arreglamos los errores que marque Netbeans y salvamos. • El index.jsp lo podemos extraer del directorio de prácticas; básicamente contiene un formulario que permite introducir dos argumentos para el cálculo que queramos hacer con la calculadora.
  • 22. Prácticas • Probamos el código con un Run de nuestro proyecto:
  • 23. Creación de un web service calculadora mediante herramientas JEE5
  • 24. Prácticas • Ahora vamos a crear un proyecto del mismo web service que hemos implementado en AXIS, pero con la tecnología JEE5. • Para ello, arrancamos netbeans, y creamos un nuevo proyecto. En el asistente, elegimos la opción de un proyecto tipo Web. • Elegimos el nombre: 01CalculadoraJEE5
  • 25. Prácticas • Ahora creamos un web service mediante los menús, pulsando botón derecho en el proyecto, New File, Web Services, Web Service. • Lo llamaremos “calculadora”, y en el nombre del paquete le daremos calculadoraJEE5. • El asistente creará un archivo .java en la carpeta “Web Services”. Editamos el código de ejemplo que nos ha dejado Netbeans, y lo rellenamos con el archivo base-Calculadora.txt. Arreglar lo que netbeans marque con flags de error.
  • 26. Prácticas • Este proyecto tiene un index.jsp cuyo código dejaremos así: <% String URLRedireccion = "/01CalculadoraJEE5/calculadoraService?WSDL"; response.sendRedirect(URLRedireccion); %> • Hacemos un Clean and Build y un RUN del proyecto. • El navegador se dirigirá hacia: • http://localhost:8080/01CalculadoraJEE5/calculadoraService?WSDL • Ahora que ya tenemos nuestro Web Service Calculadora, debemos crear un cliente para probar el funcionamiento. • Observamos que el web service JEE5 lleva el sufijo “Service”.
  • 27. Prácticas • Creamos un nuevo proyecto, de tipo Web, con el nombre 01CalculadoraJEE5Client . • El index.jsp del proyecto, lo dejamos idéntico al index.jsp del proyecto 01CalculadoraJws. • Creamos un Servlet llamado resultados, y en el nombre del paquete, establecemos calculadoraJEE5Client . • Luego, pinchamos en nuestro proyecto, pulsamos botón derecho del ratón, New File, y en el asistente, elegimos Web Services, y en el panel derecho, elegimos Web Service Client.
  • 28. Prácticas • En la ventana siguiente, podemos elegir entre buscar el Web Service entre uno de nuestros proyectos o bien a través de la opción WSDL URL. • Si elegimos Project, basta navegar hacia 01CalculadoraJEE5 y seleccionar nuestro web service. Si elegimos WSDL URL, debemos especificar esta URL: • http://localhost:8080/01CalculadoraJEE5/calculadoraService?WSDL • Como nombre de paquete, elegimos calculadorajee5client • Una vez que ya tenemos el web service referenciado en nuestro proyecto, podemos usar una característica de Netbeans de escritura automática de código.
  • 29. Práctica • Seleccionamos nuestro proyecto y creamos un nuevo Servlet, y lo llamaremos “resultados”; también en el paquete calculadorajee5client. • En la ventana de código, tenemos que irnos al método processRequest . En una línea vacía de la ventana de Editor, dentro de este método, pulsamos botón derecho del ratón y elegimos Web Service Client Resources, y dentro de este menú, Call Web Service Operation. • Seleccionamos el Web Service que tenemos referenciado y elegimos la operación suma. • Las sentencias para capturar los parámetros del formulario que usará el Web Service en nuestras operaciones son: Integer arg0 = Integer.parseInt(request.getParameter("arg0")); Integer arg1 = Integer.parseInt(request.getParameter("arg1"));
  • 30. Práctica • Si dejamos el código tal como lo presenta el asistente, podemos obtener al final este aspecto en nuestro proyecto, una vez desplegado y ejecutándose:
  • 31. Más sobre axis: Implementación de un servicio mediante un WSDD
  • 32. Prácticas • Lo primero que tenemos que hacer es asegurarnos de que tenemos disponible el archivo setenv.bat en una ubicación dentro del PATH. • Luego abrimos un “console”, y nos dirigimos hacia: AppServer-Install-dirdomainsdomain1applicationsj2ee-modulesaxis • En este path, ejecutamos: copy Calculadora.jws WEB-INFclassesCalculadora.java • Acto seguido, ejecutamos cd WEB-INFclasses • Y por último “javac Calculadora.java”
  • 33. Prácticas • El fichero batch “setenv” crea unas variables de entorno para que podamos usar el AdminService de axis, que sirve para dar de alta Web Services compilados y que aparecen en la lista inicial list junto con sus métodos. • Para poder usar el AdminService, es necesario crear en este mismo directorio un fichero Calculadora.wsdd • El fichero Calculadora.wsdd puede copiarse del directorio de prácticas.
  • 34. Prácticas • Calculadora.wsdd: <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <!--Definimos el servicio Web a activar: Nombre y tipo de Servicio Web. RPC: Llamadas a procedimientos remotos con ejecucion sincrona --> <service name="CalculadoraWS" provider="java:RPC"> <!-- Nombre de la clase que implementa los metodos expuestos --> <parameter name="className" value="Calculadora"/> <!-- Expone todos los metodos como visibles desde el exterior --> <parameter name="allowedMethods" value="*"/> </service> </deployment>
  • 35. WEB SERVICES • También creamos un archivo que se llame “undeploy- calculadora-ws.wsdd”. Servirá si tenemos que dar de baja el web service: <undeployment xmlns="http://xml.apache.org/axis/wsdd/"> <service name="CalculadoraWS"/> </undeployment>
  • 36. Prácticas • Es muy importante que en fichero wsdd no exista ningún carácter acentuado. • Si existe algún carácter acentuado incluso en la zona de comentarios, el AdminService generará un error. Ahora, para usar el AdminService: − Iniciamos el servidor donde esté axis − setenv − java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService Calculadora.wsdd
  • 37. Prácticas • Captura de pantalla de la ejecución:
  • 38. Prácticas • Si todo ha ido bien, podremos ver algo como esto:
  • 39. Prácticas • Llegados a este punto, el fichero Calculadora.java podría eliminarse de ese directorio, si quisiéramos. • Es importante destacar que AdminService ha añadido la terminación WS al web service, porque así lo hemos especificado en el WSDD. Podríamos haber añadido el sufijo “Service”, como en los WS de JEE5. Ahora para acceder al wsdl la URL es: − http://localhost:8080/axis/services/CalculadoraWS?wsdl • Los web services JEE5 tienen una URL terminada en service − http://localhost:8080/01CalculadoraJEE5/calculadoraService?WSDL
  • 40. Prácticas • ¿Podríamos haber creado el WS sin tener el servidor de aplicaciones levantado, o el admin servlet habilitado? • Sí; de este modo: − setenv − java org.apache.axis.transport.http.SimpleAxisServer -p 8080 − Java org.apache.axis.client.AdminClient -p 8080 Calculadora.wsdd .. .. .. .. .. .. .. .. .. Processing file Calculadora.wsdd <Admin>Done processing</Admin> • Y ya tendríamos el Web Service Calculadora Disponible.
  • 41. Prácticas • Para detener el SimpleAxisServer, ejecutamos: − java org.apache.axis.client.AdminClient -p 8080 quit − <Admin> quitting.</Admin> • Obtendré del sistema lo siguiente: − Administration service requested to quit, quitting. − SimpleAxisServer quitting. − SimpleAxisServer quitting.
  • 42. EJERCICIO: Utilizar WSDL2Java para crear un clientes standalone
  • 43. PRÁCTICAS • Abrimos un “console” • Creamos una carpeta en el temporal: − Mkdir c:tempcarpeta − Cd c:tempcarpeta • Levantamos el servidor • Por últimos, una vez el servidor arriba, ejecutamos lo siguiente: − Setenv − wget http://localhost:8080/axis/services/CalculadoraWS?wsdl -O CalculadoraWS.wsdl • NOTA: disponemos de wget gracias a unxutils.
  • 44. Prácticas • Ahora ejecutamos: wget http://localhost:8080/axis/services/CalculadoraWS?wsdl -O CalculadoraWS.wsdl • Eso nos descargará el archivo CalculadoraWS.wsdl • Con él, usaremos una herramienta que creará los stubs o plantillas java para usar el web service. • Usándolas, nos quedará un código mucho más legible.
  • 45. Prácticas • Generamos la implementación de los stubs del Web Service, ejecutando: java org.apache.axis.wsdl.WSDL2Java CalculadoraWS.wsdl • Comprobamos que debe existir ahora esta estructura: ls ./localhost/axis/services/CalculadoraWS/Calculadora* ./localhost/axis/services/CalculadoraWS/Calculadora.java ./localhost/axis/services/CalculadoraWS/CalculadoraService.java ./localhost/axis/services/CalculadoraWS/CalculadoraServiceLocator.java ./localhost/axis/services/CalculadoraWS/CalculadoraWSSoapBindingStub.java • Ya tenemos lo necesario para usarlo con un cliente.
  • 46. Prácticas • Código del cliente más legible (“CalculadoraClient2.java”) que podemos crear (seguimos en el directorio c:tempcarpeta): import localhost.axis.services.CalculadoraWS.*; /** * Prueba el Web Service * @author JC */ public class CalculadoraClient2 { public static void main(String[] args) { localhost.axis.services.CalculadoraWS.CalculadoraServiceLocator locator; localhost.axis.services.CalculadoraWS.Calculadora calc; try { locator = new CalculadoraServiceLocator(); calc = locator.getCalculadoraWS(); System.out.println(calc.suma(6, 2)); System.out.println(calc.resta(3, 2)); System.out.println(calc.multiplica(9, 2)); System.out.println(calc.divide(100, 4)); } catch (Exception ex){ System.out.println(ex); } } }
  • 47. Prácticas • Compilamos el cliente con el • Si movemos el binario a comando: otra ubicación, fallará al javac CalculadoraClient2.java no encontrar la vía que • Lo ejecutamos con: empieza por localhost. java CalculadoraClient2 • Tendríamos que arrastrar • Obtenemos: la carpeta localhost junto 8 con el 1 CalculadoraClient2.class 18 25 • Vamos a programarlo sin usar los stubs que crea la utilidad WSDL2Java.
  • 48. Prácticas • Código de CalculadoraClient3.java /* import org.apache.axis.client.Call; import org.apache.axis.client.Service; => Esta aplicación es mucho import org.apache.axis.encoding.XMLType; import javax.xml.rpc.ParameterMode; más engorrosa de usar. /** * Prueba el Web Service 2 * @author JC */ public class CalculadoraClient3 { public static void main(String [] args) throws Exception { String endpoint = "http://localhost:8080/axis/services/CalculadoraWS"; Integer op1 = new Integer(100); Integer op2 = new Integer(200); Service service = new Service(); Call call = (Call) service.createCall(); // Establecemos la dirección en la que está activado el WebService call.setTargetEndpointAddress( new java.net.URL(endpoint) ); // Establecemos el nombre del método a invocar call.setOperationName( "multiplica" ); // Establecemos los parámetros que necesita el método // Observe que se deben especificar correctamente tanto el nómbre // como el tipo de datos.. // esta información se puede obtener viendo el WSDL del servicio Web call.addParameter( "in0", XMLType.XSD_INT, ParameterMode.IN ); call.addParameter( "in1", XMLType.XSD_INT, ParameterMode.IN ); call.setReturnType( XMLType.XSD_INT ); Integer result = (Integer) call.invoke( new Object [] { op1, op2 }); System.out.println("El resultado de la multiplicacion es: " + result); } }
  • 49. EJERCICIO: Crear un proyecto netbeans con el código fuente de CalculadoraClient2
  • 50. Prácticas • Se pide: − Crear un proyecto 01CalculadoraClient2, que realice la misma función que CalculadoraClient2. • NOTAS − Tenemos que tener en cuenta que WSDL2Java genera un paquete con fuentes que necesitamos. − Este proyecto, necesita las siguientes librerías:
  • 51. EJERCICIO: Crear aplicaciones web que sean clientes de nuestros Web Services
  • 52. Prácticas • Como ejercicio, debemos crear un cliente de web service. CalculadoraWS. Tendremos de nuevo que añadir a mano las librerías externas como en el proyecto cliente JWS. • Creamos un proyecto llamado: 01CalculadoraWsdd, de tipo Web. • Creamos un servlet resultados, y en el nombre del paquete, le ponemos: calculadoraWsdd • Copiamos todo el trozo de código del servlet del proyecto 01CalculadoraJws, sin copiar la línea “package”. • Cambiamos la línea: miLlamada.setTargetEndpointAddress(new URL("http://localhost:8080/axis/Calculadora.jws")); • Por la línea: miLlamada.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/CalculadoraWS"));
  • 53. Prácticas • Lo ejecutamos, y debemos ver algo como esto:
  • 56. Práctica repaso 1 − Construir un web service que tome dos argumentos; sean A y B. − El WS debe devolver el resultado de la siguiente operación: • A*B+2*(A+B) -1 − Lo construiremos: • Mediante un JWS, con su cliente • Mediante una clase Java, con su WSDD y su cliente • Mediante JEE5, con un WS (@webservice) y su cliente. − PERO: nuestros clientes atacarán al web service del compañero de al lado. Los nombres de ficheros/proyectos y métodos: • El método que ofrecerá el cálculo A*B+2*(A+B) -1 se llamará calculo. • El index.jsp con el formulario que captura los dos argumentos será el habitual. • El JWS que implemente el WS se llamará: pfinal1.jws • El PROYECTO que actúa como cliente de pfinal.jws se llamará pfinal1JwsClient • El PROYECTO que actúa como cliente del servicio implementado con WSDD se llamará pfinal1WSDDClient. El WSDD llevará como service name pfinalWS1 • El PROYECTO JEE5 que implemente el Web Service se llamará pfinal1JEE5WService, el servicio se llamará pfinal1 • El PROYECTO cliente del Web Service se llamará pfinal1JEE5Client. − OJO CON LOS SUFIJOS EN EL DESPLIEGUE DE SERVICIOS.
  • 58. Práctica repaso 2 • Construiremos ahora dos web services: − Uno llamado pfinal2a, que realice la operación A*3+B*4 − Uno llamado pfinal2b, que realice la operación A+3+B-2 − Los construiremos de tipo AXIS/WSDD y JEE5 − Los WSDD’s llevarán como service name pfinal2aWS y pfinal2bWS − El PROYECTO JEE5 que implemente el Web Service se llamará pfinal2ajee5 y pfinal2bjee5 , los servicios se llamarán pfinal2a y pfinal2b • Y ADEMÁS: − Los clientes, harán lo siguiente: • Harán la llamada a TODOS los web services de todos los alumnos, y sumarán el resultado que produzcan cada uno de ellos. • Construiremos los clientes tanto para pfinal2a como para pfinal2b
  • 59. EJERCICIO: Aprendemos a usar la herramienta “Web Services Explorer” que viene incorporada en Eclipse WTP
  • 60. WEB SERVICES • En nuestra máquina linux, tenemos un proyecto funcionando con Web Services, pero nuestro IDE es capaz de hacer más cosas. Algunas de ellas muy útiles en cuanto a depuración: Web Services Explorer • Dentro de la carpeta src/WEB-INF, creamos una nueva carpeta que se llame “wsdl”. La vía completa será pues: src/WEB-INF/wsdl • Seleccionamos esa carpeta, y pulsamos “File->Import->File System”
  • 61. WEB SERVICES Seleccionamos el WSDL de nuestra calculadora:
  • 62. WEB SERVICES • Si todo ha ido correctamente, debemos tener en el Package Explorer una imagen como la de la figura. • Si hacemos doble click sobre el nombre del archivo que hemos importado, se abrirá una vista en diseño muy útil y clarificadora.
  • 64. WEB SERVICES • Para lo siguiente que vamos a hacer, necesitamos arrancar JBOSS (por ejemplo, desde Eclipse, mediante la configuración de debugging que hemos creado). • Ahora nos aseguramos de seleccionar CalculadoraWS.wsdl, y pulsamos: click-dcho->Web Services->Test with Web Services Explorer • Se abrirá una ventana de navegador con una aplicación web como la de la figura siguiente.
  • 65. WEB SERVICES • ¿Cómo puedo buscar en un repositorio UDDI?
  • 67. WEB SERVICES • ¿Y los repositorios UDDI para publicar o buscar?
  • 68. FIN