1. Vamos a ver cómo implementar un cliente para el servicio
HolaMundo paso a paso. Vamos a crear un stub estático
para nuestro cliente. El cliente se puede encontrar implementado en el directorio
HolaMundoCliente
de las plantillas de la sesión. A continuación
se muestran los pasos que serían necesarios para la creación del
cliente:
config.xml
en el que indicaremos
la dirección anterior. Como ya tenemos implementado en el ejemplo este
fichero, abrirlo y consultar su contenido.client
de ant.import es.ua.j2ee.sw.hola.*;
public class Cliente {
public static void main(String[] args) { if (args.length != 1) {
System.err.println("Uso: ant run -Dnombre=<nombre>");
System.exit(-1);
}
try { HolaMundoIF hola = creaProxy(); System.out.println(hola.saluda(args[0])); } catch (Exception e) { e.printStackTrace(); } }
private static HolaMundoIF creaProxy() { return (HolaMundoIF)(new HolaMundo_Impl().getHolaMundoIFPort()); } }
La función creaProxy() es la que se encarga de obtener el stub para acceder al servicio. El resto del código lo único que hace es acceder al servicio mediante el stub, de igual forma que si estuviese accediendo a un método de una clase Java de forma ordinaria
compile
de ant.run
de ant.2. Realizar un cliente para el servicio de conversión euro-ptas. Seguir lo mismos pasos que en el ejercicio anterior, esta vez para desarrollar un cliente para el servicio de conversión entre euros y ptas desarrollado en la sesión anterior.
El cliente deberá tomar como parámetro un valor numérico en euros. Como resultado nos deberá mostrar a cuántas ptas corresponde dicha cantidad utilizando nuestro Servicio Web.
3. (OPTATIVO) Crear un cliente para el servicio del foro creado en la sesión anterior. La aplicación cliente nos deberá permitir publicar nuevos mensajes en el foro y consultar la lista de todos los mensajes publicados.
4. Vamos a desarrollar clientes para varios servicios de demostración ofrecidos por XMethods. Para ello deberemos acceder a:
http://www.xmethods.net
Para consultar la información sobre los servicios que ofrece y obtener el documento WSDL que necesitamos para crear nuestros clientes.
a) Cliente para el servicio de cambio de moneda (Currency Exchange Rate). Tenemos los ficheros correspondientes a este cliente ya implementado en el directorio CambioMonedaCliente de los ejercicios de la sesión. Para construirlo hemos seguido los siguientes pasos:
config.xml
en el que indicaremos la dirección
anterior.Por otro lado, si consultamos la documentación del servicio, el documento WSDL, o las clases generadas, veremos que tiene una operación getRate() que toma dos parámetros: el país de origen y el de destino. Nosotros invocaremos este método desde el stub. En la página de información sobre el servicio que nos proporciona XMethods, podremos consultar los posibles nombres de países que podemos especificar, como por ejemplo "euro" o "usa".
import es.ua.j2ee.sw.exchange.*; public class Cliente { public static void main(String[] args) {
if(args.length < 2) { System.out.println(
"Uso: ant run -Dorigen=<pais_origen> -Ddestino=<pais_destino>");
System.exit(-1);
} try { CurrencyExchangePortType serv = creaProxy();
float divisa = serv.getRate(args[0], args[1]); System.out.println("Cambio de " + args[0] + " a " + args[1] + " = " + divisa); } catch (Exception e) { e.printStackTrace(); } } private static CurrencyExchangePortType creaProxy() { return (CurrencyExchangePortType)(new
CurrencyExchangeService_Impl().getCurrencyExchangePort()); } }
Cambio de usa a euro = 0.9424
b) Consulta de la temperatura en EEUU, a partir del código postal (Weather - Temperature). Seguir los pasos del punto anterior para desarrollar este cliente. Como parámetro deberá tomar el código postal del área de la cual queremos obtener la temperatura.
Nos debería devolver algo como:
La temperatura en 54124 es 60.0
5. (OPTATIVO) Crear un cliente para el servicio web de Google. Para poder acceder al servicio de Google deberás registrarte previamente y obtener una clave, que deberás proporcionar al invocar el servicio. Puede obtener esta clave gratuitamente en la siguiente dirección:
http://www.google.com/apis/
Desde esta página también puedes obtener documentación, ejemplos y librerías para utilizar estos servicios web.
a) Crear el cliente del servicio de Google generando el stub a partir de su documento WSDL:
http://api.google.com/GoogleSearch.wsdl
b) Ejecutar el cliente para realizar una búsqueda en Google. Los parámetros que debemos especificar en la llamada al servicio son los siguientes:
doGoogleSearch(clave, cadBusqueda, 0, 10, true,
"", false, "", "UTF8", "UTF8");
Comprobar que el cliente funciona correctamente.
1. Tienda de DVDs. Nuestro negocio consiste en una tienda
que vende películas en DVD a través de Internet. Para dar una
mayor difusión a nuestro catálogo de películas, decidimos
implantar una serie de Servicios Web para acceder a información sobre
las películas que vendemos.
De cada película ofreceremos información sobre su título,
su director y su precio. Esta información podemos codificarla en una
clase DatosPelicula como la siguiente:
public class DatosPelicula { public String titulo; public String director; public float precio; public DatosPelicula() {} public DatosPelicula(String titulo, String director, float precio) { this.titulo = titulo; this.director = director; this.precio = precio; } public String toString() {
return titulo + ", " + director + ", " + precio + " euros."; } }
Vamos a permitir que se busquen películas proporcionando el nombre de su director. Por lo tanto, el servicio ofrecerá una operación como la siguiente:
DatosPelicula [] buscaPorDirector(String director)
Proporcionaremos el nombre del director, y nos devolverá la lista de películas disponibles dirigidas por este director.
En un principio, podemos crear una lista estática de películas dentro del código de nuestro servicio, como por ejemplo:
DatosPelicula [] peliculas = { new DatosPelicula("Mulholland Drive", "David Lynch", 26.96f), new DatosPelicula("Carretera perdida", "David Lynch", 18.95f), new DatosPelicula("Twin Peaks", "David Lynch", 46.95f), new DatosPelicula("Telefono rojo", "Stanley Kubrick", 15.95f), new DatosPelicula("Barry Lyndon", "Stanley Kubrick", 24.95f), new DatosPelicula("La naranja mecánica", "Stanley Kubrick", 22.95f) };
Se pide:
a) Implementar el servicio.
Para construir una lista con las películas cuyo director coincida con
el nombre del director que se ha solicitado, podemos utilizar un código
similar al siguiente, donde se ha proporcionado un parámetro director:
director = director.toLowerCase(); ArrayList list = new ArrayList(); for(int i=0;i<peliculas.length;i++) { if(peliculas[i].director.toLowerCase().indexOf(director) != -1) { list.add(peliculas[i]); } } DatosPelicula [] result = new DatosPelicula[list.size()]; list.toArray(result); return result;
b) Crear un cliente para este servicio. El cliente debe tomar como argumento el nombre del director por el cual queremos realizar la búsqueda, y nos mostrará una lista de las películas de dicho director, indicando el título y el precio de cada una de ellas, accediendo al servicio web para obtener la información.