HI I´M AN IDEA
WANNA PLAY
WITH ME?
 

Conexión a servicios web con KSOAP2 en Android


1.- Importar Librerías KSOAP2 al proyecto en el que vamos a conectar.
http://code.google.com/p/ksoap2-android/
____________________________________________________________
2.- Definir las propiedades del Servicio Web en cuatro variables de tipo String:

String NAMESPACE = "...";
StringURL = "...";
String SOAP_ACTION = "...";
String METODO = "...";

Todos estos datos se obtienen del WDSL del servicio web, salvo la URL que es la dirección a través de la que nos conectamos al servicio Web.

____________________________________________________________
3.- Un Servicio Web puede necesitar parámetros o no necesitarlos, la diferencia solo está en añadir estos parámetros en un momento determinado que veremos más adelante.
3.1 .- Crear una variable de tipo SoapObject e inicializarla con las variables NAMESPACE y METODO como argumentos:

SoapObject Solicitud = new SoapObject(NAMESPACE, METODO);

 

Si el Servicio Web no necesita que le pasemos parámetros podemos ir directamente al punto 3.2

3.1.1.- En caso de necesitar parámetros este es el momento de añadirlos:
Se declaran tantos objetos del tipo PropertyInfo como parámetros necesite el método:

PropertyInfo PrimerParametro = new PropertyInfo ();
PropertyInfo SegundoParametro = new PropertyInfo ();
...

Ahora se le añade el nombre del parámetro y el valor a cada nuevo objeto:

PrimerParametro.SetName (“Nombre del parámetro”);
PrimerParametro.SetValue (“Valor del parámetro”);
SegundoParametro.SetName (“Nombre del parámetro”);
SegundoParametro.SetValue (“Valor del parámetro”);
...

Y por último se añaden los parámetros al SoapObject creado antes:

Solicitud.addProperty (PrimerParametro);
Solicitud.addProperty (SegundoParametro);
...

3.2.- Se crea un objeto de tipo SoapSerializationEnvelope y se inicializa con SoapEnvelope.VER11 como parámetro:

SoapSerializationEnvelope Envoltorio =
new SoapSerializationEnvelope (SoapEnvelope.VER11);

3.3.- Ahora se le da valor a la propiedad dotNet del objeto SoapSerializationEnvelope según el tipo de servicio web con el que vamos a trabajar (si está hecho en .NET o no) y se le asigna el SoapObject creado en el paso 3.1 como objeto de salida:

Envoltorio.dotNet = true;

O bien

Envoltorio.dotNet = false;

Y la asignación:

Envoltorio.setOutputSoapObject (Solicitud);

3.4.- Por último se crea una variable de tipo HttpTransportSE para que haga la conexión y se inicializa con la URL como parámetro:

HttpTransportSE TransporteHttp = new HttpTransportSE(URL);

_____________________________________________________________

4.- Con todos los objetos necesarios creados e inicializados enviamos la petición al servicio y recogemos la respuesta:
4.1.- Para enviar la petición al Servicio Web se utiliza el método CALL del objeto HttpTransportSE creado en el punto 3.4 con la SOAP_ACTION y el SoapObject creado en 3.1 como parámetros:

TransporteHttp.call (SOAP_ACTION, Envoltorio);

4.2.- Para recoger la respuesta se crea una variable del tipo que devuelva el Servicio Web y se utiliza el método getResponse del SoapSerializationEnvelope creado en el punto 3.2:

Esto serviría si el Servicio Web devolviese un String:

Java.lang.String CadenaDevuelta =
(String) envelope.getResponse();

Y esto si devolviese un Int:

Java.lang.Int EnteroDevuelto =
(Int) envelope.getResponse();

Si el servicio web devuelve otro tipo de datos se haría igual.

Vía | android-spa

About the author

Jaime Mulero Hola! Me llamo Jaime Mulero, soy programador desde hace años, apasionado por la informática prácticamente desde que tengo uso de razón. Jquery Ninja, Codeigniter Trooper, database juggler and Android engineer! Jaime Mulero

VN:F [1.9.20_1166]
Rating: 7.0/10 (3 votes cast)
Conexión a servicios web con KSOAP2 en Android, 7.0 out of 10 based on 3 ratings
Difunde la palabra
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Meneame

