Bonjour,

Je suis en train d'essayer de mettre un point un système d'upload d'un JAR qui permet de charger une classe - contenue dans le jar - dans la WebApp courante.

Pour cela je me suis servi comme base de la classe FileClassLoader de Jack Harich (trouvée sur javaworld) que j'ai modifié.

Donc le principe upload à travers struts -> sauvegarde dans le fichier <web-app>/WEB-INF/extlib/<session-id>.jar

Puis lecture des octets du fichier class à travers le fichier Jar.
Voici le code de la méthode de FileClassLoader qui permet de lire le tableau de byte avant l'appel à defineClass
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
 
protected byte[] loadClassBytes(String className) {
 
  className = formatClassName(className);
  byte result[];
  String fileName = filePrefix + className;
  try {
    ZipFile zipFile = new ZipFile(filePrefix);
    ZipEntry entry = zipFile.getEntry(className);
    InputStream inStream = zipFile.getInputStream(entry);
    result = new byte[inStream.available()];
    inStream.read(result);
    inStream.close();
    return result;
  }
  ...
Mais voilà quand j'appelle la méthode chargement j'ai l'erreur suivante :
java.lang.ClassFormatError: com/SimpleTest (Illegal constant pool index)
Donc pour tester j'ai mis directement le jat dans WEB-INF/lib et là j'ai accès sans problème à la classe. J'en conclu que c'est certainement la lecture à travers le Zip qui me pose problème...

Avez vous une idée ? Ou une autre classe pour faire cela ....