0
我需要使用圖表呈現Jasper報表,並且需要單獨的ChartCustomizer類。我的應用程序以Java Web應用程序的形式運行。如何在運行時加載Jasper定製程序類?
當前狀態是,模板(.jasper文件)與其所需資源一起打包在單獨的jar文件中。這些jar文件本身作爲BLOB存儲在數據庫中。我用一個自己的FileResolver加載它們,我將它作爲Jasper引擎的一個參數提供。
到目前爲止,這對我很好,除非我無法加載我的Customizer類。我試圖把它們放在另一個jar文件,並用自己的ClassLoader加載它們,並提供給碧玉引擎:
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,雖然我在看調試器,從jar的類加載工作。
任何幫助表示讚賞!