Servicio SOAP básico II. Cliente

Como continuación de la entrada anterior, esta vez toca crear el cliente o consumidor del servicio publicado. El entorno es el mismo que el utilizado para crear el servidor.
La clase que conecta es :
package es.sinjava.cliente;

import java.net.MalformedURLException;

public class App {
    public static void main(String[] args) {
        System.out.println("Hello World Clients United");
        try {
            ConsumerService cs = new ConsumerService();
            IClientWebService ics = cs.getHelloPort();
            String text = ics.responde(" Andrés");
            System.out.println("Respuesta : " + text);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}
Crea el servicio, recupera el puerto ( método) que queremos utilizar y lo llamamos como si fuera un recurso local.
 El ConsumerService es el siguiente:
package es.sinjava.cliente;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceClient;

@WebServiceClient
public class ConsumerService extends Service {

    protected ConsumerService() throws MalformedURLException {
        super(new URL(ConsumerService.class.getResource("."), "http://localhost:8888/hola?wsdl"),
                new QName("http://servidor.sinjava.es/", "ServicioService"));
    }

    public IClientWebService getHelloPort() {
        return super.getPort(new QName("http://servidor.sinjava.es/", "ServicioPort"), IClientWebService.class);
    }
}

Un constructor y un método que nos devuelve el "Port" apropiado.

Y finalmente el interfaz del Port, IClientWebService:

package es.sinjava.cliente;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface IClientWebService {
    String responde( String nameIn);
}

En total 50 lineas de código, para hacer un consumidor muy mínimo de un servicio SOAP, mediante RPC.
Teniendo el servidor levantado, al ejecutar el método main nos devuelve en consola:
Hello World Clients United
Respuesta : Hola desde mi servicio  ANDRÉS


En la llamada, el método main del cliente es:
String text = ics.responde(" Andrés");

Y en la implementación del servidor teníamos:
public String responde(String name) {
         return "Hola desde mi servicio " + name.toUpperCase();
    }

 Todo parece indicar que la prueba de concepto ha sido resuelta.
Si lo has creado sin maven la forma de lanzarlo desde consola es, indicándole donde está la clase main:
java -cp cliente-0.0.1-SNAPSHOT.jar es.sinjava.cliente.App
Si has creado un proyecto maven puedes ejecutarlo con:
exec:java -Dexec.mainClass=es.sinjava.cliente.App

 Como no se utiliza ninguna librería aparte de la propia MVJ el POM es lo siguiente a básico:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>es.sinjava</groupId>
    <artifactId>cliente</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>cliente</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
Similar al utilizado para crear el servidor. Por eso comentaba al hablar del servidor que para este tipo de proyectos no hace falta utilizar maven.
En cualquiera de los casos el jar cliente ocupa 5 Kb, es dificil hacer algo con menos "peso".
Los dos proyecto: cliente y servidor se puedes descargar de este enlace

Comentarios