Está en la página 1de 8

PRCTICA 8

Servicios web con SOAP y Eclipse

E
1. 2. 3.

l objetivo de esta prctica es invocar e implementar servicios web en Java desde el entorno Eclipse. La prctica est estructurada en tres partes segn se esquematiza en la figura 1 (pg. 92):

Invocacin de un servicio web disponible en Internet. Realizacin de un nuevo servicio web. Invocacin de un servicio web desde otro servicio web.

La primera parte consiste en descubrir la interfaz e invocar un servicio web ya existente en Internet (al que nos referiremos como servicio currency, de una manera genrica) que proporciona el coeficiente de cambio entre cualesquiera dos monedas. La segunda parte consiste en realizar un nuevo servicio web, denominado eurocalculadora, que calcula el cambio de una cantidad de dinero entre el euro y cualquier otra moneda. En una primera versin se aplicar un coeficiente de cambio fijo e igual a 1. Esto proporcionar resultados incorrectos, pero permitir realizar el desarrollo completo de un servicio y comprobar su funcionamiento. La tercera parte de la prctica consiste en modificar el servicio web desarrollado en la segunda parte para que obtenga el coeficiente de cambio de servicio web descubierto en la primera parte de la prctica. Se trata de convertir un servicio en un cliente de otro servicio.

DYA

91

Invocacin de un servicio web disponible en Internet

FIGURA 1.

Estructura del servicio web eurocal

8.1.- Invocacin de un servicio web disponible en Internet


Se comenzar por crear un proyecto prj-soap que abarcar las tres partes de la prctica. Este proyecto debe ser de tipo Web -> Dynamic Web project. Se crear tambin un paquete eurocal, donde se ubicar todo el cdigo que desarrolle. Para descubrir un servicio web de cambio de moneda debe seguir los pasos que a continuacin se indican:
1.

2. 3.

4.

5.

Importar el servicio: Import -> Web Services -> Web Service. Deber especificar que debe lanzarse el Web Services Explorer que deber examinar el registro UDDI de XMethods Registry. Seleccionar el servicio denominado Currency Convertor. Importar el fichero WSDL al workbench del proyecto prj-soap con el nombre CurrencyConvertor.wsdl, seleccionando la opcin que se indica en la figura 2 (pg. 93). Visualizar el fichero CurrencyConvertor.wsdl y observar la interfaz de este proyecto. La visualizacin grfica de esta interfaz se muestra en la figura 3 (pg. 93) y puede observarse que dispone de interfaz HTTP e interfaz SOAP. Probar la interfaz SOAP de este servicio utilizando el Web Services Explorer. Para ello deber seleccionar en el men contextual de este fichero Web Services -> Test with Web Services Explorer. Una vez seleccionada la interfaz SOAP aparecer un formulario como el de la figura 4 (pg. 94).

92

Servicios web con SOAP y Eclipse

Invocacin de un servicio web disponible en Internet

FIGURA 2.

El servicio Currency Convertor del registro de Xmethods.

FIGURA 3.

Interfaz del servicio Currency Convertor.

En la tercera parte de la prctica necesitar invocar este servicio desde un programa Java. Para ello, necesitar crear unos stubs a partir del fichero WSDL que permitan realizar la invocacin remota utilizando el protocolo SOAP. Para la creacin de estos stubs se requiere:

DYA

93

Creacin de un Servicio web

FIGURA 4.

Prueba del servicio Currency Convertor con el Web Services Explorer

1.

Seleccionar el fichero CurrencyConvertor.wsdl y en el men contextual utilizar la opcin Web Services -> Generate Client. Al final del proceso debe aparecer en el proyecto un paquete NET.webserviceX.www que debe contener los stubs generados.

8.2.- Creacin de un Servicio web


La creacin de un servicio web en Eclipse puede realizarse siguiendo dos metodologas: Bottom up: partiendo de un objeto Java (Java bean) Top down: partiendo de una especificacin en WSDL. En esta prctica se utilizara el desarrollo top down en el que se partir del fichero de especificacin del servicio en WSDL. Consta de los siguientes pasos:
1.

2.

3.

4.

