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 retourne "java.util.List : "[net.java.dev.jaxb.array.StringArray@d72f242]" au lieu d'un String[][]


Sujet :

Services Web Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut Web service retourne "java.util.List : "[net.java.dev.jaxb.array.StringArray@d72f242]" au lieu d'un String[][]
    Bonsoir,
    J'ai un problème avec un test d'un service web !
    Je veux retourner un tableau de type String[][] dans l'affichage, et voilà 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    @WebService(serviceName = "visualisationArticle")
    @Stateless()
    public class visualisationArticle {
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement pst = null;
        String[][] tableau;
        public visualisationArticle(){
            conn=javaConnect.connectDB();
        }
     
        /**
         * Web service operation
         */
        @WebMethod(operationName = "visualiserArticle")
        public String[][] visualiserArticle(@WebParam(name = "NumBL") int NumBL) {
            String sql = "SELECT a.numArticle, a.Libelle, a.prixUnit FROM article a, details d WHERE d.NumBL = ? and d.numArticle = a.numArticle";
            try{
                pst=conn.prepareStatement(sql);
                pst.setInt(1, NumBL);
                rs=pst.executeQuery();
                //int nbrLigne = rs.getRow();
                tableau = new String[1][3];
                int i=0;
                while(rs.next()){
                    tableau[i][0] = rs.getString("numArticle");
                    tableau[i][1] = rs.getString("Libelle");
                    tableau[i][2] = rs.getString("prixUnit");
                    i++;
                }
     
     
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, e);
            }
     
            return tableau;
        }
    }
    Le problème c'est que dans l'affichage je reçois un retour de type:
    java.util.List : "[net.java.dev.jaxb.array.StringArray@d72f242]" (je crois que c'est l'adresse dans laquelle le tableau se pointe) au lieu d'afficher le tableau lui même.

    Ps: je travail sur Netbeans, le serveur est Glassfish

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Les professionnels de java, je veux vraiment une réponse dans les plus proches délais, sachant que ma base de donnée fonctionne parfaitement et a propos du tableau qui a une seule ligne, c'est parce que la requête retourne seulement un tuple!
    Tous ce que je veux c'est comment un web service peut retourner un array et l'afficher
    Merci a vous.

  3. #3
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Test comme ça pour voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class visualisationArticle implements Serializable {

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Est-ce que c'est ce que tu obtiens dans le xml ou ce que tu obtiens dans ton client SOAP. Parce que suivant le cas, ce ne sera pas la même cause.

    Ensuite, de toutes façons, un array multidimensionnel n'a pas de sens ici. Il est préférable de retourner un type custom:

    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
        @WebMethod(operationName = "visualiserArticle")
        public ArticleVisuel[] visualiserArticle(@WebParam(name = "NumBL") int NumBL) {
            String sql = "SELECT a.numArticle, a.Libelle, a.prixUnit FROM article a, details d WHERE d.NumBL = ? and d.numArticle = a.numArticle";
            try{
                pst=conn.prepareStatement(sql);
                pst.setInt(1, NumBL);
                rs=pst.executeQuery();
                List<ArticleVisuel> reponse = new ArrayList<ArticleVisuel>();
                while(rs.next()){
                    response.add(new ArticleVisuel(rs.getString("numArticle"),
                           rs.getString("Libelle"),
                           rs.getString("prixUnit"));
     
                }
                return response.toArray(new ArticleVisuel[response.size()]);
     
            }catch(Exception e){
                // Au passage, tu m'explique ce que fait un appel graphique sur un SERVEUR ?
                JOptionPane.showMessageDialog(null, e);
            }
     
            return null;
        }

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    @rockley:
    merci pour votre réponse, j'ai essayé mais je rencontre toujours le même problème.

    @tchize_:
    il me souligne en rouge toutes les ArticleVisuel[], qu'est ce que je devrai faire ?

    avant de faire les changement voilà la réponse du glassfish et je crois qu'il n'y a aucun problème dans la réponse du SOAP.


  6. #6
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    tchize_ t'as conseillé de créer une classe pour contenir des donnés plutôt que de renvoyer un String[][]. As-tu créé cette classe ? Car si tu as simplement copié / collé son code, cela ne peut pas fonctionner.

    De plus, as-tu renommé le paramètre de l'ArrayList en "response", car il y a une petite faute de frappe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<ArticleVisuel> response = new ArrayList<ArticleVisuel>();
    Enfin, lorsque tu créeras ta classe, pense à redéfinir la méthode toString().

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    Oui monsieur justement en définissant la nouvelle classe qu'est ce que je doit écrire a l'intérieure !! je ne suis pas très très calé en java !

    Sinon pour la réponse oui je l'ai déjà remarqué !

    Merci beaucoup pour ta réponse

  8. #8
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Tu dois simplement encapsuler tes champs. Créer une classe contenant les champs qui formaient ton String[][].

    Par 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
    18
     
    public class ArticleVisuel implements java.io.Serializable {
     
      private String numArticle;
      private String libelle;
      private String prixUnit;
     
      public ArticleVisuel() {}
     
      public ArticleVisuel(String numArticle, String libelle, String prixUnit) {
       this.numArticle = numArticle;
       this.libelle = libelle;
       this.prixUnit = prixUnit;
      }
     
      // getters - setters
     
    }
    Cela te permet d'encapsuler tes 3 champs et de renvoyer une liste de ArticleVisuel. Libre à toi d'ajouter d'autres méthodes, mais tu crées un POJO simple.

    Pense à la méthode toString() pour l'affichage de ta Liste sinon tu auras des "ArticleVisuel@345643".

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup, je vais essayer.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Voilà le résultat !
    java.util.List : "[org.gestion.ArticleVisuel@4f0ca7f4, org.gestion.ArticleVisuel@47e6acb7, org.gestion.ArticleVisuel@79554741]"

    Pour le toString j'ai pas su ou la mettre !

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Etudiant Master 2 en Ingénierie de Données et Technologie Web
    Inscrit en
    Avril 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Etudiant Master 2 en Ingénierie de Données et Technologie Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    Je suis un étudiant dans la programmation Web et c'est un travail demandé par l'enseignant du module WS! et il faut le rendre ce dimanche!
    j'avoue que je suis pas un bon programmeur en Java! mais je suis entrain d'apprendre !
    Pour le problème j'ai essayé de faire ce que je peux sur netbeans mais ça marche toujours pas !

    Juste pour une remarque, ma première solution proposée, marche nickel sur jDevelopper, le problème que je ne sais pas comment créer des jsp la bas, par contre je sais comment le faire sur netbeans !!

    Merci a vous

  12. #12
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Tu prends le code d'olivier.pitton
    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 ArticleVisuel implements java.io.Serializable {
     
      private String numArticle;
      private String libelle;
      private String prixUnit;
     
      public ArticleVisuel() {}
     
      public ArticleVisuel(String numArticle, String libelle, String prixUnit) {
       this.numArticle = numArticle;
       this.libelle = libelle;
       this.prixUnit = prixUnit;
      }
     
      // getters - setters

    tu crées une autre classe MON_WS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class MON_WS
    {
        public ArticleVisuel MON_SERVICE () {}
    }
    Clic droit sur MON_WS et tu génères le ton wsdl.
    A partir du wsdl tu génère le client ws.
    Le client ws contient les responses et les request.

    Tu crées une classe CONSO_MON_WS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static void main(String[] args) {
       ReponseArticleVisuel resp = new ReponseArticleVisuel();
       RequestArticleVisuel requ = new RequestArticleVisuel();
     
       resp  = //CALL ton MON_WS
     
       resp.get...
    }
     
    voilà à quoi ça peux ressembler.

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    je suis un peut dans le même cas que burnit, mais j'arrive toutefois à afficher le contenu de mon tableau dans la réponse XML. Mais quand j'essaye de récupérer les valeurs (en VBA) je me retrouve avec un tableau du même nombre d'occurrences mais avec des valeurs vides. Je me heurte au même problème si je renvoi un tableau de String[][] ou un objet. Je travaille avec JBoss 4, si vous avez des idées elles ont les bienvenues

  14. #14
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    ça peut avoir plusieurs explications.

    D'abord vérifie que les classes de ton client sont également sérializable.
    On ne sait jamais. Il faut de toute façon que la sérialization se fasse des deux côté car les Web Services communique en XML.

    L'autre solution c'est que tes paramètrages sont peut-être mal configuré.
    Peut être que ton proxy bloque une partie des informations.

  15. #15
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Et sinon, tu dois redéfinir la méthode toString, dans ArticleVisuel. Cette méthode a pour but de convertir un objet en String, donc on peut considérer qu'elle sert pour la représentation visuelle d'un objet. Cette méthode se situe dans la classe Object, donc toutes les classes peuvent la redéfinir.

    Dans ArticleVisuel ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
    public String toString() {
      return libelle;
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/12/2012, 14h15
  2. Web service retourne "exception"
    Par finalben1 dans le forum Services Web
    Réponses: 14
    Dernier message: 26/06/2008, 19h59
  3. Problème avec java.util.List
    Par alphonse62 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 11/06/2007, 11h03
  4. required : java.util.List
    Par marcxa44 dans le forum Maven
    Réponses: 4
    Dernier message: 11/05/2007, 11h30
  5. Comment creer un objet java.util.List ?
    Par Battosaiii dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 02/11/2006, 12h14

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