14 Comments on "Conexión a servicios web con KSOAP2 en Android"

  1. droid_kid dice:

    no es posible explicarlo mas claro .muchas gracias

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: +1 (from 1 vote)
  2. Sergio dice:

    Muy bien explicado el artículo, el único problema que tengo es que no me aclaro donde sacar la información de NAMESPACE, URL, SOAP_ACTION, METODO. ¿Puedes ayudarme? Gracias!!.

    En mi wdsl tengo la definición siguiente:

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: +2 (from 2 votes)
  3. Sergio dice:

    Creo que no se ha copiado el wdsl entero.. dejo el enlace.

    http://www.mediafire.com/?epu4v474htd6x74

    Mil gracias!

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  4. JOhanna dice:

    Buenas tardes
    yo tengo un problema, tengo un webservices en .net que se conecta a una base y devuelve un list ,
    como haría para recuperarlos seria lo mismo que puso en el post
    Java.lang.String CadenaDevuelta =
    (String) envelope.getResponse();

    Esperando su ayuda

    Gracias.

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
    • Hector Enrique dice:

      Te recomiendo que la Lista que enviar se en formato JSON (Texto) y ya que tienes “texto” en formato JSON lo manipulas muy fácilmente. Saludos.

      VA:F [1.9.20_1166]
      Rating: 0.0/5 (0 votes cast)
      VA:F [1.9.20_1166]
      Rating: 0 (from 0 votes)
  5. Johanna dice:

    Buenas noches por favor tu ayuda
    yo quisera saber como retorno un alista de objetos tipo item de un webservices creado en .net, usado la libreria ksoap2.

    Se que la linea q esta mal es la siguiente : return resultRequestSoap.toString();

    pongo mi codigo

    public String listaWS(String opcionParametro, String opcionPalabra) {
    // TODO Auto-generated method stub

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty(“parametro”, opcionParametro);
    request.addProperty(“palabra”, opcionPalabra);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);

    HttpTransportSE transporte = new HttpTransportSE(URL);

    try {
    transporte.call(SOAP_ACTION, envelope);
    SoapPrimitive resultRequestSoap = (SoapPrimitive) envelope
    .getResponse();

    return resultRequestSoap.toString();

    } catch (IOException e) {

    return e.getMessage() + ” FALLO”;
    } catch (XmlPullParserException e) {

    return e.getMessage() + ” FALLO1″;
    }

    }

    favor su ayuda

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  6. danilo dice:

    tengo problemas con las nuevas versiones de android.. me funciona de manera correcta en la 2.2 pero para la plataforma 4.1.2 me da error en el “TransporteHttp.call (SOAP_ACTION, Envoltorio);”.
    No se si has tenido este problema..

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  7. Jose Antonio dice:

    Necesito enviar un VO o un objeto compejo como puedo hacer eso.

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  8. Isaias dice:

    oye duda y si quiero pasar un arreglo como se haría esa es mi duda si la contestas te lo agradeciera infinitamente

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  9. Aaron dice:

    He probado el codigo y funciona bien en android 2 pero en los dispositivos con android 3 o 4… no sirve sale un null pointer exception, como se puede solucionar??

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  10. jonug84 dice:

    viejo casi que no encuentro uno que si funciona, +10

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  11. henry dice:

    Hola, muy buen tutorial.
    Mi pregunta es, cómo hago para recibir dos valores que regresa el metodo del WS? uno es un list y el otro es un double.
    el mismo método regresa ambos tipos. Ayuda por favor.
    muchas gracias.

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  12. Javier dice:

    Buenas! Muchas gracias por el tutorial antes de nada!
    Estoy en una situación de la que no me está siendo posible resolverla.
    Me gustaría saber como ayudarme de esta librería de Android para recoger parámetros en mi app que se hayan definido en un WebMethod como “out” en vez de ser variables que devuelve el método en sí mediante el “return”.
    Gracias de antemano, a ver si alguien sabe al menos guiarme un poco en esta situación!

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)
  13. Raul dice:

    Y que pasa cuando la direccion es https://…? cuando es http://… funciona bien, pero cuando no, me regresa un error status 415, intente con el objeto tipo HttpsTransportSE pero el resultado es el mismo

    VA:F [1.9.20_1166]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.20_1166]
    Rating: 0 (from 0 votes)

¿Algo que opinar? Deja tu comentario!