2010-06-14 7 views
5

Aufruf eines .net SOAP1.1 Webdienstes von Android mit ksoap2 lib Ich habe ein Problem mit der Umwandlung von Antworten auf ein benutzerdefiniertes Objekt festgestellt. Zum Beispiel heißt der folgende Code nach httpTransport.call (soapAction, soapEnvelope); und haben Daten im Inneren. Aber ich kann es weder auf SoapObject noch auf ein bestimmtes Objekt anwenden, wie ich in einigen Beispielen gesehen habe, ich bekomme CastException oder einfach nichts. Wenn jemand weiß, wie man damit umgeht, bitte helfen.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; 
} 

Antwort

5

Zuerst versuchen und sehen, ob Sie eine Antwort erhalten.

Object obj = envelope.bodyIn; 

Wenn dies obj ist nicht null dann versuchen Sie Folgendes.

SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

Meine Vermutung ist, dass dies funktionieren sollte, wenn Sie eine Antwort bekommen.

Sie müssen KSOAP mitteilen, was StatusSetting Objekt ist und how, um eine SOAP-Antwort zu einem StatusSetting Objekt zu konvertieren.

+0

Danke, es funktioniert, ich Daten in der SoapObject haben. Könnten Sie bitte eine Anweisung geben, wie SoapObject zu analysieren ist. Ich meine, lesen Sie Eigenschaften irgendwie und suchen Sie nach Daten, die ich brauche. Ich habe versucht, resultRequestSOAP.properties zu erhalten es funktioniert (es wird wie JSON-Daten) im Debug-Modus, aber Eigenschaften ist nicht offene Methode im Code zu verwenden. – Maxim

+0

Ich kenne zwei Möglichkeiten, das SoapObject zu analysieren. 1. Implementieren Sie die Schnittstelle 'org.ksoap2.serialization.Marshal' und registrieren Sie sich für das entsprechende SOAP-Tag. 2. Eine andere Möglichkeit besteht darin, die Methoden 'getProperty()' und 'getAttribute()' von SoapObject zu verwenden, um die entsprechenden Werte zu erhalten. HTH. –

+0

Schauen Sie sich das auch an. http://www.drdobbs.com/article/printableArticle.jhtml;jsessionid=OKCYS4LV2OQDPQE1GHPCKHWATMY32JVN?articleId=208800166&dept_url=/mobility/ –

1

Ich hoffe, dass dies für Sie hilfreich sein:

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

so ähnlich:

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"); 
    } 
}