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 :

Introspection Reflect JAVA


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Par défaut Introspection Reflect JAVA
    Bonjour, je travaille sur un projet qui fait appel à api reflect d'introspection sur java, quand j'utilise les classes de cette api, en y envoyant le non de la classe que je veux introspecter, il m'envoie un message d'erreur ClassNotFoundException

    merci par avance de votre aide

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    As-tu bien spécifié le nom complet de la classe (packages compris) ?
    Par exemple java.lang.String et pas String.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Par défaut
    Bonjour,
    Pour ma part, j'ai essayé le même truc. Mais pour moi, je récupère d'abord la classe à introspecter dans un Jar. Par la suite, j'essaye de faire l'introspection de la classe récupérée, mais j'ai cette erreur.
    Ma conclusion est peut-être qu'on ne fait l'instropection que sur une instance de la classe (un objet).

    Bon comment faire donc l'intropection d'une classe dont on a simplemement le nom et dont le fichier .class se trouve dans le système de fichier.

    Merci

  4. #4
    Membre expérimenté
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Par défaut
    salut

    Mais pour moi, je récupère d'abord la classe à introspecter dans un Jar
    pourrais tu détailler ton processus (un ptit bout de code par exemple) ?

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Il suffit que ta classe soit accessible dans le classpath...

  6. #6
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2003
    Messages : 219
    Par défaut
    Bonjour,
    Ma classe est bien dans le classpath. Donc, le chemin (jusqu'au nom du fichier Jar) est bien dans le classpath.
    Pour ce qui concerne la récupération des classes du jar, j'ai ceci :
    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
     
    // nomFichier est le nom de mon fichier Jar
    public Vector getClasses(String nomFichier) {
    // retourne un vecteur des noms de toutes les classes de mon jar
    Vector<String> classFiles = new Vector<String>();
    String name;
    try {
        JarFile MonFichierJar = new JarFile(new File(nomFichier));
        Enumeration MonFichierEntrees = MonFichierJar.entries();
       //Ensuite on liste les noms
       while (MonFichierEntrees.hasMoreElements()) {
          JarEntry entry = (JarEntry) MonFichierEntrees.nextElement();
          name = entry.getName();
          if (name.endsWith(".class")) {
    	System.out.println(name.replace("/", "."));
    	classFiles.addElement(name.replace("/", "."));
          }
       }
    } catch (Exception e) {
       e.printStackTrace();
    }
    return classFiles;
    } // end getClasses()
    Et ce qui suit pour déterminer si une classe est dans le fichier Jar
    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 boolean classExist(String classe,JarFile jar) {
      Vector<String> classFiles = new Vector<String>();
      String name;
      try {
         Enumeration MonFichierEntrees = jar.entries();
         while (MonFichierEntrees.hasMoreElements()) {
             JarEntry entry = (JarEntry) MonFichierEntrees.nextElement();
             name = entry.getName();
             if (name.endsWith(".class")) {
                 //System.out.println(name.replace("/", "."));
                 classFiles.addElement(name.replace("/", "."));
            }
         }
      } catch (Exception e) {
          e.printStackTrace();
      }
      if (classFiles.contains(classe))
          return true;
      else
        return false;
    }	// end classExist()
    Bien pour l'utilisation (dans ma classe contenant main())
    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
     
    // je fixe mon jar et le nom de la classe pour tester
    String className = "com.soh.ejb.MonPremierEJBSoh.class";
    String compName = "com/soh/TestEJBSoh.jar";
     
    Vector listeClasses = jarComp.getClasses(compName );
    JarFile jarFile = jarComp.getJarFile();
    if (jarComp.classExist(className, jarFile))
       System.out.println("La classe existe");
    else 
    System.out.println("La classe n'existe pas");
     
    try {
    Class maClasse = Class.forName(className);
    System.out.println("Classe à inspecter "+maClasse.getName());
    Method listeMethodes[] = maClasse.getMethods();
    for (int i = 0; i < listeMethodes.length ; i++)
      System.out.println("Methode "+ (i+1) +" : "+ listeMethodes[i].getName());
    } catch (Exception e) {
       e.printStackTrace();
    }
    Ici, le progr affiche bien que la classe existe dans le jar.
    mais génère une erreur lorsqu'il faut introspecter cette classe.
    Extrait de l'erreur (j'utilise eclipse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    La classe existe
    java.lang.ClassNotFoundException: com.soh.ejb.MonPremierEJBSoh.class
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Unknown Source)
    	at com.soh.ClientTest.main(ClientTest.java:44)
    Voilà un peu un extrait le code que tu demandes

    Merci

Discussions similaires

  1. Reflection java sur une méthode static
    Par Proxy dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 01/03/2012, 15h47
  2. L'introspection en Java
    Par wafiwafi dans le forum Général Java
    Réponses: 6
    Dernier message: 09/11/2011, 11h51
  3. Reflect JAVA: Connaître dynamiquement le type primitif associé
    Par TravelMate dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 08/08/2006, 23h07
  4. [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, 15h59
  5. [Reflection] Interpreter une chaine en une methode java
    Par shaun_the_sheep dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 09/10/2004, 15h11

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