Aller au contenu | Aller au menu | Aller à la recherche


J2ME : Web Services avec KSOAP2

Si vous souhaitez communiquer par WS depuis votre mobile, la lib KSOAP2 est faite pour vous si votre device ne supporte la JSR172.

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

Commentaires

1. Le jeudi, avril 22 2010, 00:08 par cosmosINT

Tu peux utiliser l'outil sur https://sourceforge.net/projects/ks... pour générer automatiquement le code en J2ME invoquant le web service

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet