JAX-WS: Un cliente y un servidor

(Imagen : Rembrandt - La ascención de Cristo y María Magdalena)

Es hora de hacer un ejemplo, que ya estábamos demasiado "académicos". Se tendrá una clase de implementación Hello, que estará anotada como endpoint de web service mediante @WebService. Hello declara un sólo método denominado sayHello, anotado con @WebMethod. @WebMethod expone al método anotado a los clientes del Web Service. El método sayHello devuelve un saludo a los clientes, usando el nombre pasado como parámetro para armar el saludo. La clase de implementación define un constructor por defecto público, que no recibe argumentos (parámetros).

package helloservice.endpoint;

import javax.jws.WebService;

@WebService
public class Hello{
private String message = new String("Hello, ");

public void Hello(){}

@WebMethod
public String sayHello(String name){
return message + name + ".";
}
}


Ahora veamos al cliente. HelloClient es un programa Java stand-alone que accede al método sayHello de HelloService. Hace esta llamada a través de un port, un objeto local que actúa como proxy del servicio remoto. Este port es creado en tiempo de desarrollo por la herramienta wsimport, que genera artefactos portables de JAX-WS en base a un archivo WSDL.

AL invocar métodos remotos en el port, el cliente realiza lo siguiente:

Se utiliza la anotación javax.xml.ws.WebServiceRef para declarar una referencia a un web service. @WebServiceRef utiliza el elemento wsdlLocaltion para especificar el URI del WSDL del servicio desplegado

@WebServiceRef(wsdlLocation="http://localhost:8080/helloservice/hello?wsdl")
static HelloService service;


Se obtiene un proxy para el servicio, tambien conocido como port, al invocar getHelloPort en el service.

Hello port = service.getHelloPort();


El port implementa la SEI definida por el servicio.

Se invoca al método sayHello del port, pasándole al servicio un name.

String response = port.sayHello(name);


Aquí tenemos todo el código de HelloClient:

package simpleclient;

import javax.xml.es.WebServiceRef;
import helloservice.endpoint.HelloService;
import helloservice.endpoitn.hello;

public class HelloClient{
@WebServiceRef=(wsdlLocation="http://localhost:8080/helloservice/hello?wsdl")
static HelloService service;

public static void main(String[] args){
try{
HelloClient client = new HelloClient();
client.doTest(args);
}catch(Exception e){
e.printStackTrace();
}

}

public void doTest(String[] args){
try{
Hello port = service.getHelloPort();
String name;
if (args.length > 0){
name = args[0];
}else{
name = "No Name";
}
String response = port.sayHello(name);
System.out.println(response);

}catch(Exception e){
e.printStackTrace();
}
}
}


Basado en la Guía SCDJWS de Mikalai Zaikin

2 comments

estoy haciendo un llamado a todos los que hace unos dias se unieron a la campaña por los niños que mueren de frío en el perú ante la indiferencia de todos...

http://akilesmartin.blogspot.com/2009/06/sigue-haciendo-frio-carajo.html

Reply

Buenas, he pasado por aqui por un trabajo de la universidad. Tengo la siguiente duda. Necesito hacer un cliente de WSDL Java, para comunicarlo con un servidor WSDL en python. En los ejemplos que coloca, como en este caso, los dos se encuentran dentro del mismo proyecto. Hay una forma de usar el wsdl generado sin necesidad de tener una clase Java generada. Gracias de Antemano. Responder por esta misma via.

Reply

Publicar un comentario