OSGi/CXF环境下JasperReports ExtensionsEnvironment初始化失败(NoClassDefFoundError)问题求助
OSGi/CXF环境下JasperReports ExtensionsEnvironment初始化失败(NoClassDefFoundError)问题求助
各位好,我目前在基于OSGi容器(Karaf/Fuse)的项目中,使用Apache CXF 3.5.5搭配Pax Web/Jetty运行Java 17代码,最近在编译JasperReports模板时遇到了一个棘手的问题:调用JasperCompileManager.compileReportToFile()方法时抛出了NoClassDefFoundError,根源是net.sf.jasperreports.extensions.ExtensionsEnvironment类在静态初始化阶段直接失败了。
错误栈信息:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.extensions.ExtensionsEnvironment at net.sf.jasperreports.engine.DefaultJasperReportsContext.getExtensions(DefaultJasperReportsContext.java:273) ... Caused by: java.lang.ExceptionInInitializerError: at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:81) at net.sf.jasperreports.extensions.ExtensionsEnvironment.createDefaultRegistry(ExtensionsEnvironment.java:91) at net.sf.jasperreports.extensions.ExtensionsEnvironment.<init>(ExtensionsEnvironment.java:78)
我的编译代码实现:
public static void compile(String reportKey) throws JRException { ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); try { // 尝试切换到服务实现类的类加载器 Thread.currentThread().setContextClassLoader(ExtensionsEnvironment.class.getClassLoader()); File mainReportFile = new File(REPORT_PATH, reportKey + ".xml"); File destFileParent = new File(REPORT_PATH + "compiled/"); JasperCompileManager.compileReportToFile( // 此处执行失败 mainReportFile.getAbsolutePath(), new File(destFileParent, reportKey + ".jasper").getAbsolutePath() ); } finally { Thread.currentThread().setContextClassLoader(originalClassLoader); } }
环境详情:
- JasperReports版本:7.0.3(来自错误栈信息)
- OSGi容器:Karaf/Fuse
- Java版本:17
- Apache CXF版本:3.5.5
- 运行载体:通过Pax Web部署在Jetty上
我的疑问:
- 为什么在OSGi环境中,
ExtensionsEnvironment的静态初始化流程会失败? - JasperReports 7.0.3和Apache CXF 3.5.5在OSGi环境下是否存在已知的兼容性问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

