Hallöchen Ihr,
bin gerade total am Verzweifeln (mal wieder) :-(
Folgendes Problem: Ich möchte aus einem JavaEE WebProjekt heraus beliebige Klassen aus dem Filesystem laden. Dazu habe ich einen kleinen FileClassLoader entsprechend den Vorlagen die es ja zuhauf im Netz gibt geschrieben:
Angewendet wird das Teil in etwa so:
Man gibt einen Pfad an, dieser wird rekursiv nach .class Dateien abgesucht. Wenn eine class-Datei gefunden wird, wird sie mit dem FileClassLoader geladen und geprüft ob eine bestimmte Annotation vorhanden ist bei dieser Klasse. Wenn ja, dann wird sie einer Liste hinzugefügt.
Das Problem ist nun: Wenn ich das ganz normal in Eclipse ausführe funktioniert alles wunderbar! Er lädt alle Klassen und erkennt wenn die Annotation vorhanden ist. Wenn ich diese Methode mit dem gleichen Pfad innerhalb von Tomcat (v6.0) ausführe, lädt er die Klassen ebenfalls, er erkennt aber nie die Annotaton der Klassen?!?!? Kann sich das irgendjemand erklären? Werde hier echt noch wahnsinnig ???:L Die "classBytes" die geladen werden sind übrigens 100% identisch bei normaler java Ausführung und Tomcat! Kann es mir nicht erklären...
Liebe Grüße Nicole
bin gerade total am Verzweifeln (mal wieder) :-(
Folgendes Problem: Ich möchte aus einem JavaEE WebProjekt heraus beliebige Klassen aus dem Filesystem laden. Dazu habe ich einen kleinen FileClassLoader entsprechend den Vorlagen die es ja zuhauf im Netz gibt geschrieben:
Code:
public class FileClassLoader extends java.lang.ClassLoader
{
@SuppressWarnings("deprecation")
public Class<?> loadClassFromFile(File f) throws ClassNotFoundException, IOException
{
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream (fis);
byte classBytes[] = new byte[(int)f.length()];
dis.readFully (classBytes);
dis.close();
Class<?> c = defineClass(classBytes, 0, classBytes.length);
resolveClass(c);
return c;
}
}
Angewendet wird das Teil in etwa so:
Man gibt einen Pfad an, dieser wird rekursiv nach .class Dateien abgesucht. Wenn eine class-Datei gefunden wird, wird sie mit dem FileClassLoader geladen und geprüft ob eine bestimmte Annotation vorhanden ist bei dieser Klasse. Wenn ja, dann wird sie einer Liste hinzugefügt.
Das Problem ist nun: Wenn ich das ganz normal in Eclipse ausführe funktioniert alles wunderbar! Er lädt alle Klassen und erkennt wenn die Annotation vorhanden ist. Wenn ich diese Methode mit dem gleichen Pfad innerhalb von Tomcat (v6.0) ausführe, lädt er die Klassen ebenfalls, er erkennt aber nie die Annotaton der Klassen?!?!? Kann sich das irgendjemand erklären? Werde hier echt noch wahnsinnig ???:L Die "classBytes" die geladen werden sind übrigens 100% identisch bei normaler java Ausführung und Tomcat! Kann es mir nicht erklären...
Code:
public Vector<Class<?>> getAnnotatedClasses(String path)
{
Vector<Class<?>> classes = new Vector<Class<?>>();
scanPath(new File(path), classes);
return classes;
}
private void scanPath(File f, Vector<Class<?>> classes)
{
if (f.isDirectory())
{
for (File file : f.listFiles())
{
scanPath(file, classes);
}
}
else
{
if (f.getName().endsWith(".class"))
{
try
{
Class<?> c = new FileClassLoader().loadClassFromFile(f);
if (c.isAnnotationPresent(MyAnnotation.class))
{
classes.add(c);
}
}
catch (Exception e)
{
// nix tun
e.printStackTrace();
}
}
}
}
Liebe Grüße Nicole