IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

[WebServices - GlobalWeather] - Débutant


Sujet :

Services Web Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 114
    Points : 61
    Points
    61
    Par défaut [WebServices - GlobalWeather] - Débutant
    J'ai un projet en webservices, j'ai choisi d'utiliser le webservice:
    http://www.webservicex.com/globalweather.asmx?wsdl

    j'essai d'appeler getweather qui prend en paramètre ville et pays.et j'utilise Axis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Service service = new Service();
    Call call = (Call) service.createCall();
    call.setTargetEndpointAddress((new URL("http://www.webserviceX.com/globalweather.asmx?WSDL")));
     
    call.setOperationName(new QName("http://www.webserviceX.net/GetWeather"));
    call.setOperationStyle("document");
             call.setSOAPActionURI("http://www.webserviceX.NET/GetWeather");
    String ret = call.invoke(new Object[] {"lille","france"});
     
    return ret;

    malheureusement j'obtiens une erreur de ce style:
    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Procedure 'getWeather' expects parameter '@CountryName', which was not supplied.
    voilà il semblerait qu'il ne voit pas qu'il y a le paramètre country en l'occurence ici France. Sad

    Si il y a un pro des webservices, ce sera le bienvenue.
    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    il faut que tu déclare tes parametres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
          call.addParameter("CityName", XMLType.XSD_STRING, ParameterMode.IN);
          call.addParameter("CountryName", XMLType.XSD_STRING, ParameterMode.IN);
    String ret = call.invoke(new Object[] {"lille","france"});

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    Merci,mais malheureusement, ça ne marche pas, j'ai rajouté ce que tu m'as dit mais j'ai toujours la même erreur, revoilà mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public String temps(){
    Object ret = null;
    try{
    			Service service = new Service();
    			Call call = (Call) service.createCall();
    			call.setTargetEndpointAddress((new URL("http://www.webserviceX.com/globalweather.asmx?WSDL")));
     
    			call.setOperationName(new QName("http://www.webserviceX.net/GetWeather"));
    			call.setOperationStyle("document");
    			call.setSOAPActionURI("http://www.webserviceX.NET/GetWeather");
    			ret = call.invoke(new Object[] {"lille","france"});
    		}catch(RemoteException e) {
    				e.printStackTrace();
    				JOptionPane.showMessageDialog(null, "Impossible de se connecter au WebService !", "Erreur",
    						JOptionPane.PLAIN_MESSAGE, null);
    	} catch (ServiceException e) {
    		System.out.println("service exception");
    	} catch (MalformedURLException e) {
    		System.out.println("malformé");
    	}
    		return (String)ret;
    	}
    voilà c'est la méthode avec lequel je souhaite récupérer le temps sur lille par exemple.
    si tu as une autre idée ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    as tu comparé ta requete SOAP générée avec celle présente sur le site ?

  5. #5
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    Désolé mais je suis débutant
    et je ne sais pas comment récupérer ma requête.
    j'ai essayé un call.toString() sans résultat


    tu peux encore m'aider ...

  6. #6
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    tcpmoon d'axis est un proxy pour récupérer les requetes échangées

    essaie d'utiliser des stubs générés à partir du wsdl (avec wsdl2Java je crois)
    c moins pédagogique mais pour commencer ca a le mérite de marcher

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    utilisation de tcpmon :

    http://docs.pushtotest.com/axisdocs/user-guide.html#tcpmon

  8. #8
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Points : 56
    Points
    56
    Par défaut
    salut,
    je n'ai pas encore de problème avec les WebServices, mais je vais pas tarder à en avoir. Pour l'instant je découvre juste, et il va falloir que je m'y mette et que ça marche très bientôt...

    J'ai trouvé une présentation claire et didactique qui me semble pas mal du tout pour un bon départ, et qui pourra peut être éclairer ta lanterne, et qui sait t'aider à résoudre tes soucis

    http://www.technion.ac.il/~erant/ le...-Eran_Toch.ppt

    Voilà, j'espère que ça te sera utile, bon courage

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Pietra
    utilisation de tcpmon :

    http://docs.pushtotest.com/axisdocs/user-guide.html#tcpmon
    Bonjour à tous.

    Je me permets de taper l'incruste sur ce topic pour poser une question au sujet de tcpmon, ça évitera un sujet supplémentaire sur le même sujet.

    J'ai une appli web fournissant des Web Services qui tourne sur localhost:50155.
    Une autre appli Web qui tourne sur localhost:50227 et qui consomme (enfin essaye) les services de la première application.

    Que dois je mettre comme ports dans les paramètres du moniteur, au niveau de "listener port" et "target port"?
    J'ai tenté de le faire écouter sur 50155 (le fournisseur de services) en mettant 50227 pour le target port, mais le moniteur ne m'affiche que la requête, et la communication reste bloquée tant que le moniteur est actif...
    Que dois je faire au juste?
    Merci d'avance à tous.

  10. #10
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    comme expliqué plus haut, tcpmon est un proxy, donc il a un port d'entreé et un port de sorti

    le port d'entré doit correspondre au port sur lequel le client adresse la requete
    le port de sortie le port sur lequel écoute le provider

    dans le cas de 2ws, si tu veux moniorer les 2, il faut donc 2 proxy!
    tcpmon permet d'en ajouter autant que tu veux

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Oki, merci pour ta réponse!
    Alors j'ai pas encore réussi à avoir ce que je voulais avec tcpmon
    Pour commencer tu me parles de 2 webServices, mais je n'ai qu'une appli web en fournissant. La deuxième appli web ne fait que consommer.
    Celle qui consomme je lui ai donné (dans son code) comme port du service qu'elle veut consommer 8083 .
    Donc dans tcpmon j'ai mis le port 8083 en listener, et en target j'ai mis 50155 (la vraie target finalement, là où se trouve mon service). Jusque là je pige bien (quoique :p).

    Maintenant le truc c'est qu'en faisant ça je ne récupère pas l'ensemble de la transaction dans le moniteur. Je récupère le 1er GET (celui où l'appli qui consomme demande la liste des services) et dans le cadre response j'ai bien la structure WSDL de mon service.
    Par contre lorsque je fais appel à une fonction du WebService je ne récupère strictement rien (alors que le traitement s'effectue).

    Voici le schéma du premier moniteur :

    Consommateur--------->8083<-------TCPMON-------->50155<------Fournisseur

    Pour voir ce que mon consommateur envoie comme valeurs au fournisseur j'ai crée un autre moniteur :

    50155<-------- TCPMON ---------> Là je mets quoi? *

    * J'ai mis le port de l'application Web consommatrice, mais dans ce cas la transaction reste bloquée. Je vois la request, à savoir les valeurs d'entrées du service, mais tout se fige ensuite, et je ne vois donc jamais ce que mon fournisseur renvoie normalement...

    Bref... à vrai dire j'suis paumé

  12. #12
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    bon je n'ai pas encore réussi à tester TCPMON mais j'ai tenter ma connexion juste pour voir à un autre webservice que globalweather. J'ai choisi cette fois ci Eliza.

    http://<br /> http://a3.x-ws.de/cgi...hat.wsdl<br />

    Donc pour ce qui ne connaisse pas Eliza, ça permet de discuter avec un bot.

    voici ma fonction rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    	public void Eliza(){
    		Object ret = null;
    		connectProxy();
    		try{
    			Service service = new Service();
    			Call call = (Call) service.createCall();
    			call.setTargetEndpointAddress((new URL("http://a3.x-ws.de/cgi-bin/eliza/chat.wsdl")));
    			call.setOperationName(new QName("http://a3.x-ws.de/cgi-bin/eliza/chat.wsdl","Eliza"));
    			ret = call.invoke(new Object[] {"What's your name?"});
     
    		}catch(RemoteException e) {
    				e.printStackTrace();
    				JOptionPane.showMessageDialog(null, "Impossible de se connecter au WebService !", "Erreur",
    						JOptionPane.PLAIN_MESSAGE, null);
    	} catch (ServiceException e) {
    		System.out.println("service exception");
    	} catch (MalformedURLException e) {
    		System.out.println("malformé");
    	}
    		System.out.println((String)ret);
    	}
    donc là jai bien un retour. Mais elle ne répond pas correctement à mes question.(ça je ne sais pas si c'est moi ou le webservice qui merde).
    par contre ce qui est sur c'est que j'ai une réponse.
    Donc là, je me demande pourquoi ici ça marche et pas quand j'utilise globalweather. voila si vous avez une idée.

    j'irai même à demander quelqu'un n'aurait til pas un morceau de code qui permettent d'utiliser un webservices sans problème.

  13. #13
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    euh, je continu à investiguer mais le problème c'est que je suis un peu largué là.
    je lance donc tcpmon pour écouter ce que j'envoie.
    mais je ne sais pas quoi mettre dans les champs
    - listen port
    - target hostname
    - target port

    si vous pouvez m'aider à remplir ces trois champs.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    le meilleur moyen d'obtenir quelque chose qui marche est d'utiliser wsdl2java.

    Il existe même un plugin pour Eclipse (http://www.myspotter.com/wsdl2java.shtml) pas trop dur à utiliser.

    Par exemple pour le service web Eliza lorsque les classes auront été générées par wsdl2java, il suffit de créer la classe d'appel du service web.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class test {
        public static void main(String[] args) {
            try {
                // creation du service
                Chat service = new ChatLocator();
                ChatPortType port = service.getIBaseDataTypes();
                // appel du bot
                System.out.println(port.eliza("Hello"));
            } catch (ServiceException e) {
                e.printStackTrace();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
    }
    Pour global weather
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class test {
        public static void main(String[] args) {
            try {
                // creation du service
                GlobalWeatherLocator service = new GlobalWeatherLocator();
                GlobalWeatherSoap soap =  service.getGlobalWeatherSoap();
                // temps sur lille
                System.out.println(soap.getWeather("lille","France"));
            } catch (ServiceException e) {
                e.printStackTrace();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
    }

    PS : je n'ai pas regardé en détails le pourquoi de tes erreurs mais globalement je pense que le problème venait de l'interprétation des données du wsdl.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Salut Pietra!

    Le fait que tu parles de WSDL2Java (mauvais_karma en a aussi un peu parlé) m'a fait un peu rechercher ce que c'est, et ça m'a effectivement l'air très bien! Par contre juste une question : Où trouve t'on ce package? Comment l'installer/l'utiliser?

    Merci d'avance.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    wsdl2java est fourni avec Axis (télécharger les sources)

    Exemple d'utilisation en ligne de commande :
    http://www-inf.int-evry.fr/cours/WebServices/TP_WS/Axis/TP_Interface/TP_InterfaceJava.htm


    Plugin myspoter pour eclipse (vous importer le wsdl au projet, les classes sont générées d'un click droit).
    http://www.myspotter.com/wsdl2java.shtml

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par Pietra
    wsdl2java est fourni avec Axis (télécharger les sources)

    Exemple d'utilisation en ligne de commande :
    http://www-inf.int-evry.fr/cours/WebServices/TP_WS/Axis/TP_Interface/TP_InterfaceJava.htm


    Plugin myspoter pour eclipse (vous importer le wsdl au projet, les classes sont générées d'un click droit).
    http://www.myspotter.com/wsdl2java.shtml
    Merci c'est cool!
    Au risque de passer pour un âne (ce que je n'ai probablement pas manqué de faire juste avant ) je n'arrive pas à chopper ce fichu package org/apache/axis/wsdl...
    Je suis allé sur le site d'Apache, et dans la section Downloads ils mettent l'arborescence des packages, mais je vois pas comment TOUT prendre dans un package... :'( J'vais quand même as prendre les fichiers un par un

    http://svn.apache.org/viewcvs.cgi/we...che/axis/wsdl/

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    télécharge les sources

    http://apache.crihan.fr/dist/ws/axis/1_3/axis-src-1_3.zip

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Merci ! J'avais trouvé peu de temps après avoir posé la question, mais j'en fais quoi de ce dosier une fois dezippé ? Je le mets où ? En parcourant un peu les dossiers j'ai effectivement les sources, mais pour executer la ligne de commande "java org.apache.axis.wsdl.WSDL2Java monFichier.wsdl" il me faut les .class et pas les .java, non ?

    Bref, je me sens con de poser toutes ces questions... (remarque y a sans doute un peu de ça mais aussi un peu de fatigue alors soyez indulgents )

  20. #20
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 114
    Points : 61
    Points
    61
    Par défaut
    impatient de voir ce plug in magique je me suis précipité sur http://www.myspotter.com/wsdl2java.shtml

    j'ai pris le plugin. je l'ai mis dans mon C:/program files/eclipse/plugin/
    mais rien n'a changé dans mon eclipse.
    j'ai vérifié il est bien référencé dans éclipse, mais il n'apparait nulle part pour l'utiliser. snif.

    je voudrais savoir si ce plugin fonctionnait avec un eclipse 3.1

    car j'ai lu THIS PLUG-IN REQUIRES ECLIPSE 2.X AND IS NOT SUPPORTED.
    dans le lien au dessus.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Webservice J2EE débutant
    Par ajlif dans le forum Services Web
    Réponses: 3
    Dernier message: 10/05/2014, 12h16
  2. [Débutant][WebServices] Créer un Web service en java
    Par JeffK dans le forum Services Web
    Réponses: 5
    Dernier message: 24/07/2011, 12h11
  3. Réponses: 12
    Dernier message: 10/05/2007, 09h18
  4. [JMeter] [Débutant] Test d'un WebService
    Par cecmillet dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 12/04/2007, 12h20
  5. [Débutant][Webservices] Par où commencer ?
    Par FreeCake dans le forum Services Web
    Réponses: 1
    Dernier message: 17/12/2005, 00h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo