Servicios web (2): Desplegando un servicio JWS

Una vez que ya tenemos Tomcat y Axis instalados y funcionando, el siguiente paso es desplegar un servicio web. Existen dos maneras de hacerlo, de las cuales yo voy a abordar la primera en este post. También deberemos escribir un cliente. Para ello, existen tres posibilidades, yo sólo voy a tratar con dos de ellas.

La primera manera de despleguar un servicio web, JWS, es muy sencilla y sólo está indicada para hacer pruebas o para empezar. Consiste en esribir una clase en con una serie de métodos, de tal manera que esta se convierta por si sóla en un servicio web, sin tener que hacer nada más. La conversión, creo entender, se hace al vuelo, por eso no está recomendado usarlo: incrementaría mucho la carga del servidor y además no podemos modificar el fichero WSDL.

Escribiendo el servidor

En mi caso he escrito el programa más sencillo del mundo, el clasico Hola, aunque he quitado el Mundo porque me parece muy pretencioso ;-). El código fuente es como se ve a continuación:


/*
 Hola. - El ejemplo  mas simple
 */

public class Hola {
  public String decirHola(String persona) {
      return "Hola " + persona;
  }
}

Desplegando el servicio web

Para desplegar este servicio web, basta con copiar el fichero al directorio webapps de , pero cambiando la extensión a jws. Esto es:

cp Hola. $CATALINA_HOME/webapps//Hola.jws

Una vez hecho esto, podemos visitar nuestro servicio web. Evidentemente, no es una página web, pero nos responde avisándonos de que es un servicio web, y nos permite ver el WSDL asociado, lo que para hacer pruebas o aprender es bastante útil.

Escribiendo un cliente

Existen varios métodos para escribir un cliente, como ya dije al principio. Voy a usar el que mejor corresponde al método para desplegar el servicio: el más sencillo. Éste método consiste en crear una DDI o interfaz de invocación dinámica. Su ventaja es la sencillez, pero tiene como desventaja el que no obtendremos una referencia a un objeto remoto, sino a un método, lo cual es menos cómodo.
Primero deberemos importar una serie de librerías de y una de :

import org.apache..client.Call;
import org.apache..client.Service;
import org.apache..encoding.XMLType;
import javax.xml.rpc.ParameterMode;

A continuación, declararemos una clase de las que se ejecutan, es decir, con un método estático main. Lo primero que hay que hacer es tener claro cuál es nuestro endpoint, que es la dirección del servicio web. En mi ejemplo:

public class HolaCliente {
   public static void main(String [] args) throws Exception {

       String endpoint = "http://localhost:8080//Hola.jws";

A continuación, declararemos un servicio y una llamada para el mismo. A esta llamada le indicaremos cual es su endpoint, la operación a realizar y los parámetros de la misma, así como el tipo de retorno. Por último la invocaremos:


       Service  service = new Service();
       Call call = (Call)service.createCall();

       call.setTargetEndpointAddress(new .net.URL(endpoint));
       call.setOperationName("decirHola");
       call.addParameter("persona", XMLType.XSD_STRING,
                         ParameterMode.IN);
       call.setReturnType(XMLType.XSD_STRING);

       String resultado = (String)call.invoke(new Object [] { " cliente"});

       System.out.println(resultado);
   }
}

Compilando y ejecutando el cliente

Para compilar nuestro cliente, debemos tener en cuenta el classpath del compilador de , ya que debe incluir el de . Puedes hacerlo usando variables de entorno, aunque yo prefiero pasárselo como un argumento de la llamada al compilador, tal que así:

$ javac -classpath $AXISCLASSPATH HolaCliente.

Si todo ha ido bien, ya podemos lanzar nuestro cliente. Hay que tener en cuenta ahora que en el classpath debe figurar el directorio donde está el resultado de la compilación anterior. En mi caso, hago:

$ -cp .:$AXISCLASSPATH HolaCliente

Lo que hace que obtenga el siguiente resultado:
log4j:WARN No appenders could be found for logger (org.apache..i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
Hola cliente

Que, a pesar de los warnings que sigo ignorando, da un resultado safistactorio :-). Los ficheros con el código fuente son Hola.java y HolaCliente.java

Precede: Servicios web (1): Instalando Tomcat y Axis
Continua: Servicios web (3): Desplegando un servicio WDSS

Technorati Tags:

2 Respuestas a “Servicios web (2): Desplegando un servicio JWS”


  1. 1 axl smit

    hola, disculpa mi ignorancia, quisiera saber si sobre lo de instalando tomcat y axis y desplegando un servicio web jws, los pasos q haces son independientes del sistema operativo o es para linux los pasos q haces

  2. 2 Deigote

    Holatodos los pasos los he probado con Linux, sin embargo deberían ser válidos para cualquier plataforma, excepto la parte de las variables de entorno, que yo he especificado cómo hacerlo en Linux con un shell tcsh. En Windows tendrías que añadir las variables en algún otro sitio (creo que con el botón derecho sobre Mi PC había alguna opción).

  1. 1 Servicios web (1): Instalando Tomcat y Axis | El blog de Deigote
    Dirección Pingback a 4 Sep 2008 @ 5:29 pm

Añade un Comentario

XHTML: Usted puede utilizar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>