Partage
  • Partager sur Facebook
  • Partager sur Twitter

[débutant] Connexion à une base de donnée + webservice

    19 janvier 2012 à 9:46:00

    Bonjour, je sollicite humblement votre aide car mon java est vraiment tout poussiéreux, et je ne sais pas du tout par ou commencer :ange:

    Tout commence par une chose toute simple: Développeur PHP, on me demande d'exploiter un web service écrit en SOAP. Facile me direz vous, sauf que ce webservice... n'existe pas!
    Il n'a jamais été développé, et on me dit "Oh, on te file quelques accès, t'as qu'a te débrouiller à le créer.

    Grosso modo, on me donne un datasource sous cette forme:

    <Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="30" maxIdle="10" maxWait="5000" name="jdbc/orasved" password="password" type="javax.sql.DataSource" url="jdbc:oracle:thin:@IP:PORT:NOM" username="username" validationQuery="select 1 from dual"/>

    On me donne aussi l'ip du serveur TOMCAT, et picétout, débrouilles toi qu'ils disent.
    Je ne sais pas s'ils ont une couche métier, des EJB etc, je n'ai aucune info sur le projet, et je ne sais pas vraiment par ou commencer.

    1°/ JE pense que je dois crée un projet J2EE (trop fort!) sous eclipse
    2°/ Créer une classe dans un package qui fait l'accès à la base de donnée
    3°/ Une classe qui à partir d'une classe de la connexion, fais un bête "SELECT * FROM latablequejeveuxutiliser
    4°/ Une classe de webservice qui me renvoie les résultats, pour que je puisse l'utiliser en php, le seul langage que je connais vraiment.

    A savoir que niveau algo et syntaxe java, aucun problème, c'est plus des problèmes dans l'archi et comment mettre en place et déployer ce que je veux.

    Je vous remercie d'avance pour votre aide!
    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2012 à 10:08:24

      Salut, pour créer un simple web service en java regarde du coté de axis2 + jaxws, si tomcat est en version 7 regarde plutôt cxf(connait pas les détails).
      Pour jaxws :
      Après c'est super simple car tu as juste a poser des annotations et definir quelques que parametre dans des fichiers de config mais c'est relativement bien expliquer dans des tuto (web.xml et sun-jaxws.xml).
      Si tu peut utiliser maven (m2eclipse le plugin) cela te facilitera la tâche pour les jar de dépendances.
      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2012 à 12:23:29

        Il me semblait que pour axis j'avais des trucs à installer sur le serveur tomcat.
        Je précise, je n'ai pas la main dessus. Tout ce que je dois fournir ce sont des sources.
        J'avais utilisé jaxws il y'a quelques années avec javeEE5, j'essaierai de rassembler mes souvenirs et de suivre les tutos.

        Merci pour ton aide.
        En ce qui concerne le datasource, c'est du JNDI c'est ça?
        Je pense que le temps que je me remette dans le bain, ça ira mieux.
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2012 à 14:44:15

          Bonjour,
          Merci pour vos réponses.
          J'ai pu configurer ma base de donnée et suis arrivé pour le moment à m'y connecter et faire une requête de base.

          J'ai déployé un web service sur mon projet, que je tente d'appeler en php. Je tourne une Integer en dur, (que php est capable de me récupèrer et m'afficher), en revanche, le paramètre que je passe à ma méthode est lui "null", et je ne comprend pas pk, ni comment faire pour le débugger.

          Mon code java:

          import javax.jws.WebMethod;
          import javax.jws.WebService;
          
          @WebService
          public class Webservice {
          
          	@WebMethod
          	public Integer webService1(String requete)
          	{
          		String bla = requete;
          		Integer nombre = 13;
          		System.out.println(bla);
          		return nombre;
          	}
          }
          


          Et mon code php:

          <?php
          $client = new SoapClient('http://localhost:8080/nca.webmobile/services/Webservice?wsdl', array('trace' => 1));
          try{
          $param = array('requete' => 'requete');
          $oReturn =  $client->__soapCall('webService1', $param);
          var_dump($oReturn->webService1Return);
          }
          catch(Exception $e){
          	echo $e->getMessage();
          }
          ?>
          


          Le var dump m'affiche bien "(int)13", mais dans la console pour la variable bla j'ai un null d'affiché, et je sens que quelque chose m'échappe mais je ne sais pas quoi. (j'ai duppliqué les clefs/valeurs en requête pour être sur que ça ne venait pas d'une quelconque invertion).

          Je vous remercie d'avance!
          • Partager sur Facebook
          • Partager sur Twitter
            23 janvier 2012 à 15:46:52

            Bon, je sais pas si ça va répondre a ta question car j'ai un peu de difficulté a comprendre ce que tu veux faire, mais je te donne un bout de code que j'utilisais pour me connecter a une BDD et faire des requêtes...

            Je repete, il est possible que je sois dans le champs et que je ne t'aide pas dutout :p

            Donc, ma fonction de connection a la base de donnee:
            private static Connection getConnection() throws SQLException {
            
                Connection con = DriverManager.getConnection("jdbc:derby://localhost:1530/ForumJava", "app", "app");
            
                return con;
            }
            


            Ensuite mon code pour faire une requete a la base de donnee et recuperer les informations:
            try {
                Connection con = getConnection();
                
                Statement stmt = con.createStatement();
                        
                ResultSet rs = stmt.executeQuery("select * from APP.ANSWERS");
                                
            } catch (Exception e) {
            
                System.out.println(e);
            
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              23 janvier 2012 à 15:53:12

              Si tu veux faire une connexion java à une BD il te faut le JDBC déjà
              tu as réussi a utiliser du php dans ton appli JEE ?
              • Partager sur Facebook
              • Partager sur Twitter
                23 janvier 2012 à 15:58:44

                Ah non mais désolé, en fait on ne s'est pas compris ^^.

                J'ai déjà implémenté une classe de connexion, et ça se passe sans soucis.

                Là, tout ce que je cherche à faire pour le moment, c'est un bête webservice qui prend en paramètre une chaine de caractère et qui me renvoie un int.

                Comme je l'ai dit plus haut, le int est bien renvoyé côté PHP, en revanche, le paramètre que je passe lors de l'appel à mon webservice ne semble pas être interprété par java, puisqu'il me renvoie null dans ma console.

                Sans ça, je serai incapable de faire mon traitement sur la base de donnée, pour le moment, c'est pas l'aspect base de donnée et requête qui me bloque, mais vraiment l'aspect "webservice" et "passage de paramètre".

                Merci à vous cela dit!
                • Partager sur Facebook
                • Partager sur Twitter
                  23 janvier 2012 à 16:40:33

                  Bon, alors vraiment juste pour te donner des pistes et pas te laisser patauger dans le vide (les Webservices - et SOAP encore moins - c'est pas franchement mon rayon) :

                  1/ Ne faut-il pas annoter le paramètre présent dans la méthode de ton webservice ? (ça me fait penser à Spring MVC comme type de fonctionnement en fait avec l'annotation @RequestParameter)

                  2/ Essaye d'utiliser un sniffer (voire LiveHttpHeaders ptetre, il devrait intercepter la requête SOAP -par dessus HTTP ? - de ta page PHP vers ton webservice). Tu devrais voir un bout d'XML passer, regarde déjà si le paramètre et transmis (et de quelle façon)

                  PS : après avoir cherché un ptit peu, y'a effectivement une annotation @WebParam, mais elle ne semble servir que dans le cas où l'on veut faire un mapping "marginal" du genre changer le nom du paramètre. Du coup, peut-être faut-il "voir" la tête de la requête qui est envoyée pour voir apparaître le paramètre et la façon dont il est formaté.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2012 à 9:22:36

                    T'es sûr de la manière dont passer un parametre lors de l'appel d'un webService en PHP?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 janvier 2012 à 11:40:02

                      Ben, à priori, je serais tenté de dire que oui, mais je vais continuer à fouiller...

                      J'ai une autre question, j'aimerais renvoyer une liste de string, mais à chaque fois que j'essaie de déployer le webservice, on me dit qu'il n'est pas conforme a la norme JAX-RPC (que j'essaie de renvoyer un Hashtable, une List, LinkedList...

                      En gros, je dois juste renvoyer plusieurs champs résultant d'une requête SQL (dont je dois traiter les résultats).

                      Comment dois je m'y prendre?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 janvier 2012 à 11:42:49

                        Tu renvoi pas un objet List, mais un tableau de STring par exemple -> String[]
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 janvier 2012 à 12:11:15

                          Merci, mais je crois qu'on ne peut mettre que des indexes numériques non?
                          Parcequ'il faut que je puisse identifier le champs renvoyé du genre "champs_bdd" => "valeur traitée".

                          La, l'application distance ne saura pas ce qu'elle récupère comme paramètre. Je me trompe?
                          C'est pour ça que j'étais parti sur des List.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 janvier 2012 à 12:47:26

                            Ah, non mais je pensais que tu voulais récupérer une liste en reponse mais là tu parle de différents parametre?
                            Dans ce cas tu n'as pas de liste c'est une clef une valeur.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 janvier 2012 à 13:17:44

                              Bon attend je reprend, parceque je pense qu'on ne se comprend pas ^^

                              En gros, mon webservice prend un paramètre (un numéro de ticket), sur lequel je me base pour faire une requete (un bête Select).

                              Mon webservice devra renvoyer le résultat du sélect en gros, pour que le client qui appelle le web service puisse les afficher, Sous la forme (Numéro du ticket => Numéro du tickey, Statut => valeur du statut etc...).

                              Seulement, il faut pour ça que mon webservice soit capable de renvoyer des tableaux, et c'est là que je coince, à chaque fois que je veux publier mon webservice à partir d'eclipse, il me dit que ce n'est pas compatible avec la norme jax-rpc, et c'est ce que je ne comprend pas.

                              DAns mes souvenirs, il était parfaitement possible de renvoyer une liste dans un webservice.

                              T'aurais pas un exemple de webservice sous la main qui renvoie plusieurs paramètres indéxés?

                              Je te remercie d'avance!
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 janvier 2012 à 14:30:21

                                Tu as essayait les map :
                                public HashMap<String, String> listeDeroulante(String param){
                                  HashMap<String, String> myMap = new HashMap<String, String>();
                                  myMap.put("value1", "text 1");
                                  myMap.put("value2", "text 2");
                                  myMap.put("value3", "text 3");
                                  return myMap;
                                }
                                

                                Pense a bien déclarer cette methode dans ton interface avec l'annotation @WebMethod
                                • Partager sur Facebook
                                • Partager sur Twitter

                                [débutant] Connexion à une base de donnée + webservice

                                × 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