
Accediendo a un Servicio Web desde Java con Axis
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ón
Para 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.wsdl
Recordad, 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_Page
http://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