Problema
Recientemente tuvimos la necesidad de acceder a un servicio web que nos daba la autenticacion a una cantidad de servicios de un cliente. Este tenia todo centralizado en LDAP y no se permitia el acceso directo al servidor LDAP, solo a traves de un SW que te respondia OK o KO en funcion de si la combinacion login/password era correcta o no. Lo unico que nos dieron es un wsdl que describe el Servicio Web.
SoluciónPara empezar con todo esto empezamos a buscar informacion sobre acceder a servicios web via java, y la verdad es que encontramos bastante poco, bastante menos de lo que a mi me gustaría (lo que encontré está en la zona de referencias)
Para poder reproducir todo esto, vamos a hacer un ejemplo.
Implementación
Como ejemplo nos vale el Servicio Web de Google al cual accederemos para que nos corriga las palabras que le introducimos.
El WSDL lo tenemos aqui : Google WSDL
PASO 1:
Lo que debemos hacer primero es obtener todas las librerias necesarias para el acceso a un servicio web remoto, estas son por lo menos:
- axis-ant.jar
- commons-discovery.jar
- commons-logging.jar
- jaxrpc.jar
- log4j-1.2.4.jar
- saaj.jar
- wsdl4j.jar
- axis.jar
Os las podeis bajar todas juntas de aqui.PASO 2:
Ahora que tenemos todas las librerias, vamos a generar el proxy de la conexion al servicio web, para ello, usaremos el fantastico WSDL2Java, que viene con axis, y requiere como parametro la ruta al servicio WEB o su URL:
java -classpath «axis-ant.jar:commons-discovery-0.2.jar:commons-logging-1.0.4.jar:jaxrpc.
jar:log4j-1.2.8.jar:saaj.jar:wsdl4j-1.5.1.jar:axis.jar» org.apache.axis.wsdl.WSDL2Java http://api.google.com/GoogleSearch.wsdlRecordad, que si usais Windows, debeis de Cambiar de Sistema Operativo o Sustituir los «:» por «;» punto y coma.
Este comando nos genera una estructura de archivos a partir de donde estemos con 6 o 7 archivos que usaremos para realizar la conexion.
PASO 3:
Ahora que ya tenemos el proxy de conexion vamos a escribir un simple cliente java que lo use:
package GoogleSearch;public class GoogleSearchClient { public static void main(String[] args) throws Exception { // Crea el servicio GoogleSearchService service = new GoogleSearchServiceLocator(); // Ahora usamos el servicio para crear un proxy hacia el Service Definition Interface (SDI) GoogleSearchPort google = service.getGoogleSearchPort(); // Hacer la llamada String key = «KEY OBTENIDA DE GOOGLE API en www.google.com/api»; String query = «wickle»; int start = 0; int maxResults = 10; boolean filter = true; String restrict = «»; boolean safeSearch = true; String languageRestrict = «lang_en»; String inputEncoding = «UTF-8»; String outputEncoding = «UTF-8»; GoogleSearchResult gsr = google.doGoogleSearch(key,query,start,maxResults,filter,restrict,safeSearch,i languageRestrict,inputEncoding,outputEncoding); ResultElement[] re = gsr.getResultElements(); for (int i = 0; i < re.length; i++) { System.out.println(re[i].getURL()); } }}
PASO 4:
Compilamos Todo :
javac -classpath «axis-ant.jar:commons-discovery-0.2.jar:commons-logging-1.0.4.jar:
jaxrpc.jar:log4j-1.2.8.jar:saaj.jar:wsdl4j-1.5.1.jar:axis.jar» GoogleSearch/*
PASO 5:
Ejecutamos ahora el cliente creado :
java -classpath «axis-ant.jar:commons-discovery-0.2.jar:commons-logging-1.0.4.jar:jaxrpc.jar:log4j-1.2.8.jar:saaj.jar:wsdl4j-1.5.1.jar:axis.jar:.» GoogleSearch/GoogleSearchClient– Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.http://www.wickle.com/wiki/index.php/Main_Pagehttp://www.wickle.com/wikis/index.php/Graphviz_extension….
et voila 😉 …
Ya tenemos creado un cliente de un Servicio Web.
REFERENCIAS
http://www.bawsug.org/archives/000008.html
http://www.myspotter.com/webservices1.shtml