Question Comment appeler un service Web SOAP sur Android [fermé]


J'ai beaucoup de mal à trouver de bonnes informations sur la façon d'appeler un service Web SOAP / WSDL standard avec Android. Tout ce que j'ai pu trouver est soit des documents très alambiqués et des références à "kSoap2" et ensuite un peu à propos de l'analyse manuelle avec SAXO. OK, c'est bien, mais c'est en 2008, alors j'ai pensé qu'il devrait y avoir une bonne bibliothèque pour appeler des services Web standard.

Le service Web est simplement créé en NetBeans. Je voudrais avoir un support IDE pour générer les classes de plomberie. J'ai juste besoin de la manière la plus simple / la plus élégante de contacter un WSDL service Web basé sur un téléphone Android.


510
2017-11-18 01:32


origine


Réponses:


Android ne fournit aucune sorte de bibliothèque SOAP. Vous pouvez soit écrire le vôtre, soit utiliser quelque chose comme kSOAP 2. Comme vous le constatez, d'autres ont pu compiler et utiliser kSOAP2 dans leurs propres projets, mais je n'ai pas eu à le faire.

Google a montré, à ce jour, peu d'intérêt à ajouter une bibliothèque SOAP à Android. Mon soupçon pour cela est qu'ils préfèrent supporter les tendances actuelles dans les services Web vers les services basés sur REST, et utiliser JSON comme format d'encapsulation de données. Ou, en utilisant XMPP pour la messagerie. Mais c'est juste une conjecture.

Les services Web basés sur XML sont une tâche légèrement non-triviale sur Android en ce moment. Ne connaissant pas NetBeans, je ne peux pas parler des outils disponibles, mais je suis d’accord pour dire qu’une meilleure bibliothèque devrait être disponible. Il est possible que XmlPullParser vous évitera d'utiliser SAX, mais je ne sais pas grand-chose à ce sujet.


232
2017-11-19 21:50



org.apache.http.impl.client.DefaultHttpClient vient 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);

95
2018-01-08 22:17



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/


56
2017-10-10 10:57



Pour appeler un service Web depuis un appareil mobile (en particulier sur un téléphone Android), j'ai utilisé un moyen très simple de le faire. Je n'ai utilisé aucune API de client de service Web pour tenter d'appeler le service Web. Mon approche est la suivante pour faire un appel.

  1. Créer une connexion HTTP simple par en utilisant l'API standard Java HttpURLConnection.
  2. Former une requête SOAP (Tu peux faire aide de SOAPUI pour faire un SOAP demande.)
  3. Définissez l'indicateur doOutPut sur true.
  4. Définir des valeurs d'en-tête HTTP comme content-length, Contenu type, et User-agent. N'oublie pas pour définir la valeur Content-length car elle est obligatoire.
  5. Ecrire toute la requête SOAP dans le flux de sortie.
  6. Appelez la méthode pour établir une connexion et recevoir la réponse (Dans mon cas j'ai utilisé getResonseCode).
  7. Si votre code de réponse a été reçu
    1. Cela signifie que vous avez réussi à appeler le service Web.
  8. Maintenant, prenez un flux d'entrée sur le même Connexion HTTP et recevoir le objet chaîne Cet objet chaîne est une réponse SOAP.
  9. Si le code de réponse est autre que 200 puis prendre un ErrorInput diffuser sur même HTTPobject et recevoir le erreur le cas échéant.
  10. Analyser la réponse reçue  en utilisant SAXParser (dans mon cas) ou  DOMParaser ou toute autre analyse  mécanisme.

J'ai mis en place cette procédure pour le téléphone Android, et il fonctionne avec succès. Je suis capable d'analyser la réponse même si elle est supérieure à 700 Ko.


30
2018-02-04 10:55



SOAP est une technologie inadaptée à utiliser sur Android (ou les appareils mobiles en général) en raison de la surcharge de traitement / analyse requise. 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, je suis désolé pour vous, le meilleur conseil que je puisse vous donner est de ne pas utiliser SOAP.


27
2018-01-12 17:04



Il ya environ un an, je lisais ce fil essayant de comprendre comment faire des appels SOAP sur Android - les suggestions pour construire mon propre en utilisant HttpClient ont abouti à moi construire ma propre bibliothèque SOAP pour Android:

IceSoap

Fondamentalement, il vous permet de créer des enveloppes à envoyer via une simple API Java, puis de les analyser automatiquement en objets que vous définissez via XPath ..., par exemple:

<Dictionary>
    <Id></Id>
    <Name></Name>
</Dictionary>

Devient:

@XMLObject("//Dictionary")
public class Dictionary {
    @XMLField("Id")
    private String id;

    @XMLField("Name")
    private String name;
}

Je l'utilisais pour mon propre projet mais je pensais que cela pourrait aider d'autres personnes alors j'ai passé du temps à le séparer et à le documenter. J'adorerais vraiment que certaines de vos âmes pauvres qui trébuchent sur ce sujet en faisant des recherches sur "SOAP Android" puissent tenter le coup et en retirer un avantage.


23
2018-01-29 11:56



N'OUBLIEZ PAS D'AJOUTER ksoap2.jar dans votre projet et ajoutez également le   Autorisation INTERNET dans le fichier AndroidManifest

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class WebserviceActivity extends Activity {

    private static final String NAMESPACE = "https://api.authorize.net/soap/v1/";
    private static final String URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl"; 
    private static final String SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest";
    private static final String METHOD_NAME = "AuthenticateTest";
    private TextView lblResult;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lblResult = (TextView) findViewById(R.id.tv);

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        request.addProperty("name","44vmMAYrhjfhj66fhJN");
        request.addProperty("transactionKey","9MDQ7fghjghjh53H48k7e7n");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);

            //SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            // SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;


            lblResult.setText(resultsRequestSOAP.toString());
            System.out.println("Response::"+resultsRequestSOAP.toString());


        } catch (Exception e) {
            System.out.println("Error"+e);
        }

    }
}

23
2018-06-07 06:50



J'ai eu mon rendez-vous avec KSOAP; J'ai choisi une approche plutôt simple.

Étant donné un fichier WSDL, créez des modèles de demande SOAP pour chaque demande (par exemple, à l'aide de l'interface utilisateur SOAP), puis remplacez les valeurs à transmettre dans le code. POSTEZ ces données au point de terminaison du service à l'aide de l'instance DefaultHttpClient et récupérez le flux de réponse. Analyser le flux de réponses à l'aide d'un analyseur XML Pull.


20
2017-12-21 16:10



Vous pouvez jeter un oeil à WSClient ++


16
2017-07-15 08:52



J'ai créé un nouveau client SOAP pour la plate-forme Android. Il utilise une interface générée par JAX-WS, mais ce n'est qu'une preuve de concept jusqu'à présent.

Si vous êtes intéressé, essayez l'exemple et / ou regardez la source à AndroidSOAP.


15
2017-10-19 15:42