Está en la página 1de 5

KSOAP2 es una librera ligera y eficiente, caractersticas imprescindibles para su utilizacin en entornos de aplicaciones mviles.

Desde la pgina del proyecto hospedado en Google Code podemos bajarnos la ltima versin de la librera para incluir en nuestro proyecto de Eclipse.

Pasos iniciales a seguir:

1- Bajar la ltima versin del jar (a fecha 7/04/2011) - http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar 2- Crear un proyecto de Android. 3- Incluir la librera en el proyecto de Eclipse.

Bueno... ya estamos listos para utilizarla. Lo primero, vamos a explicar los conceptos fundamentales.

Necesitamos datos sobre el ENDPOINT, es decir:

1- Direccin url del servicio web. 2- Namespace 3- Mtodo a ejecutar del servicio web. 4- Derivado --> La accin SOAP a ejecutar.

Ejemplo:

1 private static final String url = 2 "http://www.webservicex.net/geoipservice.asmx"; 3 private static final String namespace = "http://www.webservicex.net/"; 4 private static final String Metodo_GetGeoIP = "GetGeoIP"; private static final String accionSoap_GetGeoIP = "http://www.webservicex.net/GetGeoIP";
Una vez identificados los datos que necesitamos, podemos proceder a construir la solicitud al mtodo del servicio. 1. 2. 3. 4. 5. 6. 7. Primero hemos de identificar los parmetros y el tipo de datos devuelto por el mtodo del servicio. Una vez identificados, se procede a construir la peticin SOAP utilizando la clase SoapObject. Seguidamente se construye el "sobre" del mensaje SOAP: En la parametrizacin, se especifica el tipo de protocolo de comunicacin (SOAP1.1 / 1.2, etc..) y como caracterstica especial si el EndPoint es un servicio dotNet A la peticin (objeto request) se la aaden los parmetros con el mtodo AddProperty. Se construye el objeto de transporte para invocar el mtodo (clase HttpTransportSE). Al invocar al mtodo "call" de la clase "HttpTransportSE" se recogen los resultados del servicio. Finalmente se recogen los resultados utilizando el objeto devuelto (response) e invocando al mtodo getProperty.

1 public class ResultadoGeoIPService { private String NombrePais; 2 private String CodigoPais; 3 public String getNombrePais() { 4

return NombrePais; } 56 public void setNombrePais(String nombrePais) { 7 8 NombrePais = nombrePais; 9 } public String getCodigoPais() { return CodigoPais; 101 1 } public void setCodigoPais(String codigoPais) { 12 13 CodigoPais = codigoPais; 14 }} 151 6 17 //... EN LA CLASE PROXY DEL SERVICIO ... public ResultadoGeoIPService GetGeoIP(String IP) throws Exception{ try { 18 SoapObject request = new SoapObject(namespace, Metodo_GetGeoIP); 19 SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11); 202 sobre.dotNet = true; 1 22 request.addProperty("IPAddress", 23 IP); sobre.setOutputSoapObject(request); 24 HttpTransportSE transporte = new HttpTransportSE(url); 252 6 transporte.call(accionSoap_GetGeoIP, sobre); 27 SoapObject resultado = (SoapObject) sobre.getResponse(); ResultadoGeoIPService res=new ResultadoGeoIPService(); 28 29 303 res.setNombrePais(resultado.getProperty("CountryName").toString()); 1 res.setCodigoPais(resultado.getProperty("CountryCode").toString()); 32 return res; 33 }catch (Exception e){ 34 throw(e); 353 6 } } 37 38 39 404 1
A continuacin os dejo un ejemplo de cdigo completo en un proyecto de Eclipse. En este ejemplo encontrares:

o o

La clase "ProxyGeoIPService" que utiliza un servicio web que averigua el pas de una direccin IP. Tambin posee otro mtodo (GetGeoIPContext) que en funcin de la direccin IP origen de la peticin recibida devuelve el pas al que corresponde la solicitud. Una clase "InetManager" que permite obtener la direccin IP del dispositivo Android.

El cdigo que dispar la invocacin al servicio web lo podes encontrar en el evento OnClick (OnClickbtnLlamarGeoIPService) del Botn de la interfaz de la actividad principal.

private OnClickListener OnClickbtnLlamarGeoIPService = new 1 2 OnClickListener() { public void onClick(View v) { 3 ProxyGeoIPService srvGeoIP=new ProxyGeoIPService(); 4 56 String IP=InetManager.getLocalIpAddress(); lblIP.setText(IP); try { 7 8 //ResultadoGeoIPService 9 res=srvGeoIP.GetGeoIP(IP); 1011 ResultadoGeoIPService 12 res=srvGeoIP.GetGeoIPContext(); 13 lblResultado.setText(res.getNombrePais()); } catch (Exception e) 14 1516 { // TODO Auto-generated catch block Log.e(Config.LOGKSOAP,e.toString()); } } };

También podría gustarte