У меня есть класс расширения ClassLoader с помощью следующего метода
@Override
public Class<?> findClass(String className) throws ClassNotFoundException {
try {
/**
* Get a bytecode from file
*/
byte b[] = fetchClassFromFS(pathtobin + File.separator
+ className.replaceAll("\\.", escapeSeparator(File.separator)) + ".class");
return defineClass(className, b, 0, b.length);
} catch (FileNotFoundException ex) {
return super.findClass(className);
} catch (IOException ex) {
return super.findClass(className);
}
}
Это, как вы можете видеть, использует метод defineClass () от его родителя - ClassLoader. Проблема в том, что когда я пытаюсь выполнить класс »(я получаю с моим расширением ClassLoader - пусть это будет ru.xmppTesting.test.Disco) метод getMethods () при получении экземпляра этого класса я получаю следующее
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/Header
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at DOTGraphCreator.createGraphFromClasses(DOTGraphCreator.java:85)
at DOTGraphCreator.generateDotGraphFile(DOTGraphCreator.java:56)
at DOTGraphCreator.main(DOTGraphCreator.java:46)
Caused by: java.lang.ClassNotFoundException: org.apache.http.Header
at java.lang.ClassLoader.findClass(Unknown Source)
at SourceClassLoader.findClass(SourceClassLoader.java:27)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
Насколько я вижу, это потому, что класс org.apache.http.Header не может быть найден как определено. Потому что это не так.
Итак, вот вопрос:
как я могу и должен определить и связать этот класс Header (и множество других из моих .jar libs) вместе с определением ru.xmppTesting.test.Disco и другими подобными для их определения на лету?