有个jar包冲突问题 SAXParserFactory saxFactory = SAXParserFactory.newInstance();代码会扫描类路径里SAXParserFactory的子类来实例化,当有多个子类的时候,实例化得到的对象可能不同,导致解析xlsx文件出错。在我的开发环境中因为引入了apache的xerces的org.apache.xerces.jaxp.SAXParserFactoryImpl类,导致无法解析xlsx,删除该xercesImpl-2.7.1.jar包,用jdk默认的xml解析类就可以了
Q
[alibaba/easyexcel]xlsx的解析代码冲突漏洞
3
A
回答
5
可以,我终于知道为啥我的xlsx无法解析了
6
1楼同学说的非常好,是因为SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 在反射时存在多个子类导致实例化对象不同,而作者在最新的1.1.0版本中底层又变回了POI解析,那么在使用最新版本处理较大的xlsx文件时,如上传了100W条数据还是会产生OOM,而项目里又依赖xercesImpl-x.x.x.jar无法删除时,本人建议方法是,下载作者1.0.4版本代码,找到类XmlParserFactory,将代码SAXParserFactory saxFactory = SAXParserFactory.newInstance();反射方法改为SAXParserFactory saxFactory = new SAXParserFactoryImpl();进行手动对象创建,这样就不会产生反射时对象创建错误,之后再进行手动打包引入项目
3
这个如果需要解决的话需要引入sun
下面的包,对使用openjdk的会有影响。暂时不考虑写死