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 :

[web service] Service défectueux


Sujet :

Services Web Java

  1. #1
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut [web service] Service défectueux
    J'ai un service fait main, et je veux coder un client en java (avant de l'encapsuler dans du JSP)...

    Le web service semble fonctionner, car en rajoutant un main et en executant la fonction, il me renvoie un Vector de bonne taille et arrive à lire ce qu'il y a l'intérieur.

    Par contre l'appel à la fonction par un client me donne un Vector de taille nulle... je ne sais plus où chercher une solution

    Voici le code du client:

    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
    import java.util.*;

    public class BedBreakfastClient {
    public static void main(String [] args) {
    try {
    String endpoint = "http://localhost:8080/axis/BedBreakfast.jws";

    Service service = new Service();
    Call call = (Call) service.createCall();

    call.setTargetEndpointAddress( new java.net.URL(endpoint) );
    call.setOperationName("listAvailable");
    call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.xmlsoap.org/soap/encoding/");
    QName qVec=new QName( endpoint, "Vector ");
    call.setReturnType(qVec);

    Vector res = (Vector) call.invoke( new Object[] { } );
    System.out.println("Now the Vector size is :" +res.size());
    for (int i=0;i<res.size();i++ )
    {
    System.out.println(res.get(i));
    }

    } catch (Exception e) {
    System.err.println("Execution failed. Exception: " + e);
    }
    }
    }
    merci d'avance

  2. #2
    Membre confirmé

    Homme Profil pro
    Indépendant
    Inscrit en
    Juin 2002
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 540
    Points : 607
    Points
    607
    Par défaut
    Désolé, j'ai fait un peu de netoyage car je n'avais pas vu que tu utilisais le format jws (je ne me suis jamais penché dessus ).

    D'aprés moi, le nom de ta méthode doit figurer dans un QName et le type doit être un type
    org.apache.axis.encoding.XMLType.XSD_ANYTYPE
    Je suis un peu rouillé sur Axis, mais je pense que tu dois transtyper l'objet recu en Vector par la suite car c'est un type complexe.

    ou alors ("à la guerre comme à la guerre") et c'est plus générique donc réutilisable :

    Faire une sérialisation de ton objet et le convertir en Base64 pour récupérer un type XSD_STRING. Décoder puis unwrapper l'objet vers un Vecteur. (Une copie profonde de l'objet est même préférable si par la suite tu veux utiliser tes propres objets).
    Fondateur Alien6 : Prescriptive Analytics & Machine Learning Software

  3. #3
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    j'ai changé le type de retour de la fonction du service, qui est une string maintenant (j'accole tous les résultats)

    j'ai modifié mon client en conséquence:

    call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

    String res = (String) call.invoke( new Object[] { } );
    System.out.println("result is :" + res);
    j'ai toujours le même pb: res ne vaut rien. Ca m'énerve, parce que j'avais fait un exemple un peu avant avec une fonction d'addition qui renvoyait un entier, et ça marchait sans problème

  4. #4
    Membre confirmé

    Homme Profil pro
    Indépendant
    Inscrit en
    Juin 2002
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 540
    Points : 607
    Points
    607
    Par défaut
    En changeant aussi ton QName ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*list available = nom de ta methode ? */
    QName qVec=new QName( "BedBreakfast", "listAvailable"); 
    call.setOperationName(qVec); 
    call.setReturnType( org.apache.axis.encoding.XMLType.XSD_STRING );
    Sinon, le client est le même avec un Entier ou un String (seul le returnType doit changer).
    Fondateur Alien6 : Prescriptive Analytics & Machine Learning Software

  5. #5
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    non, je n'utilisais plus de QName:

    call.setTargetEndpointAddress( new java.net.URL(endpoint) );
    call.setOperationName("listAvailable");
    call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.xmlsoap.org/soap/encoding/");
    call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

    String res = (String) call.invoke( new Object[] { } );
    System.out.println("result is :" + res);
    listAvailable est bien le nom de ma méthode... j'viens de rajouter un main() à mon service, je l'ai compilé, et il me renvoie bien une chaine avec ce que je veux...

    Oui le client est le même à qques trucs près... dans l'ancien je n'utilisais ni de setProperty no de ReturnType

  6. #6
    Membre confirmé

    Homme Profil pro
    Indépendant
    Inscrit en
    Juin 2002
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 540
    Points : 607
    Points
    607
    Par défaut
    C'est donc un problème résolu ?




    [Penser au TAG svp]
    Fondateur Alien6 : Prescriptive Analytics & Machine Learning Software

  7. #7
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    bon ça ne vient pas de mon client. Ca vient de mon service mais je ne sais pas pkoi...

    voici le code du service:

    import java.sql.*;
    import java.util.*;

    public class BedBreakfast {


    public String Db = "bb1_data";
    public Connection connexion;

    //
    // gives available dates
    //
    public String listAvailable() {

    String res="";
    connect();

    try {
    Statement declaration = connexion.createStatement();
    ResultSet resultats = declaration.executeQuery("SELECT * FROM "+Db+" WHERE available='1'");
    ResultSetMetaData rsmd = resultats.getMetaData();
    int numColumns = rsmd.getColumnCount();
    while (resultats.next()) {

    Object s = resultats.getObject( 2 );
    res += s;
    }
    resultats.close();
    declaration.close();
    }
    catch (SQLException e) {
    }
    catch (java.lang.Exception e) {
    }

    close();
    return res;
    }

    //
    // connect to the database
    //
    public void connect() {
    try {

    Class.forName("com.mysql.jdbc.Driver").newInstance(); //loads the driver

    connexion =
    DriverManager.getConnection("jdbc:mysql://localhost:3306/4ba8","root","");
    }
    catch (SQLException e) {
    }
    catch (java.lang.Exception e) {
    }
    }

    //
    // close connection
    //
    public void close() {
    try {
    connexion.close();
    }
    catch (SQLException e) {
    }
    catch (java.lang.Exception e) {
    }
    }


    }

  8. #8
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    à cette ligne là

    Statement declaration = connexion.createStatement();
    il s'arrete... je ne sais pas pkoi...

    help...

  9. #9
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    j'ai tjs pas trouvé...

    j'ai remarqué que si je demandais au service de m'envoyer la requete adequate, et que je traitais la connexion à la base dans le client ça marchait...

    mais c pas très logique, le service doit rentre le résultat pas le moyen de trouver le résultat.

    help...

  10. #10
    NR
    NR est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut
    ça venait du jar de mysql-connector qui était bien dans jre mais pas dans tomcat.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/11/2010, 01h43
  2. Composition web service - service
    Par QuestionMan dans le forum Services Web
    Réponses: 1
    Dernier message: 23/04/2009, 20h08
  3. Création application web via Services Web
    Par sylvainpiau dans le forum SharePoint
    Réponses: 5
    Dernier message: 30/03/2009, 17h19
  4. [VS2005toVS2008]Web reference - Service reference
    Par totoen dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/01/2009, 09h28
  5. Réponses: 1
    Dernier message: 22/05/2007, 13h33

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