Google размышления не разрешают мои параметры типа на аннотированных методах
У меня есть следующий код, который хорошо работает, если проект находится в моем classpath локально, и я делаю getClass(). GetClassLoader(). Но когда я пытаюсь загрузить динамически из внешнего банку, это не удается.
Это не в состоянии загрузить MyType, который является типом на параметре метода как это:
@MyAnnotation("FOO.BAR")
public Object echo(@Valid MyType param) throws Exception {
return...;
}
Этот код завершится с ошибкой "org.reflections.ReflectionsException: не удалось получить тип для имени MyType":
myLoader = new URLClassLoader(new URL[]{new URL("file:///"+jarfile)});
myLoaders.Add(myLoader);
ConfigurationBuilder builder = new ConfigurationBuilder()
.addClassLoaders(loaders)
.setScanners(new MethodAnnotationsScanner())
.setUrls(ClasspathHelper.forPackage(myPackage, myLoaders));
Reflections reflections = new Reflections(builder);
return reflections.getMethodsAnnotatedWith(MyAnnotation.class);
Я считаю, что проблема заключается в загрузчике классов. Есть ли другой способ загрузить банку так, чтобы она подобрала все типы?
1 ответ
Я думаю, что я просто решил это, используя forClassLoader вместо forPackage.