Acceso a Servicios Web SOAP en Android

En primer lugar hay que empezar diciendo que Android no incluye “de serie” ningún tipo de soporte para el acceso a servicios web de tipo SOAP. Es por esto por lo que vamos a utilizar una librería externa para hacernos más fácil esta tarea. Entre la oferta actual, la opción más popular y más utilizada es la librería ksoap2-android. Esta librería es un fork, especialmente adaptado para Android, de la antigua librería kSOAP2. Este framework nos permitirá de forma relativamente fácil y cómoda utilizar servicios web que utilicen el estándar SOAP. La última versión de esta librería en el momento de escribir este artículo es la 2.6.0, que puede descargarse desde este enlace.

Agregar esta librería a nuestro proyecto Android es muy sencillo. Una vez tenemos creado el proyecto en Android, accederemos al menú “Project / Properties” y en la ventana de propiedades accederemos a la sección “Java Build Path“. En esta sección accederemos a la solapa “Libraries” y pulsaremos el botón “Add External JARs…“. Aquí seleccionamos el fichero jar de la librería ksoap2-android (en este caso “ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar”) y listo, ya tenemos nuestro proyecto preparado para hacer uso de la funcionalidad aportada por la librería.
Lo primero que vamos a hacer en este evento es definir, por comodidad, cuatro constantes que nos servirán en varias ocasiones durante el código:
  • NAMESPACE. Espacio de nombres utilizado en nuestro servicio web.
  • URL. Dirección URL para realizar la conexión con el servicio web.
  • METHOD_NAME. Nombre del método web concreto que vamos a ejecutar.
  • SOAP_ACTION. Equivalente al anterior, pero en la notación definida por SOAP.
Ejemplo:

   private static final String SOAP_ACTION = "http://ws.cdyne.com/CCServerCheck";
   private static final String METHOD_NAME = "CCServerCheck";
   private static final String NAMESPACE = "http://ws.cdyne.com/";
 private static final String URL = "http://ws.cdyne.com/psaddress/addresslookup.asmx";


@Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        TextView lblStatus = (TextView) findViewById(R.id.lblStatus);
        try {
           //Creaccion de la Solicitud
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                 
             //Creaccion del Envelope
 SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            sobre.dotNet = true;
            sobre.setOutputSoapObject(request);
            //Creaccion del transporte
            HttpTransportSE transporte = new HttpTransportSE(URL);
            //Llamada
            transporte.call(SOAP_ACTION, sobre);
            //Resultado
            SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();
            resultadoFINAL = resultado.toString();
            lblStatus.setText("Resultado:" + resultadoFINAL);
        }catch (Exception e) {
            lblStatus.setText("ERROR:" + e.getClass().getName() + ": " + e.getMessage());
        }

    }

Comentarios

  1. La librería es bastante mierda y le faltan por pulir muchísimas cosas

    ResponderEliminar

Publicar un comentario

Entradas populares