553 votes

Comment appeler le service Web SOAP dans Android

J'ai beaucoup de mal à trouver de bonnes informations sur la façon d'appeler un standard SOAP/WSDL du service web avec Android. Tout ce que j'ai pu trouver sont très alambiqué les documents et les références à "kSoap2", et puis un peu sur l'analyse des tout manuellement avec SAX. OK, c'est bon, mais c'est en 2008 alors j'ai pensé que il devrait y avoir une bonne bibliothèque pour l'appel de services web standard.

Le service web est en fait juste un créé dans NetBeans. Je voudrais avoir une IDE de soutien pour la génération de la plomberie classes. J'ai juste besoin de la plus facile et la plus élégante façon de communiquer avec une WSDL du service web à partir d'un téléphone Android.

245voto

foxxtrot Points 6491

Android n'est pas de fournir toute sorte de SAVON de la bibliothèque. Vous pouvez soit écrire votre propre, ou utiliser quelque chose comme kSOAP 2. Comme vous le notez, d'autres ont été en mesure de compiler et d'utiliser kSOAP2 dans leurs propres projets, mais je n'ai pas eu.

Google a indiqué, à ce jour, peu d'intérêt à l'ajout d'un SAVON de la bibliothèque pour Android. Mon soupçon est que ils préfèrent soutenir les tendances actuelles dans les Services Web vers des services basés sur REST et JSON à l'aide de données de format d'encapsulation. Ou, en utilisant XMPP pour la messagerie. Mais ce n'est que conjecture.

Basé sur XML, les services web sont un peu tâche non triviale sur Android en ce moment. Ne sachant pas NetBeans, je ne peux pas parler pour les outils disponibles là-bas, mais je suis d'accord qu'une meilleure bibliothèque doit être disponible. Il est possible que le XmlPullParser vous permettra d'économiser de l'aide de SAX, mais je ne sais pas beaucoup parler.

99voto

Neil D Points 1321

org.apache.http.impl.client.DefaultHttpClient est inclus dans le SDK Android par défaut. Cela vous permettra de vous connecter au WSDL.

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

59voto

Viktor Brešan Points 2458

Il est vrai qu'en raison de ses frais généraux, SOAP n'est pas le meilleur choix pour l'échange de données avec les appareils mobiles. Cependant, vous risquez de vous retrouver dans une situation dans laquelle vous ne contrôlez pas le format de sortie du serveur.

Donc, si vous devez rester avec SOAP, il y a une bibliothèque kSOAP2 patché pour Android ici:
http://code.google.com/p/ksoap2-android/

31voto

Priyanjan Points 249

Pour appeler un service web à partir d'un appareil mobile (surtout sur un téléphone Android), j'ai utilisé un moyen très simple de le faire. Je n'ai pas utilisé de n'importe quel client de service web API dans la tentative d'appeler le service web. Mon approche est comme suit pour effectuer un appel.

  1. Créer une simple connexion par HTTP à l'aide de l'API standard de Java HttpURLConnection.
  2. Formulaire de requête SOAP. (Vous pouvez faire l'aide de SOAPUI pour faire un SAVON la demande).
  3. Ensemble doOutPut drapeau comme vrai.
  4. Définir l'en-tête HTTP valeurs comme contenu-durée, son Contenu type, et de l'agent Utilisateur. Ne pas oublier pour définir le Contenu de longueur car c'est obligatoire.
  5. Écrire ensemble la demande SOAP pour le flux de sortie.
  6. L'appel à la méthode pour établir une connexion et recevoir la réponse (Dans mon cas, j'ai utilisé getResonseCode).
  7. Si votre reçu de réponse code
    1. Elle signifie que vous avez réussi à l'appel du service web.
  8. Maintenant, prenez un flux d'entrée sur la même Connexion HTTP et de recevoir l' objet de type string. Cette chaîne de caractères de l'objet est une réponse SOAP.
  9. Si le code de réponse est autre que 200 puis prendre un ErrorInput flux sur même HTTPobject et de recevoir l' erreur le cas échéant.
  10. Analyser le reçu de réponse à l'aide de SAXParser (dans mon cas) ou DOMParaser ou de toute autre analyse le mécanisme.

J'ai mis en œuvre cette procédure pour le téléphone Android, et il est en cours d'exécution. Je suis en mesure d'analyser la réponse même si c'est plus de 700 KO.

30voto

jasonhudgins Points 1732

SOAP est une technologie inadaptée à utiliser sur Android (ou sur les appareils mobiles en général) en raison des frais de traitement / d'analyse requis. Un service REST est une solution plus légère et c'est ce que je suggère. Android est livré avec un analyseur SAX, et il est assez trivial à utiliser. Si vous êtes absolument obligé de gérer / analyser SOAP sur un appareil mobile, alors je suis désolé pour vous, le meilleur conseil que je puisse vous offrir est de ne pas utiliser SOAP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X