一、概要
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)View Code
4、原因
初步定位到的原因是:待匯出的資料里面有單獨的“=”
5、重現型別
必現
二、修復進度(更新中)
已通過在Github里提Issue(https://github.com/jeecgboot/JimuReport/issues/859)的方式通知了作者,且在官方QQ群進行了通知,等待回復中
三、摸查原因
匯出所在頁面是匯出資料分頁展示的地方,在翻頁了幾次之后,發現了特定頁也會出現相同的Blank expression例外,因此懷疑是特殊字符導致的例外;從資料庫找到對應頁的資料,發現了只有“=”的資料,但是仍然不知道為啥“=”會引起例外;回到例外堆疊中,由于積木報表原始碼經過了混淆,無法直接定位到具體行,只能先定位到方法,通過查找AviatorEvaluatorInstance.compile被呼叫的地方,定位到了這里:

里面果然包含了“=”,這里把只有“=”的資料替換成空字串,直接導致compile方法拋出Blank expression例外,測驗如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455391.html
標籤:Java
上一篇:Java中的基本資料型別
下一篇:OSError:[Errno8]Execformaterror:'/home/ec2-user/Desktop/chromedriver'在AWSEC2ARM風味機器中使用Chro
