J'ai quelques services Web qui utilisent WSDL/SOAP pour la communication. Plus précisément, j'utilise PHP et Nusoap pour les créer. Comment puis-je utiliser ces services Web sur Android? Je vais obtenir un nouveau téléphone Android bientôt , donc j'ai besoin de savoir.
C'est facile à faire avec Windows Mobile et Visual Studio.
Merci
Android n'est pas fourni avec la bibliothèque SOAP. Cependant, vous pouvez télécharger une bibliothèque tierce ici:
https://github.com/simpligility/ksoap2-Android
Si vous avez besoin d'aide pour l'utiliser, vous trouverez peut-être ce fil utile:
Comment appeler un service Web .NET à partir de Android en utilisant KSOAP2?
j'ai fondé cet outil pour générer automatiquement wsdl en Android,
http://www.wsdl2code.com/Example.aspx
public void callWebService(){
SampleService srv1 = new SampleService();
Request req = new Request();
req.companyId = "1";
req.userName = "userName";
req.password = "pas";
Response response = srv1.ServiceSample(req);
}
J'ai créé un nouveau client SOAP pour la plate-forme Android, c'est une interface générée par JAX-WS, mais ce n'est qu'une preuve de concept encore.
Si vous êtes intéressé, essayez l'exemple et/ou regardez la source: http://wiki.javaforum.hu/display/ANDROIDSOAP/Home
Mise à jour: la version 0.0.4 est sortie avec tutoriel:
http://wiki.javaforum.hu/display/ANDROIDSOAP/2012/04/16/Version+0.0.4+released
http://wiki.javaforum.hu/display/ANDROIDSOAP/Step+by+step+tutorial
Icesoap , que j'ai trouvé hier, semble prometteur. Il a fonctionné sur un test de base, mais il manque plus d'exemples.
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://example.com/CRM/Service.svc";
private static final String SOAP_ACTION = "http://tempuri.org/Login";
private static final String METHOD_NAME = "Login";
//calling web services method
String loginresult=callService(username,password,usertype);
//calling webservices
String callService(String a1,String b1,Integer c1) throws Exception {
Boolean flag=true;
do
{
try{
System.out.println(flag);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pa1 = new PropertyInfo();
pa1.setName("Username");
pa1.setValue(a1.toString());
PropertyInfo pb1 = new PropertyInfo();
pb1.setName("Password");
pb1.setValue(b1.toString());
PropertyInfo pc1 = new PropertyInfo();
pc1.setName("UserType");
pc1.setValue(c1);
System.out.println(c1+"this is integer****s");
System.out.println("new");
request.addProperty(pa1);
request.addProperty(pb1);
request.addProperty(pc1);
System.out.println("new2");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
System.out.println("new3");
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
System.out.println("new4");
try{
androidHttpTransport.call(SOAP_ACTION, envelope);
}
catch(Exception e)
{
System.out.println(e+" this is exception");
}
System.out.println("new5");
SoapObject response = (SoapObject)envelope.bodyIn;
result = response.getProperty(0).toString();
flag=false;
System.out.println(flag);
}catch (Exception e) {
// TODO: handle exception
flag=false;
}
}
while(flag);
return result;
}
///
Je viens de terminer une Android App sur wsdl, j'ai quelques conseils à ajouter:
1.la ressource la plus importante est www.wsdl2code.com
2.vous pouvez prendre votre nom d'utilisateur et votre mot de passe avec en-tête, qui sont encodés avec Base64, tels que:
String USERNAME = "yourUsername";
String PASSWORD = "yourPassWord";
StringBuffer auth = new StringBuffer(USERNAME);
auth.append(':').append(PASSWORD);
byte[] raw = auth.toString().getBytes();
auth.setLength(0);
auth.append("Basic ");
org.kobjects.base64.Base64.encode(raw, 0, raw.length, auth);
List<HeaderProperty> headers = new ArrayList<HeaderProperty>();
headers.add(new HeaderProperty("Authorization", auth.toString())); // "Basic V1M6"));
Vectordianzhan response = bydWs.getDianzhans(headers);
3. Parfois, vous n'êtes pas sûr non plus Android ou le serveur Web est erroné, puis le débogage est important. De plus, vous devez attraper le package IP avec adb.
try {
Logg.i(TAG, "2 ");
Object response = androidHttpTransport.call(SOAP_ACTION, envelope, headers);
Logg.i(TAG, "requestDump: " + androidHttpTransport.requestDump);
Logg.i(TAG, "responseDump: "+ androidHttpTransport.responseDump);
Logg.i(TAG, "3");
} catch (IOException e) {
Logg.i(TAG, "IOException");
}
catch (XmlPullParserException e) {
Logg.i(TAG, "requestDump: " + androidHttpTransport.requestDump);
Logg.i(TAG, "responseDump: "+ androidHttpTransport.responseDump);
Logg.i(TAG, "XmlPullParserException");
e.printStackTrace();
}