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 :
- ksoap2 est une librairie cliente pour web services SOAP pour des environnements java restreins comme les Applets ou applications J2ME (CLDC / CDC / MIDP).
- XML Pull Parsing
- Téléchargement xmlpull_1_1_3_4c_src.zip depuis http://www.xmlpull.org/v1/download/
- kxml2
- Téléchargement kxml2-src-2.3.0.zip depuis la page de téléchargement kXML
- kobjects est une collection de petits ("kilobyte") projets destinés à Java 2 Micro Edition (J2ME/MIDP).
- Dépôt CVS : org.kobjects.base64.Base64.java
- Dépôt CVS : org.kobjects.isodate.IsoDate.java
- kobjects (kilobyte Objects for Mobile Devices)
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 :
- Une bonne explication française + exemple sur SOAP et KSOAP
- SOAP-enabling Mobile Devices with KSOAP-2 (2008)
- Low Bandwidth SOAP et son exemple de code AlerterClient (2003)
- Exemple d'implémentation de Ksoap en développement en serveur PHP et client JAVA
- Exemples Ksoap sur leur dépôt SVN
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
1 De 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