博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
阅读量:6485 次
发布时间:2019-06-23

本文共 2014 字,大约阅读时间需要 6 分钟。

使用POI导入xls格式的excel报java.lang.IncompatibleClassChangeError异常,而导入xlsx正常。

oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_GENERIC_MESSAGE. Tokens: MESSAGE = oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.IncompatibleClassChangeError, msg=null;  

 

I'm almost certain that you have an older version of POI on your classpath

 基本可以确定,是包含了一个老版本的POI导致的。

 

通过在服务器上编译,发现此致命错误

found : org.apache.poi.hssf.usermodel.HSSFWorkbook

required: org.apache.poi.ss.usermodel.Workbook

 

几经检查,都没有发现有其他版本的POI。最终,参考官方FAQ文档,

ClassLoader classloader =   org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();java.net.URL res = classloader.getResource(             "org/apache/poi/poifs/filesystem/POIFSFileSystem.class");String path = res.getPath();System.out.println("POI Core came from " + path);classloader = org.apache.poi.POIXMLDocument.class.getClassLoader();res = classloader.getResource("org/apache/poi/POIXMLDocument.class");path = res.getPath();System.out.println("POI OOXML came from " + path);classloader = org.apache.poi.hslf.HSLFSlideShow.class.getClassLoader();res = classloader.getResource("org/apache/poi/hslf/HSLFSlideShow.class");path = res.getPath();System.out.println("POI Scratchpad came from " + path);

定位到原因是以前有人将POI包直接解压到了JAVA_TOP路径下,所以和我的产生了冲突。

啊,多么痛的领悟。

再三检查,靠,那哥们儿解压的POI已经不知道是哪个年月的版本的了。

心中真是有一万个草泥马在狂飙。真想揪出来打一顿。

 

终极大招:

将java源文件丢到服务器上编译,根据报错再一个个导入class文件。

 

好不容易编译时通过,结果报了运行时异常:

oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_GENERIC_MESSAGE. Tokens: MESSAGE = oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.NoSuchMethodError, msg=org/apache/poi/poifs/filesystem/POIFSFileSystem.getRoot()Lorg/apache/poi/poifs/filesystem/DirectoryNode;;  

Exception  in  thread "main" java.lang.NoSuchMethodError: org/apache/poi/POIDocument.<init>(Lorg/apache/poi/poifs/filesystem/DirectoryNode;)V

最后才发现是poi中各jar版本冲突 ,例如 其他包都是用的3.8的,但是poi.jar用的是3.6的版本,所以就报错了,将3.6的删掉,加入3.8的版本即可。

最后,迫不得已,放出最后杀招:将那哥们儿的先备份了,然后直接删除。

 

参考资料:

转载地址:http://qfiuo.baihongyu.com/

你可能感兴趣的文章
Pro Aspnet MVC 4读书笔记(3) - Essential Language Features
查看>>
better-scroll 遇到的问题 1
查看>>
User Agent注入攻击及防御
查看>>
ASP.NET MVC 性能优化总结
查看>>
布尔表达式与条件判断-4
查看>>
[AGC012E]Camel and Oases
查看>>
bt5设置IP
查看>>
WildFly8(JBoss)默认web服务器-------Undertow
查看>>
LightOJ - 1354 IP Checking
查看>>
【实习记】2014-08-24实习生无法映射磁盘替代方案rsync+非默认端口22设置
查看>>
unisound_asr 云知声 语音识别 python版接口
查看>>
ocelot 配置文件 意思
查看>>
nodejs 环境安装
查看>>
LeetCode 139. Word Break
查看>>
学习笔记之Model selection and evaluation
查看>>
内存映射MMAP和DMA【转】
查看>>
linux内核环形缓冲区【转】
查看>>
[BZOJ2463][中山市选2009]谁能赢呢?
查看>>
(十四)struts2的国际化
查看>>
Eclipse启动时出现错误 An internal error occurred during: "Updating indexes"
查看>>