使用POI导入EXCEL报java.lang.IncompatibleClassChangeError

转载 2016年05月30日 14:49:35

使用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的版本即可。

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

 

参考资料:

java.lang.IncompatibleClassChangeError:

POI 3.7 java.lang.IncompatibleClassChangeError when instantiating a Font

Frequently Asked Questions

提取文本内容二:提取word格式文档内容

使用POI导入数据到Excel数据量过大报错解决方案

导出excel报不能超过4000行错误   POI操作Excel中,导出的数据不是很大时,则不会有问题,而数据很多或者比较多时, 就会报以下的错误,是由于cell styles太多create造成,故...
  • Victor_Cindy1
  • Victor_Cindy1
  • 2016年08月12日 09:47
  • 3023

POI一键导入Excel数据到数据库

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 直接...
  • zwz568017880
  • zwz568017880
  • 2014年06月20日 14:34
  • 2641

poi excel批量导入 解决各类型的数据

String value=this.getValue((HSSFCell) row.getCell(position))   数字类型  时间类型 字符串类型验证没问题, 数字类型如果是1234.0...
  • myfmyfmyfmyf
  • myfmyfmyfmyf
  • 2014年07月09日 10:09
  • 17234

Java 使用POI实现Excel表格的导入导出

1.介绍最近的项目需要导出数据到Excel表格里,写个Demo测试一下,还是比较简单的,写在博客里记录下来,分享给童鞋们。需要导入POI.jar包,下载地址:2.实现已经在代码中加入了完整的注释。im...
  • kong_gu_you_lan
  • kong_gu_you_lan
  • 2016年10月13日 10:16
  • 4188

Java POI 导入Excel并解析

项目上碰到需要导入Excel表的数据,主要包括web端上传部分和spring后端代码。       1、Web页面代码       ,注意form里需增加encType="multipart/fo...
  • linlzk
  • linlzk
  • 2015年04月16日 11:42
  • 14014

[转]Poi读取Excel引发的内存溢出

前言 最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了。 分析 1.dump内存文件 liunx使用如下命令: ./jmap -dump:forma...
  • sl543001
  • sl543001
  • 2017年06月30日 13:19
  • 1964

java实现excel的导入导出(poi详解)

经过两天的研究,现在对excel导出有点心得了。我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了。是比较好用的excel导出工具。 下面来认识一下这个它吧。 我们知...
  • ljj_9
  • ljj_9
  • 2015年12月24日 17:08
  • 2562

Java Poi 在SSM框架中的应用(由Excel 导入到Mysql数据库)

最近在跟着组长做项目,之前学了javamail发送邮件,也成功了,等有空了再写一篇博客,昨天学了一下 java poi (没有在框架中应用),今天自己搭建了SSM框架, 手写了一下这个应用,虽然页面比...
  • Jasmine_lh
  • Jasmine_lh
  • 2017年08月07日 21:41
  • 1557

利用POI实现Excel的导入导出

在项目开中,我们经常需要用excel来导入导出数据,而POI技术是实现我们需求的一个选择。 他兼容2003-2013的版本(目前只测试到2013,以后如果有测试更新的,再修改) 以下是一个对应03...
  • qq_1017097573
  • qq_1017097573
  • 2017年02月18日 22:51
  • 3587

Spring使用POI实现Excel导入导出

本次项目实践基于SSM框架,简单封装了Excel批量导入导出功能,从实战角度,详细介绍了项目excel导入导出详细实现过程...
  • u012466304
  • u012466304
  • 2017年04月13日 18:13
  • 5821
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
举报原因:
原因补充:

(最多只允许输入30个字)