Creando Cliente de Web Service con Maven 2º Entrega

En esta segunda entrega () vamos abordar modificar un poco el proyecto de la primera entrega para que se aproxime un poco más a las situaciones habituales, en las que un web service tiene varios métodos, los parámetros, los resultados son algo más complejos y queremos pasar un cliente ( un archivo jar ) que contenga las definiciones y los parámetros necesarios para conectarse al web service desplegado, esto es, el interfaz del servicio web y los beans utilizados como parámetros.
Primero crearemos tres paquetes: uno que contiene el interfaz, otro los beans y el último la implementación del ws. El ws va a implementar las cuatro operaciones básicas y en vez de pasarle los parámetros de forma independiente recibiran un "paramLoquesea" que contiene unicamente dos "int".
Véamos el interfaz:

package soy.guapo.home.ws.pub;

import javax.jws.WebService;

import soy.guapo.home.ws.data.ParamDivide;
import soy.guapo.home.ws.data.ParamMultiplica;
import soy.guapo.home.ws.data.ParamResta;
import soy.guapo.home.ws.data.ParamSuma;

@WebService
public interface HelloWorld {
    int suma(ParamSuma paramSuma);
    int resta(ParamResta paramResta);
    int multiplica(ParamMultiplica paramMultiplica);
    int divide(ParamDivide paramDivide);
    String sayHi(String text);
}
El intefaz está ahora en un paquete "soy.guapo.home.ws.pub" y los parámetros (beans) están en un paquete "soy.guapo.home.ws.data." Los párámetros extienden de un paramBase definido por:
package soy.guapo.home.ws.data;

import java.io.Serializable;

public class ParamBase implements Serializable {

    private static final long serialVersionUID = 1L;
    private int numA;
    private int numB;
   
    public int getNumA() {return numA;}
    public void setNumA(int numA) {this.numA = numA;}
    public int getNumB() {return numB;}
    public void setNumB(int numB) {this.numB = numB;} 
}


Una vez hechos estos cambios al desplegar el ws deberíamos observar en el navegador
Available services:
HelloWorld
  • resta
  • multiplica
  • suma
  • sayHi
  • divide
Endpoint address: http://192.168.2.52:7777/firstcxf/HelloWorld
Wsdl: {http://impl.ws.home.guapo.soy/}HelloWorldImplService
Target namespace: http://impl.ws.home.guapo.soy/





Ya lo tenemos todo preparado para crear el jar cliente del web service. Para ello necesitamos configurar el correspondiente plugin de maven. Como siempre lo haremos en el pom añadiendo esto en el apartado de plugins dentro de la zona build.


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <id>ws</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <archive>
                                <addMavenDescriptor>true
                                </addMavenDescriptor>
                            </archive>
                            <classifier>client</classifier>
                            <includes>
                                <include>**/ws/data/*</include>
                                <include>**/ws/pub/*</include>
                            </includes>
                         </configuration>
                    </execution>
                </executions>
            </plugin>

El cliente generado así se nos instalará automaticamente en el repositorio con mvn install, pudiendo importarlo desde los distintos proyectos clientes. Creo que se entiende bastante bien qué es lo que hace viendo el código. 
Añadir que si hemos colocado alguna clase que no necesitamos que vaya dentro del cliente podemos añadir un apartado "excludes" dentro del subapartadao "configuration".
La próxima entrega la configuración de aplicación para que utilice el webservice creado importando el cliente generado ahora.
 Comentar que , aunque podríamos obtener la información necesaria del wsdl, en  mi ejemplo de http://192.168.2.52:7777/firstcxf/HelloWorld?wsdl, es mucho más cómodo utilizar el cliente jar.

En próximas entregas veremos como realizar un cliente del ws que sea una aplicación de escritorio.
 






Comentarios