569 Stimmen

Wie man einen SOAP-Webdienst unter Android aufruft

Ich habe große Schwierigkeiten, gute Informationen darüber zu finden, wie man einen Standard-SOAP/WSDL-Webdienst mit Android aufruft. Alles, was ich finden konnte, sind entweder sehr verworrene Dokumente und Verweise auf "kSoap2" und dann etwas über das manuelle Parsen des Ganzen mit SAX . OK, das ist in Ordnung, aber es ist 2008, so dass ich dachte, es sollte einige gute Bibliothek für den Aufruf von Standard-Webdienste sein.

Der Webdienst ist im Grunde nur ein in NetBeans . Ich möchte IDE-Unterstützung für die Generierung der Klempnerklassen haben. Ich brauche nur den einfachsten/elegantesten Weg, um mit einer WSDL basierten Webdienst von einem Android-basierten Telefon aus.

252voto

foxxtrot Punkte 10954

Android bietet keine SOAP-Bibliothek an. Sie können entweder Ihre eigene schreiben, oder etwas wie kSOAP 2 . Wie Sie anmerken, konnten andere kSOAP2 kompilieren und in ihren eigenen Projekten verwenden, aber ich musste das nicht.

Google hat bisher wenig Interesse gezeigt, eine SOAP-Bibliothek zu Android hinzuzufügen. Ich vermute, dass sie lieber den aktuellen Trend bei Webdiensten hin zu REST-basierten Diensten und der Verwendung von JSON als Datenkapselungsformat unterstützen wollen. Oder die Verwendung von XMPP für den Nachrichtenaustausch. Aber das ist nur eine Vermutung.

XML-basierte Webdienste sind unter Android derzeit eine nicht ganz triviale Aufgabe. Da ich NetBeans nicht kenne, kann ich nichts zu den dort verfügbaren Tools sagen, aber ich stimme zu, dass eine bessere Bibliothek verfügbar sein sollte. Es ist möglich, dass der XmlPullParser Ihnen die Verwendung von SAX erspart, aber ich weiß nicht viel darüber.

99voto

Neil Punkte 2256

org.apache.http.impl.client.DefaultHttpClient ist im Android SDK standardmäßig enthalten. Damit können Sie eine Verbindung zur WSDL herstellen.

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);

60voto

Viktor Brešan Punkte 4653

Es stimmt, dass SOAP aufgrund seines Overheads nicht die beste Wahl für den Datenaustausch mit mobilen Geräten ist. Sie könnten sich jedoch in einer Situation befinden, in der Sie das Format der Serverausgabe nicht kontrollieren können.

Wenn Sie also bei SOAP bleiben müssen, gibt es hier eine für Android gepatchte kSOAP2-Bibliothek:
http://code.google.com/p/ksoap2-Android/

31voto

Priyanjan Punkte 329

Um einen Webdienst von einem mobilen Gerät aus aufzurufen (insbesondere von einem Android-Telefon aus), habe ich eine sehr einfache Methode verwendet, um dies zu tun. Ich habe keine Webdienst-Client-API verwendet, um den Webdienst aufzurufen. Mein Ansatz ist wie folgt, um einen Anruf zu tätigen.

  1. Erstellen Sie eine einfache HTTP-Verbindung mit Verwendung der Java-Standard-API HttpURLConnection .
  2. Bilden Sie eine SOAP-Anfrage. (Sie können die Hilfe von SOAPUI eine SOAP-Anfrage stellen Anfrage zu erstellen.)
  3. Setzen Sie das doOutPut-Flag auf true.
  4. Setzen Sie HTTP-Header-Werte wie content-length, Inhalt Typ und Benutzer-Agent. Vergessen Sie nicht den Wert content-length zu setzen, da er obligatorisch ist.
  5. Schreiben Sie die gesamte SOAP-Anfrage in den Ausgabestrom.
  6. Rufen Sie die Methode auf, um eine Verbindung herzustellen und die Antwort zu erhalten (In meinem Fall habe ich getResonseCode ).
  7. Wenn Sie einen Antwortcode als
    1. Das bedeutet, dass es Ihnen gelungen ist, einen Webdienst aufzurufen.
  8. Nehmen Sie nun einen Eingabestrom auf demselben HTTP-Verbindung und empfangen Sie das String-Objekt. Dieses String-Objekt ist eine SOAP-Antwort.
  9. Ist der Antwortcode ein anderer als 200, dann nehmen Sie eine ErrorInput weiterströmen gleichen HTTP-Objekt und erhalten den Fehler, falls vorhanden.
  10. Parsen der empfangenen Antwort mit SAXParser (in meinem Fall) oder DOMParaser oder einem anderen Parser Mechanismus.

Ich habe dieses Verfahren für das Android-Telefon implementiert, und es wird erfolgreich ausgeführt. Ich bin in der Lage, die Antwort zu analysieren, auch wenn sie mehr als 700 KB groß ist.

29voto

jasonhudgins Punkte 2787

SOAP ist eine schlecht geeignete Technologie für den Einsatz auf Android (oder mobilen Geräten im Allgemeinen) wegen der Verarbeitung / Parsing Overhead, die erforderlich ist. Ein REST-Dienst ist eine leichtere Lösung und das ist, was ich vorschlagen würde. Android wird mit einem SAX-Parser ausgeliefert, der ziemlich trivial zu verwenden ist. Wenn Sie unbedingt erforderlich sind, um SOAP auf einem mobilen Gerät zu behandeln/parsen, dann tut es mir leid für Sie, der beste Rat, den ich anbieten kann, ist einfach nicht zu SOAP verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X