2015-08-17 4 views
1

Я пытаюсь загрузить класс из папки, чтобы проверить реализацию конкретного метода. Класс имеет некоторые импортные данные, которых нет в папке или ее подпапках. Загрузка класса с помощью Class clazz = Class.forName(className, false, classLoader); работает нормально, но когда я звоню clazz.getDeclaredMethod("methodName"), тогда я получаю NoClassDefFoundError, потому что некоторые импорты не могут быть разрешены.Загрузка класса и проверка наличия метода без разрешения класса

Есть ли возможность проверить класс класса во время выполнения (я не намерен вызывать методы или создавать его экземпляр) без загрузки зависимостей?

Если нет, то как еще я могу проверить класс для реализации конкретного метода, когда у меня есть папка классов в качестве отправной точки?

+0

Могу ли я спросить, что вы строите, у которого есть такое требование? – Keith

+0

@Keith Мне нужно добавить оболочку вокруг класса статический анализ веб-службы Java. Для этого мне нужно найти классы, реализующие методы, вызываемые при входе запроса ('doGet()' и 'doPost()'). – Ch1llb4y

ответ

1

Интересный вопрос.

Я не думаю, что вы хотите катить собственный байт-код парсера, поэтому попробуйте Apache BCEL или Spring ASM. Оба позволяют читать или записывать файлы классов без необходимости их загрузки.

1

Возможно, вы сможете сделать это с помощью библиотеки, такой как Apache Commons BCEL.

Байт код техническая библиотека (Apache Commons BCEL ™) предназначена для предоставления пользователям удобный способ анализировать, создавать и манипулировать (двоичный) Java файлы класса (те, заканчивая .class).

0

Вы можете попробовать выполнить javap из своей программы и разобрать вывод. Например:

javap Driver 
Compiled from "Driver.java" 
public class Driver { 
    public Driver(); 
    public static void main(java.lang.String[]); 
} 
Смежные вопросы