使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
2015-07-31 14:24
591 查看
使用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文档,
定位到原因是以前有人将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格式文档内容
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格式文档内容
相关文章推荐
- 关于java读取clob字段的几种方法
- struts2标签遍历各种形式数据集合
- 4种java复制文件的方式
- MD5算法介绍及jdk自带实现方式
- Spring源码学习-1.IOC-DefaultListableBeanFactory
- Struts2.3.1升级到Struts2.3.24相关问题
- Eclipse+Maven构建web项目三种方式
- springMVC
- Eclipse 快捷键
- Be cautious when using Map and Set in Java
- 英语总结系列(七):Spring
- Java生成数据
- SpringMVC整合Shiro
- 自定义mybatis分页插件
- Java 数组类型(基本类型数组类型、封装类型数组类型、数组的数组类型)
- java 生成4位数的随机数据 70万条
- How to download offline javadoc?
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- Spring源码:Spring 容器资源加载模板模式应用
- Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener