2010-06-14 15 views
5

Llamando a .NET SOAP1.1 servicio web desde android usando ksoap2 lib Me encontré con un problema de conversión de respuesta a un objeto personalizado. Por ejemplo, el código siguiente se llama correcto después de httpTransport.call (soapAction, soapEnvelope); y tener datos adentro. Pero no puedo convertirlo en un objeto específico ni para SoapObject o Vector, como vi en varios ejemplos, obtengo CastException o nada simple. Si alguien sabe cómo manejarlo, por favor ayuda.ksoap2 casting getResponse()

public StatusSetting[] GetAllStatuses(String installation){ 
    StatusSetting[] statuses = null; 
    String methodName = "GetAllStatuses"; 
    String soapAction = NAMESPACE + "/" + methodName; 
    SoapObject request = new SoapObject(NAMESPACE, methodName); 
    request.addProperty("installation", installation); 

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    soapEnvelope.dotNet = true; 
    soapEnvelope.setOutputSoapObject(request); 

    AndroidHttpTransport httpTransport = new AndroidHttpTransport(SERVICE_URL); 
    try { 
     httpTransport.call(soapAction, soapEnvelope); 
     statuses = (StatusSetting[])soapEnvelope.getResponse(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return statuses; 
} 

Respuesta

5

Primero intente y vea si obtiene alguna respuesta.

Object obj = envelope.bodyIn; 

si esto obj no es nulo, intente lo siguiente.

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

Supongo que esto debería funcionar si recibes alguna respuesta.

Necesita decirle a kSOAP qué objeto es StatusSetting y how para convertir una respuesta de SOAP a un objeto StatusSetting.

+0

Gracias, funciona, no tengo datos de la SoapObject. ¿Podría darnos una dirección sobre cómo analizar SoapObject? Me refiero a leer propiedades de alguna manera y buscar los datos que necesito. Intenté obtener resultsRequestSOAP.properties (funciona como datos json) en modo de depuración, pero las propiedades no son un método abierto para usar en el código. – Maxim

+0

Conozco dos formas de analizar el SoapObject. 1. Implemente la interfaz 'org.ksoap2.serialization.Marshal' y regístrese para la etiqueta SOAP correspondiente. 2. Otra forma es usar los métodos 'getProperty()' y 'getAttribute()' de SoapObject para obtener los valores correspondientes. HTH. –

+0

También mira esto. http://www.drdobbs.com/article/printableArticle.jhtml;jsessionid=OKCYS4LV2OQDPQE1GHPCKHWATMY32JVN?articleId=208800166&dept_url=/mobility/ –

1

espero que esto sea útil para usted:

SoapObject result = (SoapObject) envelope.bodyIn; 
String response = result.getProperty(0).toString(); 
0

algo así:

SoapObject response = (SoapObject) envelope.getResponse(); 
    yourArray=new String[response.getPropertyCount()]; 

    for(int i=0;i<response.getPropertyCount();i++){  
     Object property = response.getProperty(i); 
     if(property instanceof SoapObject){ 
      SoapObject final_object = (SoapObject) property; 
      yourArray[i] = final_object.getProperty("YOUR_PROPERTY_NAME"); 
    } 
}