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 :

[débutante] Envoi données et affichage


Sujet :

Services Web Java

  1. #21
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    Il faut que je crée un package localhost.axis.services.Version, c'est bien ca?


    J'ai aussi un autre soucis qui dur, et ca fait des jours que je n'arrive pas à le régler : lorsque avec une console ja lance la commande WSDL2Java, ca ne marche pas : elle me renvoie une erreur "Exception in thread 'main' java.lang.NoClassdeFoundError : org/apache/axis/wsdl/WSDL2Java

    On m'a dit, et j'ai cherché sur le net mais c'est toujours la meme chose qui revient : probleme de variables d'environnement. Mais dans mon classpath, j'ai vérifié 10 fois :

    ma variable CLASSPATH : .;D:\Logiciels\Java\jdk1.5.0_01\lib;D:\Logiciels\Java\jre1.5.0_01\lib

    ma variable JAVA_HOME :
    D:\Logiciels\Java\jdk1.5.0_01

    ma variable CATALINA_HOME :
    D:\Logiciels\Apache\apache-tomcat-5.5.12

    Voila, peut etre que j'ai oublié un truc...ou alors je suis maudite c'est pas possible...

    ma variable AXIS :
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\axis.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\axis-ant.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\commons-discovery-0.2.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\commons-logging-1.0.4.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\jaxrpc.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\log4j-1.2.8.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\saaj.jar;
    D:\Logiciels\Apache\SOAP\axis-1_2_1\lib\wsdl4j-1.5.1.jar

  2. #22
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    ok merci David, j'avais pas vu ton post
    Je t'avoue que je ne suis pas une experte en programmation, j'ai pas la logique facile en plus...

    La classe qui est utilisée dans l'extrait de code que j'ai mis, c'est simplement une classe qui a été crée en utilisant la commande WSDL2Java : elle a générée des classe et interface dont j'ai pu me servir. Cet exemple :

    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
    public class Test{
     
        public static void main(String[] argv) {
     
            try{
     
                localhost.axis.services.Version.VersionServiceLocator loc = new                   localhost.axis.services.Version.VersionServiceLocator();
                java.net.URL url = new          java.net.URL("http://localhost:8080/axis/services/Version");
                localhost.axis.services.Version.VersionSoapBindingStub stub=new localhost.axis.services.Version.VersionSoapBindingStub(url, loc);
                String ret=stub.getVersion();
                System.out.println("OK :" + ret);
     
                }catch(Exception e){
                     System.out.println(" ERREUR :"+e.getMessage());
                }
          }
    }
    Il n'avait pour but que d'afficher la version d'axis utilisée, c'est tout : c'était simplement un petit exemple tout simple pour m'aider a comprendre

  3. #23
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    J'ai en effet une librairie axis.jar que j'ai entré dans mes librairies d'eclipse :


  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    Harrrr... J'ai pas été averti de ton post, des pb de réception de mail en ce moment ici.

    Bon, regarde si tu as cette classe et ce package dans tes fichiers jar. Chose pratique avec Eclipse, mais que tu pourrais également faire avec winrar ou winzip, c'est explorer le jar. Regarde dans l'arbre à gauche (dans Eclipse, pas par la fenêtre lol), tu vas trouver les lib, clique alors sur les + pour ouvrir les différents noeuds. Si tu examines les lib concernant axis, trouves-tu ces package et classes localhost.axis.services.Version.VersionServiceLocator ?

    Tant que tu n'auras pas indiqué explicitement à Eclipse où aller chercher ces classes (les packages étant en quelque sorte le "chemin d'accès" à ces classes à l'intérieur des lib) Eclipse sera dans l'incapacité de compiler ton programme.

    A+

    -David-

  5. #25
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    J'ai regardé (pas par la fenêtre lol) mais je n'ai pas de VersionServiceLocator... donc je ne peux pas me servir de cet exemple aparemment... Aurais tu un autre exemple pour moi s'il te plait? :
    Merci d'avance et j'espère que ca pourra m'aider parce que là...je nage ! lol
    Je sais plus du tout comment faire un programme coté client et coté serveur...pfff

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    Tiens, je t'envoie un exemple, une méthode de test de webservice. Il est vraiment brut de pomme, j'espère que ça pourra t'aider.
    Je refais un saut un peu plus tard, j'ai un truc sur le feu

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
      private WSEnseigne[] enseigneByUserService(String login, String password)
      {
        String ENDPOINT = "http://localhost/services/";
        String METHOD = "run";
        String ACTION_URI = "EnseigneByUserService";
        String TYPEMAPPINGS_URN = "urn:EnseigneByUserServiceTypes";
     
        QName WSEnseigne_QN = new QName(TYPEMAPPINGS_URN, "WSEnseigne");
        QName WSEnseigneArray_QN = new QName(TYPEMAPPINGS_URN, "ArrayOfWSEnseigne");
     
        WSEnseigne[] results = null;
     
        try
        {
     
          Service service = new Service();
          Call call = (Call) service.createCall();
          call.setEncodingStyle(org.apache.axis.Constants.URI_SOAP11_ENC);
     
          call.setTargetEndpointAddress(new java.net.URL(ENDPOINT));
     
          call.addParameter("login", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
          call.addParameter("password", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
     
          call.setReturnType(WSEnseigneArray_QN);
     
          call.registerTypeMapping(WSEnseigne.class, WSEnseigne_QN, BeanSerializerFactory.class, BeanDeserializerFactory.class, false);
          call.registerTypeMapping(WSEnseigne[].class, WSEnseigneArray_QN, ArraySerializerFactory.class, ArrayDeserializerFactory.class, false);
     
          call.setUseSOAPAction(true);
          call.setSOAPActionURI(ACTION_URI);
          call.setOperationStyle("rpc");
          call.setOperationName(new QName(ACTION_URI, METHOD));
          Object[] inputParams = new Object[] { login, password };
     
          results = (WSEnseigne[]) call.invoke(inputParams);
        }
        catch( ServiceException e )
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        catch( RemoteException e )
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        catch( MalformedURLException e )
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        return results;
      }
    et les lib utilisées :

    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
     
    import java.net.MalformedURLException;
    import java.rmi.RemoteException;
    import java.util.Iterator;
     
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;
     
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
    import org.apache.axis.encoding.ser.ArraySerializerFactory;
    import org.apache.axis.encoding.ser.BeanDeserializerFactory;
    import org.apache.axis.encoding.ser.BeanSerializerFactory;
     
    import test.datamodel.WSDataMesure;
    import test.datamodel.WSEnseigne;
    import test.datamodel.WSEtablissement;
    import test.datamodel.WSPeriode;
    import test.datamodel.WSReponse;
    import test.datamodel.WSSaisie;
    En espérant que ça t'aide un peu...

    -David-

  7. #27
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ton aide !
    J'espère que ca pourra m'aider

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    Je t'en prie
    Tiens, jète un oeil là-dessus :
    tuto web service

  9. #29
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    Merci encore pour ton lien mais je vais me pencher sur ton exemple en fait.
    J'espere que ca va rentrer dans ma p'tite tete tout ca

  10. #30
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    Question peut etre idiote, mais je viens de me rendre compte d'un truc : quand dans mon browser j'entre l'url de mon lien (exemple : http://localhost:8080/axis/services/Version) , ca va chercher quoi exactement? une classe? un fichier XML? parce que comment je vais pouvoir tester mes classes a moi??

  11. #31
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    Encore une petite chose lol
    Comment est-ce-que je peux récupérer le resultat d'une requête dans une liste ou une collection ou encore mieux, un vecteur?

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    Bon, excuse moi, j'ai été très pris par des modifs de dernière minute et, vu que je suis en vacances ce soir (c'est à dire maintenant pratiquement ) et bien il fallait que ce soit plié .

    Bon, je serai encore dispo, j'espère, demain. Je décolle samedi après midi pour la république dominicaine. J'espère donc pouvoir t'aider demain. En tout cas, par rapport à tes dernières questions, on peut effectivement récupérer tous types d'objets, des types simples (String, Collections en tout genre) et des types complexes (tes propres objets par exemple ).

    Grosso modo, dans l'exemple que je t'ai fourni, on utilise ce qu'on appelle une encapsulation SOAP. Kékeçavedire ? En fait, il faut définir côté serveur et côté client comment, respectivement, on sérialise et on 'dé'sérialise les objets que l'on veut, respectivement, envoyer, recevoir. Le flux qui est transmis est bien sous format xml. Pratique pour le passer sur du http

    A suivre...

    -David-

  13. #33
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 76
    Points : 72
    Points
    72
    Par défaut
    Bon, je quitte le bureau, je récupèrerai les posts suivants d'ici une 30aine de minutes et ce que je vais faire, je vais mettre à ta disposition sur mon site 2 pdf français qui pourront, je l'espère, te dépanner...

    A+ tard,

    -David-

  14. #34
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bonsoir

    Je vois que ça bouge :o
    Plusieurs points à aborder:
    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
    public class Test{
     
        public static void main(String[] argv) {
     
            try{
     
                localhost.axis.services.Version.VersionServiceLocator loc = new                   localhost.axis.services.Version.VersionServiceLocator();
                java.net.URL url = new          java.net.URL("http://localhost:8080/axis/services/Version");
                localhost.axis.services.Version.VersionSoapBindingStub stub=new localhost.axis.services.Version.VersionSoapBindingStub(url, loc);
                String ret=stub.getVersion();
                System.out.println("OK :" + ret);
     
                }catch(Exception e){
                     System.out.println(" ERREUR :"+e.getMessage());
                }
          }
    }
    Le code ci-dessus correspond à celui d'un client de service web.

    Question peut etre idiote, mais je viens de me rendre compte d'un truc : quand dans mon browser j'entre l'url de mon lien (exemple : http://localhost:8080/axis/services/Version) , ca va chercher quoi exactement? une classe? un fichier XML?
    En fait cette url n'est pas à utiliser, Axis attends des données (le message) en post.

    Pour faire un premier test, voir si axis fonctione utilise l'url http://localhost:8080/axis/services tu dois avoir une page qui donne la liste des services, ainsi qu'un lien vers les fichiers WSDL correspondants.

    Pour obtenir le fichier wsdl d'un service:
    http://localhost:8080/axis/services/Version?wsdl


    la classe localhost.axis.services.Version.VersionServiceLocator est une classe générée par axis à partir du fichier wsdl avec le mapping par défaut. En fait elle encapsule le code qu'a donné cpr0.

    Donc pour obtenir cette classe:
    On appele wsdl2java avec l'url http://localhost:8080/axis/services/Version?wsdl et on obtient les sources.

    Cordialement
    Willy78

  15. #35
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    Pour faire un premier test, voir si axis fonctione utilise l'url http://localhost:8080/axis/services tu dois avoir une page qui donne la liste des services, ainsi qu'un lien vers les fichiers WSDL correspondants.
    Ca fonctionne : j'ai les services affichés

    En fait cette url n'est pas à utiliser, Axis attends des données (le message) en post.
    ?? la j'ai compris, mais je vois pas comment il va reconnaitre en fait mon message donné en post...quand je vais lui passer mon message, comment il va faire le lien aprés?

  16. #36
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Lorsque tu postes le message XML, sur http://localhost:8080/axis/services/Version ton message est formaté au format SOAP par le client. De ce fait, Axis coté serveur lorsque il analyse le message, il retrouve la méthode à invoquer sur le service et les arguments
    Willy78

  17. #37
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    La vache, j'aurai jamais pensé que c'était si compliqué quand même !
    Ca paraissait tellement simple au début quand on m'a expliqué en gros ce que ca faisait...mais j'me suis bien plantée lol

  18. #38
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    En fait tu peux ignorer la partie SOAP qui c'est vrai est complexe.

    Pour faire simple:
    Pour générer un service soap, on ecrit un fichier WSDL
    A partir du fichiers WSDL coté serveur, avec wsdl2java et l'option -server, n génère les classes nécessaire pour l'implémentation du service.

    De même coté client, à partir du fichier wsdl et avec wsdl2java on va générer un ensemble de classes qui va représenter les données à envoyer au service et une interface Java qui représente le service. On obtient une implémentation de cette interface via la classe nom_du_serviceLocator.

    J'ai quelques pages html sur le sujet le temps de les publier et je fournis l'url.
    Willy78

  19. #39
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 76
    Points : 5
    Points
    5
    Par défaut
    ok merci pour ton explication parce que pour une fois j'ai tout compris lol
    Mais alors moi du coup on m'a pas demandé d'écrire un fichier wsdl, mais simplement d'implémenter une classe (ou +) pour envoyer ces données et les recuperer ensuite coté client

  20. #40
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Bon maintenant que l'on a éclairci certains point sur les services web, on revient à la question initiale qui fait quoi (je suis chiant, je sais, mais exprimer clairement un problème est un exercice difficile, surtout quand on discute avec des gens qui, comme moi, ne connaissent pas forcément le contexte):

    Ou se trouve le serveur de service web? sur le client? sur le site de res?

    L'application swing client permettant de faire des demandes de res vient'elle récuperer les données de références (liste des hotels ...) via un service web sur le site de reservation, ou au contraire, c'est le site de réservation qui doit envoyer les données, vers le site client?

    Url des pages d'intro:
    http://w.antoine.free.fr/java/projets/webservices/
    Willy78

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Base de données - Conexion Affichage
    Par doublegold dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 17/03/2015, 13h56
  2. Réponses: 2
    Dernier message: 28/02/2015, 22h48
  3. [Débutant] Récupération de données et affichage sous forme de tableau
    Par Samrenfou dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 17/04/2007, 10h18
  4. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58
  5. Réponses: 4
    Dernier message: 18/08/2003, 09h53

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