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.
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());
}
}
La librería es bastante mierda y le faltan por pulir muchísimas cosas
ResponderEliminar