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

API standards et tierces Java Discussion :

[Reflection] Problème Introspection


Sujet :

API standards et tierces Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Reflection] Problème Introspection
    Salut à tous le monde,
    Alors voila, j'ai un grand problème en essayant d'implémenter le mécanisme d'introspection sur une classe, l'instruction suivante planet :
    ftpfFilesList = fetdFtpEway.getProvider().listFiles(sDirectoryOfFileToTransfert, sFileToTransfert);
    sachant que ftpfFilesList est de type FTPFile[], et ce qui suit montre mon code qui plante

    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
     
    Object[] ftpfFilesList = null;
    args[0] = sDirectoryOfFileToTransfert;
    args[1] = sFileToTransfert;
    ftpfFilesList = (Object[]) lancerMethode( lancerMethode( fetdFtpEway, null, "getProvider" ), args2, "listFiles");
     
    et lancer Méthode est definit comme suit :
    public static Object lancerMethode( Object o, Object[] args, String nomMethode )
            throws Exception
        {
            Class[] paramTypes = null;
            if (args != null) {
                paramTypes = new Class[args.length];
                for (int i = 0; i < args.length; ++i) {
                    paramTypes[i] = args[i].getClass();
                }
            }
            Method m = o.getClass().getMethod( nomMethode, paramTypes );
            return m.invoke( o, args );
        }
    et l'erreur déclancher est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     null java.lang.reflect.InvocationTargetException
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:324)
    es ce parce que la méthode listFiles retourne un tableau d'objects que ça cause problème? ou bien c autre chose?
    Merci pour l'aide les gars

    [ Modéré par SEMPERE Benjamin ]
    Ajout des balises code
    Les Règles du Forum

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    aprés avoir relus ce que j'ai écrit voila la correction :

    Salut à tous le monde,
    Alors voila, j'ai un grand problème en essayant d'implémenter le mécanisme d'introspection sur une classe, l'instruction suivante plante :
    ftpfFilesList = fetdFtpEway.getProvider().listFiles(sDirectoryOfFileToTransfert, sFileToTransfert);
    sachant que ftpfFilesList est de type FTPFile[], et ce qui suit montre mon code qui plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Object[] ftpfFilesList = null; 
    args[0] = sDirectoryOfFileToTransfert; 
    args[1] = sFileToTransfert; 
    ftpfFilesList = (Object[]) lancerMethode( lancerMethode( fetdFtpEway, null, "getProvider" ), args, "listFiles");
    et lancer Méthode est definit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static Object lancerMethode( Object o, Object[] args, String nomMethode ) 
    throws Exception 
    { 
    Class[] paramTypes = null; 
    if (args != null) { 
    paramTypes = new Class[args.length]; 
    for (int i = 0; i < args.length; ++i) { 
    paramTypes[i] = args[i].getClass(); 
    } 
    } 
    Method m = o.getClass().getMethod( nomMethode, paramTypes ); 
    return m.invoke( o, args ); 
    }
    et l'erreur déclancher est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    null java.lang.reflect.InvocationTargetException 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:324)
    es ce parce que la méthode listFiles retourne un tableau d'objects que ça cause problème? sachant que je sait bien que c auniveau de cette méthode que ça plante (aprés un découpage)
    Merci pour l'aide les gars

    [ Modéré par SEMPERE Benjamin ]
    Ajout des balises code
    Les Règles du Forum

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 154
    Points : 143
    Points
    143
    Par défaut
    Salut korus,

    Est ce que args ne serait pas null?

    Sais tu as quoi correspond le null au début de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    null java.lang.reflect.InvocationTargetException
    ?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Dans l'API de InvocationTargetException, on peut lire que cette exception encapsule les exception levé par une méthode appellé via l'introspection. En utilisant la méthode getTargetException() tu en saura plus sur l'exception levé (mais comme Tiaps je penche sur un NullPointerException)...

    Sinon appelle la méthode de manière standard avec les mêmes paramètres pour être sûr que cela marche...

    a++

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    salut Tiaps et adiGuba,
    en faite la méthode marchait tres bien avant d'essayer d'executer ça avec l'introspection, et vous avez raison le null correspond au NullPointerException, parcontre j'ai fait un découpage des deux méthodes et la premiere méthode ne retourne pas null, je crois que l'erreur est a cause que la methode listFiles retourne un FTPFile[] et la methode lancerMethode retourne un object et non pas un Object[] et ça plante exactement dans l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     return m.invoke( o, args );
    Merci

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Les tableux sont des objets donc le type de retour ne pose pas de problème (sinon tu aurais une erreur de compilation).

    Intercepte l'exception InvocationTargetException de cette manière pour avoir les traces de l'exception levé par la méthode, cela devrait t'aider sur le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
     
         ftpfFilesList = (Object[]) lancerMethode( lancerMethode( fetdFtpEway, null, "getProvider" ), args, "listFiles"); 
     
    } catch (InvocationTargetException exception) {
         exception.getTargetException().printStackTrace();
    }
    a++

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    salut,

    l'erreur est , j'arrive pas a comprendre, pourtant j'ai bien affiché l'object dans les logs et il n'est pas null, j'ai pas encore resolu le probleme malheureusement : : :

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 154
    Points : 143
    Points
    143
    Par défaut
    Salut,

    Dans un premier temps, essaie d'effectuer le premier lancement puis le seconf. Tu sauras ainsi si le problème viens du second ou premier appel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
         Object o = lancerMethode( fetdFtpEway, null, "getProvider" );
         System.out.println("premier résultat : "+o);
         ftpfFilesList = (Object[]) lancerMethode( resultat 1 , args, "listFiles");
     
    } catch (InvocationTargetException exception) {
         exception.getTargetException().printStackTrace();
    }
    Sinon, Aucune ligne de ton code n'est liée à l'exception? En regardant la stacktrace de l'exception tu devrais pouvoir trouver l'origine de cette exception.

Discussions similaires

  1. Réflexion ou introspection
    Par ctxnop dans le forum Normalisation
    Réponses: 15
    Dernier message: 25/04/2015, 21h38
  2. Réponses: 1
    Dernier message: 07/03/2011, 12h50
  3. [Reflect] Recherche de méthode par introspection
    Par ChemicalStorm dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 03/07/2009, 19h28
  4. Introspection Reflect JAVA
    Par HICMAN dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 30/07/2007, 15h05
  5. [débutant(e)][Reflection] Introspection et creation de tableau
    Par Fladnag dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 04/07/2005, 16h59

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