Aadir al paquete eurocal un fichero WSDL denominado eurocal.wsdl: New-> Other -> Web Services -> WSDL. Utilizar la interfaz grfica de este fichero para especificar una interfaz del servicio como la de la figura 5 (pg. 95). Generar los bindings o vnculos del servicio con las url donde se presta el servicio: Generate Binding Context. Generar el servicio web. Para ello se debe seleccionar el fichero con la interfaz WSDL (eurocal.wsdl) y en el men contextual utilizar la opcin Web Services -> Generate java bean skeleton. Al final del proceso debe aparecer en el proyecto un paquete org.example.www.eurocal

94

Servicios web con SOAP y Eclipse

Invocacin de servicios web desde programas en Java

Generate Binding Context

FIGURA 5.

Interfaz WSDl del servicio eurocal

que debe contener las plantillas del servicio y el esqueleto para su ejecucin como servidor remoto con el protocolo SOAP. Al final de la generacin del servicio se requerir arrancar el servidor Jakarta Tomcat para ejecutar el servicio. Si se decide no arrancarlo en este momento, tambin puede ejecutarse un servicio web sobre este servidor utilizando la opcin Run as -> Run on server. Aparece una ventana en la parte inferior del IDE denominada Server en la que se indica los servicios que est ejecutando el servidor. Se puede seleccionar alguno de estos servicios y borrarlo. La implementacin del servicio se realiza en el fichero EurocalSOAPImpl.java del paquete org.example.www.eurocal. Cada vez que se realiza una modificacin en este fichero y se salva, se regenera el servicio web y se rearranca el servidor Jakarta Tomcat para actualizar dicho servicio. Esta fase de la prctica terminar con la prueba de dicho servicio. Ello requiere:
5.

Seleccionar en el men contextual del fichero Web_Content/wsdl/eurocalSOAP.wsdl la opcin Web Services -> Test with Web Services Explorer.

8.3.- Invocacin de servicios web desde programas en Java


En esta parte de la practica se indica como el servicio web eurocal puede invocar el servicio web currency (actualmente se utiliza Currency Convertor) para obtener el coeficiente de cambio entre el euro y cualquier otra moneda. La tcnica es semejante a los dems mecanismos de invocacin remota vistos con anterioridad (Java-RMI y CORBA): a partir del fichero de especificacin del servicio en WSDL se generan los stubs necesarios par canalizar la invocacin remota sobre el protocolo SOAP.

DYA

95

Ficheros de apoyo

Este paso ya se realiz en la primera parte de esta prctica (seleccionar el fichero CurrencyConvertor.wsdl y en el men contextual utilizar la opcin Web Services -> Generate Client). El resultado es un paquete NET.webserviceX.www con los stubs generados. Los ficheros mas significativos son: CurrencyConvertorSoap.java: es el stub de la clase correspondiente al servicio. Currency.java: es una clase que enumera las diferentes monedas. CurrencyConvertorLocator.java: clase que sirve para obtener ubicar y obtener una referencia al stub del servicio. Solo resta realizar la invocacin remota desde el servicio eurocal. Para ello debe modificar el fichero EurocalSOAPImpl.java del paquete org.example.www.eurocal tal como se indica a continuacin.

8.4.- Ficheros de apoyo


8.4.1.- Fichero de implementacin del servicio SOAP en Java
Fichero EurocalSOAPImpl.java
package org.example.www.eurocal;

import javax.xml.rpc.ServiceException;
import NET.webserviceX.www.Currency; import NET.webserviceX.www.CurrencyConvertorLocator; import NET.webserviceX.www.CurrencyConvertorSoap; public class EurocalSOAPImpl implements org.example.www.eurocal.Eurocal_PortType{

CurrencyConvertorLocator service; CurrencyConvertorSoap stub; public EurocalSOAPImpl() { service = new CurrencyConvertorLocator(); try { stub = service.getCurrencyConvertorSoap(); } catch (ServiceException e) { e.printStackTrace(); } }

96

Servicios web con SOAP y Eclipse

Ficheros de apoyo

public double convertirAEuros(java.lang.String codi, double moneda) throws java.rmi.RemoteException {

double rate = stub.conversionRate(Currency.fromString(codi), Currency.EUR); return (moneda*rate);


} public double convertirEuros(java.lang.String codi, double euros) throws java.rmi.RemoteException {

double rate = stub.conversionRate(Currency.EUR, Currency.fromString(codi)); return (euros*rate);


} }

DYA

97

Ficheros de apoyo

98

Servicios web con SOAP y Eclipse

También podría gustarte