Partant du tuto J2ME KSOAP2 de Jean-Pierre Clair, j'ai rencontré les problèmes résolus ci dessous :

Premier problème intervenu sous Eclipse lors la compilation J2ME avec l'erreur suivante :
java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException

J'avais bien inclus le ksoap2-j2me-core-2.1.2.jar, mais pour permettre la compilation il faut les fichiers sources en .java. Voici donc où les récupérer :

Ensuite vous faite un nouveau projet nommé KSOAP2, dans lequel vous déposez toutes ces sources. Après quoi il faut ajouter à votre projet J2ME, dans le build path, l'inclusion du projet KSOAP2 également dans le Order and Export.

Voilà un simple J2ME->Create Package créera vos .jad et .jar dans le dossier deployed. Il ne reste plus qu'a les déployer sur votre mobile/PDA pour tester cela.

Deuxième problème avec l'émulateur J2ME

Lors de l'émulation avec Run As->Emulated J2ME Midlet on obtient lors de l'appel du WS :

Warning: To avoid potential deadlock, operations that may block, such as 
 networking, should be performed in a different thread than the 
 commandAction() handler.

Après une recherche sur le net de "Warning: To avoid potential deadlock, operations that may block, such as networking, should be performed in a different thread than the commandAction() handler.", on constate qu'il faut le lancer dans un Thread différent comme l'explique le message :

new Thread(new Runnable(){
   public void run()
   {
      try{
         //ici votre fonction à appeler qui demande les droits de se connecter à internet à cause de la sécurité du mobile
         appelWs();
      }catch(Exception e){}
   }
   }).start();
Troisième erreur due à un mauvais retour de mon WS
org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG </{http://schemas.xmlsoap.org/soap/envelope/}SOAP-ENV:Fault>@2:296 in java.io.InputStreamReader@84aee8b) 
at org.kxml2.io.KXmlParser.exception(+47)
at org.kxml2.io.KXmlParser.require(+83)
at org.ksoap2.SoapEnvelope.parse(+155)
at org.ksoap2.transport.Transport.parseResponse(+30)
at org.ksoap2.transport.HttpTransport.call(+294)
Complex Type

En cours de recherche... car c'est possible mais ce n'est pas si simple. Commencez par lire le Wiki Ksoap2 :

Ressources
  • KSOAP2 API JavaDoc
  • Client SOAP en ligne facilement utilisable permettent de vérifier le fonctionnement de votre serveur de web service en accédant à son WSDL : SoapClient