JasperReport本地运行告警、GlassFish部署报JRStyledTextParser错误如何解决?
告警问题:unchecked method invocation 修复
该告警是泛型类型不匹配导致的:fillReport 方法要求入参为 Map<String,Object> 类型,你代码中传入的是无泛型约束的原始 Map 类型,触发了编译期 unchecked 告警。
修复方案二选一即可:
- 修改方法入参的泛型声明,将方法定义改为:
public void runReport(String repPath, java.util.Map<String, Object> param) throws Exception
- 若入参类型无法修改,在调用
fillReport的代码行上方添加压制告警注解:
@SuppressWarnings("unchecked") JasperPrint print = JasperFillManager.fillReport(template, param, conn);
运行错误:java.lang.NoClassDefFoundError 修复
该错误是 JRStyledTextParser 类初始化失败导致的,常见于非桌面环境的应用服务器,按以下步骤排查修复:
- 开启GlassFish的AWT无头模式:打开GlassFish对应domain的JVM启动参数配置,添加启动参数
-Djava.awt.headless=true,重启服务生效。 - 调整类加载优先级:在应用的
WEB-INF/glassfish-web.xml配置文件中添加<class-loader delegate="false"/>,让应用优先加载自身WEB-INF/lib下的依赖包,避免和GlassFish自带的相关依赖版本冲突。 - 补全依赖包:确认应用
WEB-INF/lib目录下包含JasperReport 5.6.0所需的全部依赖:itext、commons-collections、commons-logging、commons-digester、commons-beanutils、xml-apis,缺失的包补充完整后重新部署。 - 安装系统字体:Linux环境下若缺少基础字体包也会导致该类初始化失败,安装对应系统的字体包(如CentOS下执行
yum install fontconfig urw-fonts)后重启GlassFish即可。
内容的提问来源于stack exchange,提问作者Mohamed
相关产品推荐
相关产品推荐

