Lo que no se sabe expresar, es que no se sabe.
Friedrich Engels

Web Services - Primeros pasos con Eclipse - Generar Servicio Web

Herramientas necesarias

  • JDK. En esta demo utilizaré la 1.5
  • IDE Desarrollo. En esta demo utilizaré el Eclipse del MEC (Profiles > Public Profiles > Web (con 'W' mayúscula) > Eclipse+J2EE+WebTools[MEC]) de las descargas de yoxos. Este perfil ya contiene las herramientas necesarias para trabajar con los servicios web. La distribución "europa" del eclipse también nos vale.
  • Servidor de aplicaciones. En esta demo utilizaré Tomcat 5.5
  • Librerías para la aplicación web.
    • axis.jar
    • commons-discovery.jar
    • jaxrpc.jar
    • saaj.jar
    • wsdl4j.jar

Creación de los objetos de negocio

Los servicios web son en resumidas cuentas objetos de negocio reutilizables y compartidos.

Por tanto, nos creamos nuestro nuevo proyecto web dinámico, holamundoWS.

Lo primero que debemos crear es un interfaz para el servicio web con los métodos de negocio (es.lycka.holamundoWS.webservices.HolaMundo) y una clase que implemente dicho interfaz (es.lycka.holamundoWS.webservices.impl.HolaMundoImpl). En el ejemplo tendremos un método de negocio, getSaludoLycka.

El código para el interfaz, HolaMundo es :

package es.lycka.holamundoWS.webservices;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface HolaMundo extends Remote {

      public String getSaludoLycka (String nombre) throws RemoteException;

} 

El código para la implementación, HolaMundoImpl es :

package es.lycka.holamundoWS.webservices.impl;

import java.rmi.RemoteException;

import es.lycka.holamundoWS.webservices.HolaMundo;

public class HolaMundoImpl implements HolaMundo {

      public String getSaludoLycka(String nombre) throws RemoteException {

            return "Lycka te saluda, " + nombre + ".";

      }

} 

Generación del Contrato del Servicio (fichero wsdl) y Publicación del servicio

Con los plugins del Eclipse resulta muy simple.

Proyecto holamundoWSSobre la interfaz del servicio, HolaMundo, y seleccionamos "Pulsamos Botón Derecho del ratón > Web Services > Generate Web Services". Introducimos la ruta de la implementación de la interfaz (Service Implementation). Se nos da la opción qué queremos hacer con el servicio (develop, assamble, deploy, install, start, test) y con el cliente; de momento elegiremos iniciar el servicio (start) y no generar el cliente.

Pulsamos "Next".

En esta pantalla podemos seleccionar los métodos que publicaremos en el servicio web, y el nombre del fichero wsdl. Por comodidad lo renombraré a HolaMundo.wsdl.

Se nos genera, entre otros ficheros, el descriptor del contrato de servicio (Web Content > wsdl > HolaMundo.wsdl)

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions targetNamespace="http://impl.webservices.holamundoWS.lycka.es" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://impl.webservices.holamundoWS.lycka.es" xmlns:intf="http://impl.webservices.holamundoWS.lycka.es" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!–WSDL created by Apache Axis version: 1.4

Built on Apr 22, 2006 (06:55:48 PDT)–>

 <wsdl:types>

  <schema elementFormDefault="qualified" targetNamespace="http://impl.webservices.holamundoWS.lycka.es" xmlns="http://www.w3.org/2001/XMLSchema">

   <element name="getSaludoLycka">

    <complexType>

     <sequence>

      <element name="nombre" type="xsd:string"/>

     </sequence>

    </complexType>

   </element>

   <element name="getSaludoLyckaResponse">

    <complexType>

     <sequence>

      <element name="getSaludoLyckaReturn" type="xsd:string"/>

     </sequence>

    </complexType>

   </element>

  </schema>

 </wsdl:types>

   <wsdl:message name="getSaludoLyckaResponse">

      <wsdl:part element="impl:getSaludoLyckaResponse" name="parameters"/>

   </wsdl:message>

   <wsdl:message name="getSaludoLyckaRequest">

      <wsdl:part element="impl:getSaludoLycka" name="parameters"/>

   </wsdl:message>

   <wsdl:portType name="HolaMundoImpl">

      <wsdl:operation name="getSaludoLycka">

         <wsdl:input message="impl:getSaludoLyckaRequest" name="getSaludoLyckaRequest"/>

         <wsdl:output message="impl:getSaludoLyckaResponse" name="getSaludoLyckaResponse"/>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="HolaMundoImplSoapBinding" type="impl:HolaMundoImpl">

      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getSaludoLycka">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="getSaludoLyckaRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="getSaludoLyckaResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="HolaMundoImplService">

      <wsdl:port binding="impl:HolaMundoImplSoapBinding" name="HolaMundoImpl">

         <wsdlsoap:address location="http://localhost:8080/holamundoWS/services/HolaMundoImpl"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions> 

Testear el servicio web

Comprobemos que vamos bien, es decir, que el servicio se ha generado correctamente y está desplegado y disponible en nuestros servidor de aplicaciones. Nos situamos sobre el fichero descriptor del contrato (HolaMundo.wsdl) y seleccionamos "Botón Derecho > Web Services > Test with Web Services Explorer". 

Explorador de Servicios WebEn la pantalla que se nos abre, Explorador de Servicios Web, podemos navegar entre los distintos servicios publicados y sus métodos. Para probar nuestro método, getSaludoLycka, pulsamos sobre su enlace y le introducimos un nombre. Yo le introduciré "Jero". Y pulsamos en "Go".

En la ventana de status podemos ver los mensajes SOAP que nos ha generado la acción, tanto el que se enviaría del cliente al servidor como el resultado que envía el servidor al cliente. Y efectivamente en este último viaja el saludo que nos devuelve Lycka, "Lycka te saluda, Jero."

Dónde está desplegado el servicio ?

Un detalle importante que no he comentado hasta ahora es cómo sabrá el cliente dónde está desplegado el servicio ?

El contrato del servicio lo especifica (por defecto pone localhost:8080). Para nuestras pruebas funcionará si el cliente se ejecuta en la misma máquina que el servidor, pero de no ser así deberemos sustituir localhost:8080 por el nombre de la máquina servidor y el puerto por el que atienda.

<wsdlsoap:address location="http://localhost:8080/holamundoWS/services/HolaMundoImpl"/>

Ver también

2 Comentarios hasta el momento »

  1. Lycka Bonita » Web Services - Primeros pasos con Eclipse - Generar Cliente Servicio Web dijo

    2 de July del 2008 a las 9:43 am

    [...] hemos publicado nuestro servicio web en un servidor. Ahora queremos generar un cliente que consuma este [...]

  2. Lycka Bonita » Web Services - Integrar los clientes en Spring dijo

    3 de July del 2008 a las 7:05 am

    [...] sabemos cómo publicar un servicio web y cómo construir un cliente que consuma dicho servicio partiendo del fichero descriptor del [...]

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario: