De entre los más usuados en la mayoría de los casos se encuentra la librería independiente KSOAP2 creada para J2ME.. (aún me acuerdo de los cursos de master que prepare utilizando esto..) .
KSOAP2 es una librería ligera y eficiente, características imprescindibles para su utilización en entornos de aplicaciones móviles. Desde la página del proyecto hospedado en Google Code podemos bajarnos la última versión de la librería para incluir en nuestro proyecto de Eclipse.
Pasos iniciales a seguir:
1- Bajar la última versión del jar (a fecha 7/04/2011) - http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
2- Crear un proyecto de Android.
3- Incluir la librería 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- Dirección url del servicio web.
2- Namespace
3- Método a ejecutar del servicio web.
4- Derivado --> La acción SOAP a ejecutar.
Ejemplo:
1 2 3 4 | private static final String url = "http://www.webservicex.net/geoipservice.asmx"; private static final String namespace = "http://www.webservicex.net/"; private static final String Metodo_GetGeoIP = "GetGeoIP"; private static final String accionSoap_GetGeoIP = "http://www.webservicex.net/GetGeoIP"; |
- Primero hemos de identificar los parámetros y el tipo de datos devuelto por el método del servicio.
- Una vez identificados, se procede a construir la petición SOAP utilizando la clase SoapObject.
- Seguidamente se construye el "sobre" del mensaje SOAP: En la parametrización, se especifica el tipo de protocolo de comunicación (SOAP1.1 / 1.2, etc..) y como característica especial si el EndPoint es un servicio dotNet
- A la petición (objeto request) se la añaden los parámetros con el método AddProperty.
- Se construye el objeto de transporte para invocar el método (clase HttpTransportSE).
- Al invocar al método "call" de la clase "HttpTransportSE" se recogen los resultados del servicio.
- Finalmente se recogen los resultados utilizando el objeto devuelto (response) e invocando al método getProperty.
1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 28 29 3031 32 33 34 3536 37 38 39 4041 | public class ResultadoGeoIPService { private String NombrePais; private String CodigoPais; public String getNombrePais() { return NombrePais; } public void setNombrePais(String nombrePais) { NombrePais = nombrePais; } public String getCodigoPais() { return CodigoPais; } public void setCodigoPais(String codigoPais) { CodigoPais = codigoPais; }} //... EN LA CLASE PROXY DEL SERVICIO ... public ResultadoGeoIPService GetGeoIP(String IP) throws Exception{ try { SoapObject request = new SoapObject(namespace, Metodo_GetGeoIP); SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11); sobre.dotNet = true; request.addProperty("IPAddress", IP); sobre.setOutputSoapObject(request); HttpTransportSE transporte = new HttpTransportSE(url); transporte.call(accionSoap_GetGeoIP, sobre); SoapObject resultado = (SoapObject) sobre.getResponse(); ResultadoGeoIPService res=new ResultadoGeoIPService(); res.setNombrePais(resultado.getProperty("CountryName").toString()); res.setCodigoPais(resultado.getProperty("CountryCode").toString()); return res; }catch (Exception e){ throw(e); } } |
- La clase "ProxyGeoIPService" que utiliza un servicio web que averigua el país de una dirección IP. También posee otro método (GetGeoIPContext) que en función de la dirección IP origen de la petición recibida devuelve el país al que corresponde la solicitud.
- Una clase "InetManager" que permite obtener la dirección IP del dispositivo Android.
El código que dispará la invocación al servicio web lo podeís encontrar en el evento OnClick (OnClickbtnLlamarGeoIPService) del Botón de la interfaz de la actividad principal.
1 2 3 4 56 7 8 9 1011 12 13 14 1516 | private OnClickListener OnClickbtnLlamarGeoIPService = new OnClickListener() { public void onClick(View v) { ProxyGeoIPService srvGeoIP=new ProxyGeoIPService(); String IP=InetManager.getLocalIpAddress(); lblIP.setText(IP); try { //ResultadoGeoIPService res=srvGeoIP.GetGeoIP(IP); ResultadoGeoIPService res=srvGeoIP.GetGeoIPContext(); lblResultado.setText(res.getNombrePais()); } catch (Exception e) { // TODO Auto-generated catch block Log.e(Config.LOGKSOAP,e.toString()); } } }; |
By. Edner Llacsa
http://ednerllacsa.blogspot.com/
y luego ? el ejemplo de como funciona''?????????????????????
ResponderEliminar