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

Persistance des données Java Discussion :

loadClass() peut-t-elle charger un class file enhanced ?


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Par défaut loadClass() peut-t-elle charger un class file enhanced ?
    Bonjour,

    J'ai un petit problème avec la méthode loadClass (API de reflection) auquel je trouve pas de solution dans les FAQ et tutoriels :
    Pour décrire le contexte : j'ai besoin de charger des classes dynamiquement à partir d'un jar, j'utilise donc la méthode loadClass pour charger mes class file lu à partir de mon jar.
    le code suivant est parfaitement fonctionnel si je lui donne un jar contenant des class file non enhanced (je parle içi de JDO enhancement). Mon problème est que j'ai besoin de charger des classes persistentes donc le byte code lu par la méthode loadClass(String nomclasse) est dans ce cas enhanced (modifié pour assurer la persistence).
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    import java.io.File;
    import java.io.IOException;
    import java.util.Enumeration;
    import java.lang.reflect.Field;
    import java.util.jar.*;
     
     
    public class myCLASS {
     
    	public void load() {
     
            JarFile jarFile = null;
            try {
                jarFile = new JarFile("lib/myJAR.jar");
                try {
                    String jarName = jarFile.getName();System.out.println("jarName = " + jarName);
                    String jarFolder = jarName.substring(0, jarName.lastIndexOf(File.separator));System.out.println("jarFolder = " + jarFolder);
                    // get the list of the jar file entries
                    Enumeration enumeration = jarFile.entries();
                    int i = 0;
                    byte[] classData = null;
                    while (enumeration.hasMoreElements()) {
                            String elementName = enumeration.nextElement().toString();
                        // Pour chaque élément on récupère l'objet JarEntry correspondant
                        JarEntry entry = jarFile.getJarEntry(elementName);System.out.println(elementName);
                        String namebegin=null,name=null,nameEnd=null;
                        //ne s'intéresser que des fichiers .class 
                        if(elementName.lastIndexOf('.')>0)
                 	   {
    				   namebegin=elementName.substring(0,elementName.lastIndexOf('.'));
                 	   name=namebegin.replace('/','.');System.out.println("***********************"+name+"************************");
                       nameEnd=elementName.substring(elementName.lastIndexOf('.'));
                 	   }
                       if (!entry.isDirectory()&& nameEnd.equals(".class")) 
    				   {
         				   int size=(int) entry.getSize(); System.out.println(size); 
                           Class<?> c=this.getClass().getClassLoader().loadClass(name);
                          Field f[]= c.getDeclaredFields();
     
                          for(Field g:f)
                          {System.out.println("--------------"+g+"----------------------");}
                            }
     
                            i++;                       
                        } // fin while(enumeration)
                } finally {
                    // Fermeture du JarFile
                    jarFile.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    	public static void main (String args []){
    		finale f=new finale();
    		f.load();
    	}
     
    }
    si le jar myJAR.jar contient des classes persistentes j'obtient l'exception suivante :
    Exception in thread "main" java.lang.NoClassDefFoundError: javax/jdo/spi/PersistenceCapable
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    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 finale.load(finale.java:49)
    at finale.main(finale.java:69)
    Si quelqu'un a une solution pour résoudre ce problème ou s'il voit une autre cause de cette exception qu'il n'hésite pas. Je suis prête à fournir plus de description à mon problème.
    Merci d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Par défaut
    Bonjour,

    tout le problème est à l'origine de l'absence de l'interface javax.jdo.spi.PersistenceCapable implémenté autaumatiquement lors de l'enhancement.
    Donc il suffit d'ajouter au class path du projet les librairies JDO nécessaires.

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

Discussions similaires

  1. [Info] Class File Editor
    Par maminova77 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/03/2006, 16h52
  2. API jackcess-1.1.3 error class file has wrong version 49.0
    Par dalio2579 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 22/03/2006, 00h38
  3. [débutant]class File : delete/renameTo()
    Par Zazawitch dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/01/2006, 21h36
  4. [JAR][Applet]Truncated class file
    Par frog dans le forum Applets
    Réponses: 5
    Dernier message: 22/08/2005, 12h41
  5. [Débutant][JNDI] Erreur "bad class file"
    Par giffle dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2005, 10h23

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