POI升级至5.0.0搭配xlsx-streamer2.2.0触发NoSuchMethodError如何解决
问题根因
你遇到的报错和xmlbeans版本无关,核心是依赖版本不兼容:
你当前使用的xlsx-streamer 2.2.0最高仅支持适配POI 4.x系列版本,而POI 5.0.0对内部API做了不兼容升级,org.apache.poi.xssf.model.SharedStringsTable的getEntryAt(int)方法签名发生变更,旧版本返回的CTRst相关接口被调整,xlsx-streamer 2.2.0底层仍在调用POI 4.x的旧方法签名,所以触发如下错误:
java.lang.NoSuchMethodError: org.apache.poi.xssf.model.SharedStringsTable.getEntryAt(I)Lorg/openxmlformats/schemas/spreadsheetml/x2006/main/CTRst;
解决方案
- 方案1:升级xlsx-streamer版本
直接将xlsx-streamer的版本升级到2.3.0及以上即可,该版本已经完成POI 5.x系列的API适配,无需调整现有POI 5.0.0、xmlbeans 5.0.1的版本。 - 方案2:回退POI到4.x系列
若业务侧无法升级xlsx-streamer版本,将POI版本回退到4.1.2及以下的4.x稳定版本,xmlbeans同步保持3.x版本即可恢复正常。 - 方案3:自行修改适配(不推荐)
若必须同时使用POI 5.0.0和xlsx-streamer 2.2.0,可以fork xlsx-streamer 2.2.0的源码,修改com.monitorjbl.xlsx.impl.StreamingSheet中调用SharedStringsTable.getEntryAt的逻辑,适配POI 5.x的新API后重新打包引入项目。
内容的提问来源于stack exchange,提问作者Rambabu Pudi
相关产品推荐
相关产品推荐

