Partage
  • Partager sur Facebook
  • Partager sur Twitter

J2ME et SOAP

kSOAP.. :D

Sujet résolu
    4 mars 2010 à 23:30:28

    Bonsoir,

    Je poste ici, il y a aussi en fait un partie php mais le plus important et la majeure partie est du JAVA donc voilà.

    Je vous explique d'abord mon sujet :
    Je désire créer une appli J2ME (je bosse sous éclipse) qui permet d'afficher un téléphone [wireless toolkit], avec des infos (pour plus tard mettre l'api sur un vrai téléphone) et donc d'afficher des infos provenant d'une BD par des requêtes SOAP.


    J'ai donc fait quelques recherches et vu qu'il fallait en fait pour le J2ME utiliser kSOAP. Ce dernier a été téléchargé. Je l'ai ensuite installé et intégré au classpath de mon projet.

    J'ai aussi trouvé un tuto : ici
    et apparemment son corrigé car déjà eu quelques soucis :ici.

    Voilà j'ai d'abord fait le serveur en PHP comme dit et je l'ai placé dans localhost/server_IAADD/server.php (avec wamp).
    J'ai aussi copié/collé le wsdl où j'ai modifié en bas le link vers le server.php.

    J'ai essayé de coller le client "php", mais soucis :

    http://localhost/server_IAADD/client.php --> Fatal error: Class 'SoapClient' not found in D:\wamp\www\server_IAADD\client.php on line 6

    Voici le code :
    <?php
    // première étape : désactiver le cache lors de la phase de test
    ini_set("soap.wsdl_cache_enabled", "0");
    
    // lier le client au fichier WSDL
    $clientSOAP = new SoapClient('HelloYou.wsdl');
    
    // executer la methode getHello
    echo $clientSOAP->getHello('Marc','Assin');
    
    ?>
    


    Bon pas tout compris !
    D'ou peut provenir ce premier soucis ? Ais-je loupé quelque chose ?
    Le tuto me paraît que très léger niveau explications détaillées..


    Alors je me suis dis, bon testons l'api JAVA ????

    J'me lance, je colle le truc du client JAVA ! Jusque là pas compliqué hein ? ^^

    Je modifie les lignes suivantes pour avoir les bonnes valeurs :
    // nom du service
    		String nomService		= "urn:HelloYou";
    		
    		// url du service
    		String urlService= "http://localhost/server_IAADD/server.php";
    


    Je lance le tout et devinez quoi ??

    Eh non non rêvez pas, ça marchait pas au contraire !!!!

    POF :
    Running with storage root C:\Users\Ju'\j2mewtk\2.5.2\appdb\DefaultGrayPhone
    Running with locale: French_France.1252
    Running in the identified_third_party security domain
    java.lang.NoClassDefFoundError: org/ksoap2/transport/Transport
    at com.sun.midp.midlet.MIDletState.createMIDlet(+29)
    at com.sun.midp.midlet.Scheduler.schedule(+52)
    at com.sun.midp.main.Main.runLocalClass(+28)
    at com.sun.midp.main.Main.main(+80)
    Execution completed.
    3409424 bytecodes executed
    32 thread switches
    1672 classes in the system (including system classes)
    17732 dynamic objects allocated (533240 bytes)
    3 garbage collections (458556 bytes collected)


    Alos on dirait qu'on trouve pas la classe mais pourquoi ?

    PS : mon workspace est dans D:\eclipse ou dans le style
    et le localhost est donc dans D:\wamp\www

    Alors est-ce un soucis de zone des fichiers ?

    Si quelqu'un peut m'expliquer comment tout cela fonctionne parce que là je me sens légèrement perdu !!
    C'est important je dois me servir de ceci pour un projet tuteuré !


    MERCI :D
    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2010 à 12:33:03

      Bon pour ton problème de Class not found en PHP tu es sur de bien avoir fait un include du fichier contenant ta classe?
      Si tu as une classe A dans un Fichier A.php et que tu veux utiliser la classe A dans un fichier B alors faut mettre dans ton fichier B:
      <?php
      include 'A.php';
      $monA= new A();
      ?>


      Pour ton probleme java: tu es sur d'avoir pas oublier un import du genre :
      --> import org.ksoap2.transport.HttpTransport;

      Si ce n'est pas le cas, as-tu ajouté le jar dans tes external librairies pour ton projet sous eclipse?


      A bientot
      • Partager sur Facebook
      • Partager sur Twitter
        5 mars 2010 à 14:03:42

        D'abord merci de m'avoir répondu !

        Citation : cucualex118

        Bon pour ton problème de Class not found en PHP tu es sur de bien avoir fait un include du fichier contenant ta classe?
        Si tu as une classe A dans un Fichier A.php et que tu veux utiliser la classe A dans un fichier B alors faut mettre dans ton fichier B:
        <?php
        include 'A.php';
        $monA= new A();
        ?>



        Alors euhhh une classe ?
        J'ai le serveur, le wsdl, le client et c'est tout hein !!! Comme dit dans le tuto, je n'a pas crée de classe ou quoi que ce soit d'autre !!?

        Que faut-il faire à ton avis ?

        Citation : cucualex118


        Pour ton probleme java: tu es sur d'avoir pas oublier un import du genre :
        --> import org.ksoap2.transport.HttpTransport;

        Si ce n'est pas le cas, as-tu ajouté le jar dans tes external librairies pour ton projet sous eclipse?



        Pour une réponse brève voici mes import :
        import javax.microedition.midlet.MIDlet;
        import javax.microedition.lcdui.Display;
        import javax.microedition.lcdui.Form;
        import javax.microedition.midlet.MIDletStateChangeException;
        import org.ksoap2.serialization.SoapObject;
        import org.ksoap2.serialization.SoapSerializationEnvelope;
        import org.ksoap2.transport.HttpTransport;
        

        L'import y est bien ! Donc pas de soucis de ce côté là !!


        Et voici ce que ça donne côté librairie :
        Image utilisateur

        • Partager sur Facebook
        • Partager sur Twitter
          5 mars 2010 à 14:17:41

          Ok pour le probleme de PHP c'est resolu : tu as du oublier de lancer le module php_soap je pensais que tu l'avais fait mais ca vient de la c'est sur et certain.
          Va dans ton php.ini retire le ';' avant le module php_soap. et relance ton serveur php.


          Pour le probleme java: C'est sur que ca vient du fait qu'il arrive pas trouver la class Transport dans le package transport de Ksoap2. Faut essaye de le mettre dans un dossier qui a pas de caractere genre quote ou autre. Et dis moi si le message d'erreur est le meme.

          A+
          • Partager sur Facebook
          • Partager sur Twitter
            5 mars 2010 à 14:36:34

            Heu dans mon php.ini j'ai 80 000 lignes avec soap marqué !!! C'est laquelle que je dois dé-commenter ?

            Et pour le java je vois pas très bien ce que tu veux dire !! ?

            Merci en tout cas
            • Partager sur Facebook
            • Partager sur Twitter
              5 mars 2010 à 14:45:16

              tu as cette ligne: ;extension=php_soap.dll ?
              Si oui tu retire le ; avant extension et tu relances php .
              Dit moi si c'est bon.

              Pour ton probleme java, j'ai vu que tu as mis comme chemin pour ton jar : D:\cours\P'tut.
              Essaye de mettre un chemin sans quote ( ' ). On sait jamais si il arrive pas a lire le chemin est qu'il s'arette à : D:\cours\P c'est sur que ca marchera pas. Je sais pas trop comment eclipse gere ca mais essaye de changer le chemin absolu
              • Partager sur Facebook
              • Partager sur Twitter
                5 mars 2010 à 14:49:28

                IT WORKS !!!!!
                Merci pour ça !!!

                PHP RESOLU !!!


                Reste le JAVA :D
                Je ne comprends pas !!

                Il a du mal à lancer catalina !!!!
                Tomcat essaie de lancer les protocoles mais ça ne marche pas !! J'ai pourtant les Variables de session HOME_JAVA et l'autre :s

                Par contre, j'ai une BD "testiaadd", avec une table "informations"
                Je voudrais aller chercher 2 valeurs dedans ! Comment faire ?
                J'ai essayé de modifier le wsdl, de mettre la méthode avec mysql --> connexion BD sur le serveur et de l'appeler avec le client mais :

                Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Server] Function 'getTemperature' doesn't exist in D:\wamp\www\server_IAADD\client.php:11 Stack trace: #0 [internal function]: SoapClient->__call('getTemperature', Array) #1 D:\wamp\www\server_IAADD\client.php(11): SoapClient->getTemperature() #2 {main} thrown in D:\wamp\www\server_IAADD\client.php on line 11

                Comment faire ?
                • Partager sur Facebook
                • Partager sur Twitter
                  5 mars 2010 à 15:01:51

                  explique toi un peu mieux c'est du charabia ce que tu racontes lol
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 mars 2010 à 15:57:17

                    Et bien le serveur TOMCAT ne veut pas se lancer ! Par ce qu'apparement on en a besoin pour faire du SOAP avec J2ME !?

                    Enfin, sinon comment faire ? L'API se lance et me met les erreurs au dessus !!!

                    Pour le php :
                    Je dois remplacer quoi dans le wsdl ?
                    Je comprends pas très bien comment il fonctionne !!!

                    Edit :
                    J'ai du nouveau !!!
                    J'ai réussi tomcat se lance !
                    Du coup now j'ai un "nouveau" soucis !
                    Voici l'erreur java :

                    Running with storage root C:\Users\Ju'\j2mewtk\2.5.2\appdb\DefaultGrayPhone
                    Warning: Failed to initialize WMA message routing support
                    Warning: Failed to initialize WMA message routing support

                    Running with locale: French_France.1252
                    Running in the identified_third_party security domain
                    java.lang.NoClassDefFoundError: org/ksoap2/transport/Transport
                    at com.sun.midp.midlet.MIDletState.createMIDlet(+29)
                    at com.sun.midp.midlet.Scheduler.schedule(+52)
                    at com.sun.midp.main.Main.runLocalClass(+28)
                    at com.sun.midp.main.Main.main(+80)
                    Execution completed.
                    3409326 bytecodes executed
                    19 thread switches
                    1672 classes in the system (including system classes)
                    17732 dynamic objects allocated (533224 bytes)
                    3 garbage collections (458540 bytes collected)


                    Alors voilà je cherche encore et toujours mais si quelqu'un sait....

                    merci
                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 mars 2010 à 16:26:23

                      c'est quoi cette fonction getTemperature ?? tu l'as dans ton client?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 mars 2010 à 16:30:12

                        J'utilisais avant jsr 172 pour un client java me, mais il se trouve que KSOAP2 touche plus de terminales que jsr 172.

                        Donc question pour toi, à quoi va te servir tomcat ? ^ ^' Inutile oubli-le ;)

                        Ne touche ni au serveur ni au fichier wsdl. Est-ce que tu as des notions en SOAP, WSDL ? ( si c'est pas le cas lis cet article : http://www.siteduzero.com/tutoriel-3-203276-les-services-web.html)
                        • tu lances ton KToolbar, tu crées un nouveua projet et tu le nommes HelloYou.
                        • le code Java ME (du tutoriel) tu le c/c dans un fichier .java, tu le places dans C:\WTK22\app\HelloYou\src
                        • tu c/c le .jar ksoap2-j2me-core-2.1.2 dans le dossier lib à côté du dossier src
                        • retourne dans KToolbar, build, run.


                        Tiens-moi au courant de tes résultats ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 mars 2010 à 16:34:57

                          Oui !! Et dans le client, et dans le serveur elle est définie et fait son truc !

                          <?php
                          // première étape : désactiver le cache lors de la phase de test
                          ini_set("soap.wsdl_cache_enabled", "0");
                          
                          // on indique au serveur à quel fichier de description il est lié
                          $serveurSOAP = new SoapServer('HelloYou.wsdl');
                          
                          // ajouter la fonction getHello au serveur
                          $serveurSOAP->addFunction('getHello');
                          
                          // lancer le serveur
                          if ($_SERVER['REQUEST_METHOD'] == 'POST')
                          
                          {
                          	$serveurSOAP->handle();
                          }
                          else
                          {
                          	echo 'désolé, je ne comprends pas les requêtes GET, veuillez seulement utiliser POST';
                          }
                          
                          function getHello($prenom, $nom)
                          {
                          	return 'Hello ' . $prenom . ' ' . $nom;
                          }
                          
                          function getTemperature() {
                          	//On se connecte au serveur
                          	$connec = mysql_connect("localhost", "umy36", "******") or die (mysql_error());
                          	//On sélectionne la base
                          	mysql_select_db("testiaadd") or die (mysql_error());
                          	
                          	$query = mysql_query("SELECT temperature FROM informations");
                          	
                          	$res = mysql_fetch_array($query);
                          	return "<table><tr><td>Temperature ?</td></tr><tr><td>".$res['temperature']."</td></tr></table>";
                          
                          }
                          ?>
                          


                          Voilà !!

                          Client :
                          <?php
                          // première étape : désactiver le cache lors de la phase de test
                          ini_set("soap.wsdl_cache_enabled", "0");
                          
                          // lier le client au fichier WSDL
                          $clientSOAP = new SoapClient('HelloYou.wsdl');
                          
                          // executer la methode getHello
                          //echo $clientSOAP->getHello('Marc','Assin');
                          
                          echo $clientSOAP->getTemperature();
                          
                          ?>
                          


                          et le wsdl je fais quoi ?



                          EDITE :

                          Citation : SoftDeath


                          J'utilisais avant jsr 172 pour un client java me, mais il se trouve que KSOAP2 touche plus de terminales que jsr 172.

                          Donc question pour toi, à quoi va te servir tomcat ? ^ ^' Inutile oubli-le ;)

                          Ne touche ni au serveur ni au fichier wsdl. Est-ce que tu as des notions en SOAP, WSDL ? ( si c'est pas le cas lis cet article : http://www.siteduzero.com/tutoriel-3-203276-les-services-web.html)

                          * tu lances ton KToolbar, tu crées un nouveua projet et tu le nommes HelloYou.
                          * le code Java ME (du tutoriel) tu le c/c dans un fichier .java, tu le places dans C:\WTK22\app\HelloYou\src
                          * tu c/c le .jar ksoap2-j2me-core-2.1.2 dans le dossier lib à côté du dossier src
                          * retourne dans KToolbar, build, run.



                          Tiens-moi au courant de tes résultats ;)



                          Heuuu en fait très utile TOMCAT du fait qu'on est un groupe et que le serveur sera commun ! En fait on travail sur le projet de la maison intelligente dans le cadre du p'tut de notre IUT !
                          Et on a un seul serveur codé en JAVA/SOAP et donc avec TOMCAT, qui va tourner et suivant si c'est un PC ou Portable le client ne sera pas le même évidemment ! SOAP pour PC et kSoap pour PORT!
                          Donc du coup je gère le côté portable là !

                          Le serveur est déjà pret ! Faut juste que j'arrive à établir une connexion sur une BD avec TOMCAT en route !
                          Pour le moment je fais des tests avec le serveur en php mais ça c'est un détail ! Suffit de changer le directory du serveur et voilà !!

                          Enfin résultat jpeux pas passer outre TOMCAT mis à par si c'est impossible !!

                          MERCI
                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 mars 2010 à 17:05:37

                            Ben tomcat c'est un serveur d'application pour Java EE, et pour déployer des services web sur tomcat il te faut Axis2.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 mars 2010 à 11:23:44

                              Re,
                              Bon alors j'ai réussi avec le PHP, par contre je n'arrive pas à intégrer plusieurs fonctions à un .wsdl !
                              J'en ai un pour chaque fonction !
                              Le problème c'est ça :
                              $serveurSOAP = new SoapServer('getTemperature.wsdl');
                              

                              Il n'y a qu'une association entre le serveur et dire à quel wsdl il est lié !

                              Je ne sais pas trop comment configurer le wsdl pour tout mettre dedans !!?

                              Merci de vos réponses sur ça !

                              Enfin, le JAVA, toujours les mêmes erreurs !
                              Voici ce que je fais en détaillé :

                              Je lance TOMCAT qui se trouve dans D:\ptut\Tomcat****\ :

                              Image utilisateur

                              Ensuite voici la config du PROJET sur Eclipse :
                              Image utilisateur

                              Et voici ce que ça donne une fois que je fais Run as -> Emulated J2ME Midlet :
                              Image utilisateur
                              • Partager sur Facebook
                              • Partager sur Twitter
                                6 mars 2010 à 12:26:35

                                N'oublie pas que le paramètre du constructeur SoapServer est une URL.
                                Attends, ne me dis pas que pour exécuter le code J2ME, t'es en train de faire toutes ces manipulations, c'est tout de même grave si c'est le cas :-° .
                                WTK suffit mais tu préfères ne pas m'écouter :o
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  6 mars 2010 à 14:23:37

                                  Citation : SoftDeath

                                  N'oublie pas que le paramètre du constructeur SoapServer est une URL.
                                  Attends, ne me dis pas que pour exécuter le code J2ME, t'es en train de faire toutes ces manipulations, c'est tout de même grave si c'est le cas :-° .
                                  WTK suffit mais tu préfères ne pas m'écouter :o



                                  Grave ? Pourquoi ?
                                  Ben si je fais ça !
                                  Mais la dernière fois tu m'as dis "oublies TOMCAT" mais je ne peux pas !! Celui qui s'occupe du serveur général utilise TOMCAT, je ne peux pas le gérer autrement ! Je sais pas !
                                  Dans tous les cas je ne vois pas bien comment !

                                  Qu'as-tu à me proposer concrètement !?

                                  Merci
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 mars 2010 à 14:25:48

                                    Ben je t'ai dis : "Oublie tomcat", pour le test du code J2ME, et non pour la vie ^^
                                    Je pense avoir bien expliqué plus haut les démarches à suivre ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      6 mars 2010 à 18:23:37

                                      Alors je lance WirelessToolkit, je crée le projet "HelloYou" mais après je ne vois pas de dossier crée dans WTK2.5.2_01/apps/... Rien !!!
                                      Je ne comprends pas très bien le fonctionnement surement !!

                                      KToolbar ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        6 mars 2010 à 18:52:41

                                        Chez moi ça donne ça C:\WTK22\apps\HelloYou\src
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          6 mars 2010 à 19:50:50

                                          Je fais ce que tu me dis mais j'ai pas ce dossier qui se crée !!
                                          Tu entends quoi par KToolbar !?

                                          Merci !
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            6 mars 2010 à 22:07:21

                                            KToolbar du Wireles Tool Kit, tu ne le connais pas ?
                                            Edit : Tu n'as donc pas bien lu le tutoriel de Clair :euh: . Tout emulateur comme WTK possède un KToolBar, à l'exemple de SPRINT.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              6 mars 2010 à 23:28:20

                                              /*En fait je lance WirelessToolkit, là je peux faire nouveau projet etc...
                                              Et ensuite ? Je me sens comme perdu :D
                                              Dsl...*/


                                              Ok ok j'ai rien dit ^^ J'ai trouvé !! Maintenant j'ai des bug de compil :D
                                              Pourtant j'ai bien mis le soap à côté et il ne trouve pas les imports et tout ça alors que ça il le faisait bien sous Eclipse !!
                                              Voici les erreurs !

                                              Citation : WirelessToolkit


                                              Project settings saved
                                              Building "base"
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:5: package org.ksoap2.serialization does not exist
                                              import org.ksoap2.serialization.SoapObject;
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:6: package org.ksoap2.serialization does not exist
                                              import org.ksoap2.serialization.SoapSerializationEnvelope;
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:7: package org.ksoap2.transport does not exist
                                              import org.ksoap2.transport.HttpTransport;
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:66: cannot find symbol
                                              symbol : class SoapObject
                                              location: class base
                                              SoapObject objetSOAPHello;
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:67: cannot find symbol
                                              symbol : class HttpTransport
                                              location: class base
                                              HttpTransport connexionServeur;
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:68: cannot find symbol
                                              symbol : class SoapSerializationEnvelope
                                              location: class base
                                              SoapSerializationEnvelope envelope ;
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:84: cannot find symbol
                                              symbol : class HttpTransport
                                              location: class base
                                              connexionServeur = new HttpTransport ( urlService );
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:93: cannot find symbol
                                              symbol : class SoapObject
                                              location: class base
                                              objetSOAPHello = new SoapObject (nomService, methodeChoisie );
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:101: cannot find symbol
                                              symbol : class SoapSerializationEnvelope
                                              location: class base
                                              envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
                                              ^
                                              C:\Users\Ju'\j2mewtk\2.5.2\apps\base\src\base.java:101: cannot find symbol
                                              symbol : variable SoapSerializationEnvelope
                                              location: class base
                                              envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
                                              ^
                                              10 errors
                                              com.sun.kvem.ktools.ExecutionException
                                              Build failed



                                              Voilà !!
                                              Il trouve pas les imports, et l'objet SOAPObject et d'autres.... ?
                                              Pourquoi alors que bon j'ai les bons imports ?
                                              Faut-il le serveur à côté ?
                                              Le wsdl ? Où puis-je trouver le wsdl pour ensuite pouvoir raccrocher mon projet au Tomcat de mon ami ?

                                              Merci
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                7 mars 2010 à 11:26:51

                                                Tout simplement parce que tu ne lui as pas fournis les classes org.ksoap2.
                                                Copies ksoap2-j2me-core-2.1.2.jar dans le dossier lib qui se trouve dans le même répertoire que le dossier src du projet HelloYou.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  7 mars 2010 à 11:57:14

                                                  Ca se lance, ça compile le truc bien et tout !! Aucun soucis !! J'avais mis le .jar dans le src :D
                                                  Mais bon le truc c'est que je n'ai pas de HELLO machin bilude affiché !
                                                  Il affiche sur le tel qu'il fait ci, ça... et dans la console :

                                                  org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@1cb37664)
                                                  at org.kxml2.io.KXmlParser.exception(+47)
                                                  at org.kxml2.io.KXmlParser.nextTag(+47)
                                                  at org.ksoap2.SoapEnvelope.parse(+6)
                                                  at org.ksoap2.transport.Transport.parseResponse(+30)
                                                  at org.ksoap2.transport.HttpTransport.call(+294)
                                                  at base.executerRequeteSOAP(+138)
                                                  at base.startApp(+38)
                                                  at javax.microedition.midlet.MIDletProxy.startApp(+7)
                                                  at com.sun.midp.midlet.Scheduler.schedule(+270)
                                                  at com.sun.midp.main.Main.runLocalClass(+28)
                                                  at com.sun.midp.main.Main.main(+80)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    7 mars 2010 à 13:13:52

                                                    As-tu des notions en Java voir en Java ME ?
                                                    Si t'exécutes le même source que celui du tutoriel, c'est sûr que cela ne donnera rien à l'exécution. Tu dois modifier l'url du service : http://localhost/wsphp/SoapServer.php
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      7 mars 2010 à 13:17:03

                                                      Bien évidemment que j'ai des notions !!! Et oui j'ai quand même modifié le service pour que ce soit le bon qui s'exécute !!
                                                      // nom du service
                                                      		String nomService = "urn:base";
                                                      		
                                                      		// url du service
                                                      		String urlService= "http://localhost/server_IAADD/server.php";
                                                      		
                                                      		// méthode du service
                                                      		String methodeChoisie 		= "getHello";
                                                      


                                                      J'ai p'tet des difficultés m'enfin bon :D
                                                      Donc voilà ! Le truc c'est que tout s'affiche (ce qui se trouve dans le programme) mais pas le résultat de la requête :
                                                      // ajout des propriétés pour cette méthode
                                                      			objetSOAPHello	.addProperty ("prenom","Paul");
                                                      			objetSOAPHello	.addProperty ("nom", "Hochon");
                                                      

                                                      A quel endroit je récupère le string renvoyé par getHello() pour l'afficher ?

                                                      Jusque là tout s'affiche bien :
                                                      //	 création de l'objet SOAP ok 
                                                      			this.tamponEcriture .append(" SOAPobjet effective\n");
                                                      


                                                      mais le :
                                                      // invoquation de la méthode sur le serveur
                                                      			connexionServeur.call(null, envelope);
                                                      

                                                      lève une exception du catch qui affiche donc :
                                                      this.tamponEcriture .append("exception déclenchée sur méthode call\n");	
                                                      			this.afficherResultat(); 
                                                      			aE.printStackTrace();
                                                      
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        7 mars 2010 à 14:22:07

                                                        T'es sûr d'avoir indiqué le bon nom du service ?

                                                        Il faut mettre cela :
                                                        String nomService = "urn:HelloYou";
                                                        Au lieu de :
                                                        String nomService = "urn:base";

                                                        Il faut vérifier ton fichier wsdl
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          7 mars 2010 à 14:38:46

                                                          Mon wsdl a été changé j'ai ajouté des méthodes et tout pour le client/serveur php :D
                                                          Donc c'est bien base !!
                                                          Mais par contre ? Je le fous ou le wsdl ? Parce que tu l'as pas précisé ! Je sais pas !
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            7 mars 2010 à 20:55:03

                                                            Ben il a été précisé dans le fichier SoapServer.php ^^
                                                            Tu as ajouté des méthodes, mais est-ce que tu as pris le soin de les déclarer dans ton fichier SoapServer.php ? Parce que modifier un fichier .wsdl manuellement, ce n'est plus de notre âge :-° . Des outils nous permettent de générer nos fichiers wsdl à partir d'une classe ;)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              7 mars 2010 à 21:11:12

                                                              Quels outils justement ?
                                                              Oui oui j'ai quand même pris le soin de déclarer ça :
                                                              <?php
                                                              // première étape : désactiver le cache lors de la phase de test
                                                              ini_set("soap.wsdl_cache_enabled", "0");
                                                              
                                                              // on indique au serveur à quel fichier de description il est lié
                                                              $serveurSOAP = new SoapServer('base.wsdl');
                                                              
                                                              // ajouter la fonction getHello au serveur
                                                              $serveurSOAP->addFunction('getHello');
                                                              $serveurSOAP->addFunction('getTemperature');
                                                              
                                                              // lancer le serveur
                                                              if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                                                              	$serveurSOAP->handle();
                                                              }
                                                              else {
                                                              	echo 'désolé, je ne comprends pas les requêtes GET, veuillez seulement utiliser POST';
                                                              }
                                                              
                                                              function getHello($prenom, $nom) {
                                                              	return 'Hello ' . $prenom . ' ' . $nom;
                                                              }
                                                              
                                                              function getTemperature() {
                                                              	//On se connecte au serveur
                                                              	$connec = mysql_connect("localhost", "umy36", "******") or die (mysql_error());
                                                              	//On sélectionne la base
                                                              	mysql_select_db("testiaadd") or die (mysql_error());
                                                              	
                                                              	$query = mysql_query("SELECT temperature FROM informations");
                                                              	
                                                              	$res = mysql_fetch_array($query);
                                                              	return "<table><tr><td>Temperature ?</td></tr><tr><td>".$res['temperature']."</td></tr></table>";
                                                              
                                                              }
                                                              ?>
                                                              


                                                              Voici le client :
                                                              <?php
                                                              // première étape : désactiver le cache lors de la phase de test
                                                              ini_set("soap.wsdl_cache_enabled", "0");
                                                              
                                                              // lier le client au fichier WSDL
                                                              $clientSOAP = new SoapClient('base.wsdl');
                                                              
                                                              //executer la methode getHello
                                                              echo $clientSOAP->getHello("Julien", "Goudeaux");
                                                              echo $clientSOAP->getTemperature();
                                                              
                                                              ?>
                                                              


                                                              et enfin le java client :
                                                              package ihm;
                                                              
                                                              import javax.microedition.midlet.MIDlet;
                                                              import javax.microedition.lcdui.Display;
                                                              import javax.microedition.lcdui.Form;
                                                              import javax.microedition.midlet.MIDletStateChangeException;
                                                              import org.ksoap2.serialization.SoapObject;
                                                              import org.ksoap2.serialization.SoapSerializationEnvelope;
                                                              import org.ksoap2.transport.HttpTransport;
                                                              
                                                              
                                                              /**
                                                               * Classe de test de la connexion SOAP en J2ME
                                                               * les methodes printStackTrace n'ont une utilité 
                                                               * que lors de la phase de test avec KToolBar
                                                               * et sont a eviter de meme que les System.out.println() 
                                                               * pour une raison d'optimisation.
                                                               * Dans une application plus consistante, il est judicieux 
                                                               * d'utiliser un Thread pour la partie Connexion
                                                               * L'utilisation du StringBuffer est plus longue
                                                               * à écrire que de simples concaténations de String
                                                               * mais vous évitera des erreurs d'execution du code sur certains telephones
                                                               * @author Jean-Pierre Clair
                                                               * @version 1.0
                                                               */
                                                              public class kSoapTest01 extends MIDlet 
                                                              {
                                                              	private Form monFormulaire;
                                                              	private Display affichage;
                                                              	private StringBuffer tamponEcriture;
                                                              
                                                              	public kSoapTest01() 
                                                              	{
                                                              		super();
                                                              	}
                                                              
                                                              	protected void destroyApp(boolean arg0) throws MIDletStateChangeException 
                                                              	{
                                                              		this.notifyDestroyed();
                                                              	}
                                                              
                                                              	protected void pauseApp() 
                                                              	{
                                                              		//
                                                              	}
                                                              
                                                              	protected void startApp() throws MIDletStateChangeException 
                                                              	{
                                                              		// gestion de l'affichage
                                                              		this.affichage		= Display.getDisplay(this);
                                                              		this.monFormulaire	= new Form("KSOAP2 exemple");
                                                              		
                                                              		// StringBuffer pour debug
                                                              		this.tamponEcriture	= new StringBuffer("Journal des évènements\n");	
                                                              		this.executerRequeteSOAP();
                                                              	}
                                                              
                                                              	public void afficherResultat() 
                                                              	{
                                                              		this.monFormulaire	.append ( this.tamponEcriture.toString() );
                                                              		this.affichage		.setCurrent(this.monFormulaire);
                                                              	}
                                                              	
                                                              	private void executerRequeteSOAP ()
                                                              	{
                                                              		// partie de la création des objets HTTPTransport et SOAPObject
                                                              		Object resultatRequeteSOAP = null;
                                                              		SoapObject objetSOAPHello;
                                                              		HttpTransport connexionServeur;
                                                              		SoapSerializationEnvelope envelope ;
                                                              		
                                                              		// nom du service
                                                              		String nomService = "urn:HelloYou";
                                                              		
                                                              		// url du service
                                                              		String urlService= "http://localhost/server_IAADD/server.php";
                                                              		
                                                              		// méthode du service
                                                              		String methodeChoisie 		= "getHello";
                                                              
                                                              		try
                                                              		{
                                                              			this.tamponEcriture .append("création HTTPTransport\n");	
                                                              			
                                                              			// etape 1 création module de connexion HTTP
                                                              			connexionServeur = new HttpTransport	( urlService ); 
                                                              			
                                                              			//TODO a modifier lors de la mise en production
                                                              			connexionServeur.debug = true;
                                                              			
                                                              			//	 etape 1 ok 
                                                              			this.tamponEcriture .append("creation HTTPTransport effective\n");	
                                                              			
                                                              			// création objet SOAP 
                                                              			objetSOAPHello = new SoapObject	(nomService, methodeChoisie );
                                                              			
                                                              			// ajout des propriétés pour cette méthode
                                                              			objetSOAPHello	.addProperty ("prenom","Paul");
                                                              			objetSOAPHello	.addProperty ("nom", "Hochon");
                                                              	
                                                              			
                                                              			// création d'un objet qui contiendra nos propriétés
                                                              			envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
                                                              			envelope.bodyOut = objetSOAPHello;
                                                              			
                                                              			// argument utile dans le cas d'un service SOAP .net
                                                              			//envelope.dotNet = true;
                                                              			
                                                              			//	 création de l'objet SOAP ok 
                                                              			this.tamponEcriture .append(" SOAPobjet effective\n");	
                                                              			
                                                              		}
                                                              		catch (Exception aE)
                                                              		{
                                                              			this.tamponEcriture .append("Exception levée dans SOAPObject\n");
                                                              			this.afficherResultat(); 	
                                                              			aE.printStackTrace ();
                                                              			return;
                                                              		}
                                                              		
                                                              		// connexion au serveur
                                                              		try 
                                                              		{
                                                              			// invoquation de la méthode sur le serveur
                                                              			connexionServeur.call(null, envelope);
                                                              			
                                                              			// recuperation de la réponse du serveur
                                                              			resultatRequeteSOAP =  envelope.getResponse();
                                                              
                                                              			// affichage de la réponse
                                                              			this.tamponEcriture .append("resultat de la requête\n");	
                                                              			
                                                              			this.tamponEcriture .append(resultatRequeteSOAP);	
                                                              			this.afficherResultat(); 
                                                              		} 
                                                              		catch (Exception aE) 
                                                              		{
                                                              			this.tamponEcriture .append("exception déclenchée sur méthode call\n");	
                                                              			this.afficherResultat(); 
                                                              			aE.printStackTrace();
                                                              		} 
                                                              	}
                                                              }
                                                              
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              J2ME et SOAP

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown