标签:pac ada 其他 row dex 模块 总结 提示 选择
此文仅为记录一次apache-poi
解析导入数据时所遇到的问题,并为出现这种问题的童鞋提供一个可能的解决思路。
运行环境记录:
1.jdk1.7(版本比较旧)
2.poi-3.0.2-FINALL
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
......
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator
at com.zimax.newacquisconfig.ExportExcel.importData(DaylyDataService.java:660)
at com.zimax.newacquisconfig.DaylyDataService.dataImport(DaylyDataService.java:86)
... 65 more
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 67 more
[rms][2021-03-12 15:45:19,703][ERROR][com.zimax.newacquisconfig.dynamic.importDynamicData_biz:258] [Name=com.zimax.newacquisconfig.dynamic.importDynamicData.biz][activity name=导入业务字典][activity id=invokeSpring0] throw an exception:java.lang.Exception,exception :
ErrCode: 19103002
Message: 调用Spring Bean方法出错
at com.zimes.spring.invoker.SpringInvoker.invoke(SpringInvoker.java:50)
......
at com.mes.access.http.UserLoginCheckedFilter.doIntercept(UserLoginCheckedFilter.java:102)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.zimes.spring.invoker.SpringInvoker.invoke(SpringInvoker.java:47)
... 60 more
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator
at com.zimax.newacquisconfig.ExportExcel.importData(DaylyDataService.java:660)
at com.zimax.newacquisconfig.DaylyDataService.dataImport(DaylyDataService.java:86)
... 65 more
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 67 more
由于项目是一个旧项目,使用的jdk和相关的工具类也比较老旧=_=||.出现错误后我第一时间在网络上搜索了一番,发现大部分的文章使用的版本都比较新颖最低的也是使用的poi-3.0.9。鉴于此种情况,我在借鉴了NoClassDefFoundError: org/apache/poi.../FileMagic文章后想到可能是缺少了某个依赖jar包导致的报错。于是到maven仓库中搜索apache+poi,在仓库中未发现poi-3.0.9有依赖其他poi系列jar包(除了基础的日志依赖外)。这个时候只能到官网看看文档中有没有提到
额外的依赖项了。在官方文档中并未找到提示说有需要引入额外jar包。Formula Evaluation(公式演算),于是我便怀疑是系统使用的jar包版本太旧导致的问题。在和Leader沟通后,得到了回复,可以先尝试引入新的jar包替换原jar包,但是替换后必须经过严格的测试,绝对不能影响系统已有功能。于是我结合系统使用的jdk版本选择了poi-3.6
贴出测试jar包使用完整性与引入jar包更新后对原系统的影响部分代码:
public static void main(String [] args){
Logger logger = TraceLoggerFactory.getLogger(ExportExcel.class);//此处为了测试替换成新版本的日志jar包后对系统的影响
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(new HSSFWorkbook());//此处为了模拟实际解析完上传的Excel后生成的Workbook对象
}
经过测试,引入比较新版的jar包后,对原系统功能无影响,各功能模块均正常运行。于是决定替换掉原先使用的jar包, 替换的各jar包版本如下:
/**
poi-3.0.2-FINAL.jar ====> poi-3.6.jar
log4j-1.1.18.jar ====> log4j-1.2.13
commons-loggin-1.0.8 ====> commons-logging-1.1
**/
遇到此类使用的工具包版本比较老旧,官方也不提供相关支持时,可以考虑在不影响原先系统功能的情况下,升级相关工具jar包.这可能是这种问题最快的解决办法。
使用poi-3.0.2解析Excel中的公式报错ClassNotFoundException ..HSSFFormulaEvaluator
标签:pac ada 其他 row dex 模块 总结 提示 选择
原文地址:https://www.cnblogs.com/xiaozhusuisuinian/p/14525917.html