Мне нужно отображать отчеты Jasper с диаграммами и для них требуются отдельные классы ChartCustomizer. Мое приложение работает как веб-приложение Java.Как загрузить класс настройки Jasper во время выполнения?
Текущее состояние состоит в том, что шаблоны (файлы .jasper) упакованы с их необходимыми ресурсами в отдельный файл jar. Эти файлы jar сами хранятся как BLOB в базе данных. Я загружаю их собственным FileResolver, который я предоставляю в качестве параметра Jasper Engine.
До сих пор это отлично работает для меня, за исключением того, что я не могу загрузить классы Customizer. Я пытался поставить их в другой файл фляги и загружать их с собственным ClassLoader, а также предусмотреть, что в Jasper Engine:
URL customizersUrl = classLoader.findResource("customizers.jar");
if (customizersUrl != null) {
URI jarUri = customizersUrl.toURI();
JarFile jarFile = new JarFile(new File(jarUri));
Enumeration e = jarFile.entries();
URL[] jarContentUrls = {new URL("jar:file:" + jarUri.getPath() + "!/")};
customizerClassLoader = URLClassLoader.newInstance(jarContentUrls);
while (e.hasMoreElements()) {
JarEntry je = (JarEntry) e.nextElement();
if (je.isDirectory() || !je.getName().endsWith(".class")) {
continue;
}
// -6 because of .class
String className = je.getName().substring(0, je.getName().length() - 6);
className = className.replace('/', '.');
Class c = customizerClassLoader.loadClass(className);
}
}
parameters.put(JRParameter.REPORT_CLASS_LOADER, customizerClassLoader);
, но я все еще получаю java.lang.ClassNotFoundException, хотя я могу видеть в Debugger, который работает с загрузкой классов из jar.
Любая помощь приветствуется!