Blog
Consumir un Web Service NuSOAP en Android usando KSOAP2
Anteriormente aprendimos a crear un Web Service NuSOAP en PHP, en este tutorial veremos cómo consumir un Web Service NuSOAP en Android usando KSOAP2. Para realizar esta tarea es muy importante leer el anterior tutorial ya mencionado.
Ya hemos visto que NuSOAP sirve para crear un Web Service en PHP, ahora para crear nuestro cliente vamos a utilizar la librería para android llamada KSOAP2. Esta misma se la pueden descargar desde el sitio: https://oss.sonatype.org/content/repositories/ksoap2-android-releases/com/google/code/ksoap2-android/ksoap2-android-assembly/3.5.0/ksoap2-android-assembly-3.5.0-jar-with-dependencies.jar.
Una vez que descargamos el JAR lo debemos incluir en la carpeta libs de nuestro proyecto y agregarlo como dependencia haciendo click derecho en el proyecto -> Properties -> Java Build Path -> Add JARs.
¿Cómo consumir un Web Service NuSOAP en Android?
El primer paso que vamos a realizar en nuestra aplicación es agregar el permiso para poder conectar a internet:
<uses-permission android:name="android.permission.INTERNET" />
Luego de realizar esto podemos empezar a programar. En este caso vamos a crear una clase llamada ClienteWS, la cual va a ejecutar la función saludar (de nuestro Web Service) con un parámetro (nombre) y recibirá una respuesta:
import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; public class ClienteWS extends AsyncTask<String, Integer, String> { private Context context; private static final String SOAP_ACTION = "SaludoXMLwsdl#Saludar"; private static final String OPERATION_NAME = "Saludar"; private static final String WSDL_TARGET_NAMESPACE = "SaludoXMLwsdl"; public static final String SOAP_ADDRESS = "http://midominio.com/path/to/servicio.php"; public ClienteWS(Context context) { this.context = context; } @Override protected String doInBackground(String... params) { String result = null; SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER10); // Con esta opción indicamos que el web service no es .net envelope.dotNet = false; envelope.setOutputSoapObject(request); HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); // Enviando un parámetro al web service request.addProperty("nombre", params[0]); try { // Enviando la petición al web service httpTransport.call(SOAP_ACTION, envelope); // Recibiendo una respuesta del web service SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope .getResponse(); result = resultsRequestSOAP.toString(); httpTransport.getServiceConnection().disconnect(); } catch (IOException | XmlPullParserException e) { Log.v("Error", e.getMessage()); result = e.getMessage(); } return result; } @Override protected void onPostExecute(String result) { // Mostramos la respuesta del web service Toast.makeText(context, result, Toast.LENGTH_LONG).show(); } }
Luego para probar este cliente solamente tenemos que ejecutar el siguiente código en nuestra Activity:
new ClienteWS(this).execute("ProgramaciónExtrema.com");
Eso es todo por hoy, espero que les sea de gran utilidad. Ante cualquier problema no duden en dejar un comentario.
Muy bueno el ejemplo, seria mejor aun una explicación de los parametros que se envían. Gracias por compartir.
Hola Rodrigo, gracias por comentar. En el ejemplo se utilizan varias funciones con parámetros ¿con cuales tenes dudas?
Disculpe en la última línea en la execución new ClienteWS(this).execute(“ProgramaciónExtrema.com”); usted le está mandando ese string con la dirección de la página, entonces yo quiero saber que es lo que se debe mandar ahí, son los parametros? por ejemplo yo lo tengo de esta manera:
ClienteWS(getApplicationContext()).execute(usuario.getText().toString()); porque lo que yo necesito es enviarle un usuario al web y que me regrese una respuesta, me podria explicar un poco, se lo agradecería mucho, de antemano gracias!
Hola Jorge, antes que nada me alegra que te haya servido el tutorial. Cuando ejecutas el cliente podés enviarles los parámetros que quieras (que son los que recibe el servidor), por ejemplo:
Luego en el método doInBackground tenés que recibir esos parámetros para enviarselos al web services:
Espero que se haya entendido, cualquier otra duda avisame. Saludos.
Gracias por el ejemplo, aunque me salía un error tal vez era por la versión de PHP, error:
“SoapFault – faultcode: ‘SOAP-ENV:Client’ faultstring: ‘error in msg parsing: xml was empty…”
En el ws de PHP se debe cambiar las 2 ultimas líneas que tenían algo de “HTTP_RAW_POST_DATA” por:
$server->service(file_get_contents(“php://input”));
También me salia el mismo error, gracias por comentar la solución, saludos.