Bonjour,

Je suis en train de développer un application Android qui devra accéder à un web service.
Après de nombreuses recherches, je me suis orienté vers Axis 2 pour les web services (avec Tomcat) et ksoap2 pour le client Android.

Étant débutant dans le monde des web services, je viens ici demander quelques explications.

J'ai donc effectué un développement top-down en m'inspirant d'un tutoriel: http://www.ibm.com/developerworks/we.../section2.html
Donc création du WSDL puis avec les outils de Axis 2, génération automatique des classes JAVA du service et du client.
Avec un client JAVA traditionnel, ça marche.

En revanche, lorsque j'essaie de développer le client avec ksoap2, cela ne fonctionne pas et j'ai l'erreur "ADBException Unexpected subelement" qui se déclenche lors de la commande getResponse. J'ai du mal à voir ou cela ne fonctionne pas.
- Est-ce le WSDL qui est incorrect ? (les espaces de noms ?)
- Mes paramètres de ma méthode qui appel le WS avec ksoap2 ? (J'ai vu beaucoup d'exemple mais pas un mettait la même chose...)
- Où alors cela n'est pas compatible ? (Ce qui m'étonnerais...)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
        private static final String NAMESPACE = "http://www.monsite.com/axis2/services/StockQuoteService/";
	private static final String METHOD_NAME = "getPrice";
	private static final String SOAP_ACTION = "http://www.monsite.com/axis2/services/StockQuoteService/getPrice";
	private static final String URL = "http://www.monsite.com/axis2/services/StockQuoteService?wsdl";
 
	SoapObject reqWS(String property, String value) throws IOException, XmlPullParserException {
 
		// Création de la requête SOAP
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		request.addProperty("getPrice", "ABCD");
		//Toutes les données demandées sont mises dans une enveloppe
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//Préparation de la requête
		envelope.setOutputSoapObject(request);
		HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
		androidHttpTransport.debug = true;
		//Envoi de la requête
		androidHttpTransport.call(SOAP_ACTION, envelope);
		Toast.makeText(this.context, "dump : "+androidHttpTransport.requestDump, Toast.LENGTH_LONG).show();
		Toast.makeText(this.context, "dump : "+androidHttpTransport.responseDump, Toast.LENGTH_LONG).show();
		//Obtention du résultat
		SoapObject soapResult = (SoapObject) envelope.getResponse();
 
		return soapResult;
	}
Merci d'avance pour vos réponses,

Pierre