【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)
View Code

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反序列化報錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM