lunes, 1 de marzo de 2021

Cliente de Web Services con JAXWS

Para poder integrar cualquier sistema hecho en JAVA con un Web Services lo mejor que he encontrado es usando JAXWS, ya que tiene una forma muy facil de interpretar los servicios y las estructuras de datos que utilizan los mismos. Tambien te genera todo el codigo necesario para conectarte al WS desde el Wsdl del mismo. La forma de configurarlo es la siguiente:

Para ello primero debemos colocar la dependencia de maven dentro del pom.xml:

        <!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt -->
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
            <version>2.2.10</version>
        </dependency>

Luego debemos configurar el plugin de jaxws para que se encargue de generar las clases y estructura de datos para que puedan conectarse facilmente a los WebServices.

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <packageName>{package}</packageName>
                    <sourceDestDir>{path_folder}</sourceDestDir>
                    <keep>true</keep>
                    <wsdlUrls>{url_ws}</wsdlUrls>
                </configuration>
            </plugin>
        </plugins>

  • En {package} es el paquete en java que va a contener las clases que autogenere el plugin una vez que se ejecutar.
  • En {path_folder} es el directorio donde va a generar el paquete con las clases, por lo general se pone src/main/java.
  • En {url_wa} es la direccion url que contiene el wsdl
  • En la propiedad keep esta en true para que se mantenga generado los archivos y no los borre luego de la ejecucion.
El proceso de maven generate-sources es el que se encarga de crear las clases que manejan los llamados y estructuras de datos de los web services.

Aqui pongo un ejemplo de como seria el llamado al web services desde java:

package com.package.client;

import java.net.URL;
import com.package.generated.ws.Informacion;
import com.package.generated.ws.WebServiceGenerated;
import com.package.generated.ws.WebServiceGeneratedSoap;

public class HelloWorldClient{
    
    public static void main(String[] args) throws Exception {
       
        String apiKey = "Esto es una prueba";
        
        WebServiceGenerated unWebServiceService = new WebServiceGenerated(new URL(urlWebServices));
        WebServiceGeneratedSoap unWebServiceCall = unWebServiceService.getWebServiceGeneratedSoap();

        Informacion result = unWebServiceCall.obtenerInformacion(apiKey);
        System.out.println(result.getReporte().size());
    }

}

En este ejemplo se utilizan dos clases autogeneradas denominadas WebServiceGenerated  WebServiceGeneratedSoap, en la ultima clase contiene los nombres de los nombres de los servicios definidos dentro del wsdl (ejemplo usado: obtenerInformacion). La clase Informacion tambien es autogenerada y es la estructura de datos armada para la respuesta del WebServices. 


No hay comentarios:

Publicar un comentario