【BUG记录】积木报表导出的时候出现了Blank expression的异常
一、概要
1、来源
积木报表版本号:1.4.2
2、异常现象
导出Excel失败
3、异常栈:

com.googlecode.aviator.exception.CompileExpressionErrorException: Blank expression at com.googlecode.aviator.AviatorEvaluatorInstance.compile(AviatorEvaluatorInstance.java:1419) at com.googlecode.aviator.AviatorEvaluatorInstance.compile(AviatorEvaluatorInstance.java:1413) at com.googlecode.aviator.AviatorEvaluatorInstance.compile(AviatorEvaluatorInstance.java:1400) at com.googlecode.aviator.AviatorEvaluatorInstance.compile(AviatorEvaluatorInstance.java:1535) at org.jeecg.modules.jmreport.desreport.express.b.a(ExpressUtil.java:262) at org.jeecg.modules.jmreport.desreport.express.a.a(ExpressHandler.java:259) at org.jeecg.modules.jmreport.desreport.express.a.a(ExpressHandler.java:172) at org.jeecg.modules.jmreport.desreport.express.a.(ExpressHandler.java:78) at org.jeecg.modules.jmreport.desreport.express.b.a(ExpressUtil.java:239) at org.jeecg.modules.jmreport.desreport.service.a.e.show(JimuReportServiceImpl.java:3545) at org.jeecg.modules.jmreport.desreport.service.a.e$$FastClassBySpringCGLIB$$4daca651.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684) at org.jeecg.modules.jmreport.desreport.service.a.e$$EnhancerBySpringCGLIB$$959bd496.show() at org.jeecg.modules.jmreport.desreport.service.a.k.a(JmReportExportExcelImpl.java:258) at org.jeecg.modules.jmreport.desreport.service.a.k.a(JmReportExportExcelImpl.java:213) at org.jeecg.modules.jmreport.desreport.service.a.k.exportExcel(JmReportExportExcelImpl.java:117) at org.jeecg.modules.jmreport.desreport.a.a.b(DesignReportController.java:1069)
4、原因
初步定位到的原因是:待导出的数据里面有单独的“=”
5、重现类型
必现
二、修复进度(更新中)
已通过在Github里提Issue(https://github.com/jeecgboot/JimuReport/issues/859)的方式通知了作者,且在官方QQ群进行了通知,等待回复中
2022-04-18更新:
作者已经在1.5.0-beta版本中修复该bug,升级日志:http://www.jimureport.com/doc/log,还未验证
三、摸查原因
导出所在页面是导出数据分页展示的地方,在翻页了几次之后,发现了特定页也会出现相同的Blank expression异常,因此怀疑是特殊字符导致的异常;从数据库找到对应页的数据,发现了只有“=”的数据,但是仍然不知道为啥“=”会引起异常;回到异常栈中,由于积木报表源码经过了混淆,无法直接定位到具体行,只能先定位到方法,通过查找AviatorEvaluatorInstance.compile被调用的地方,定位到了这里:
里面果然包含了“=”,这里把只有“=”的数据替换成空字符串,直接导致compile方法抛出Blank expression异常,测试如下:
PS:后面又出现了由于业务数据包含特殊字符而导出报错的bug,见随笔:【BUG记录】积木报表导出数据出现JSON反序列化报错
标签:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通