使用Apache POI创建XSSFWorkbook时遇WstxEventFactory未找到错误求助
我之前也碰到过一模一样的问题,HSSFWorkbook用得好好的,一换成XSSFWorkbook就报javax.xml.stream.XMLEventFactory: Provider com.ctc.wstx.stax.WstxEventFactory not found错误,咱们来拆解下原因和解决办法:
问题根源
HSSF处理的是老式的.xls格式,不需要依赖XML解析组件;但XSSF是用来处理.xlsx格式的,它基于OOXML规范,必须依赖**StAX(Streaming API for XML)**的具体实现来解析XML结构,而com.ctc.wstx.stax.WstxEventFactory就是Woodstox这个StAX实现里的核心类——你的Maven依赖里刚好缺了这个组件。
解决步骤
1. 添加Woodstox依赖
在你的pom.xml里加入Woodstox的核心依赖,这个包包含了缺失的WstxEventFactory类,推荐用和POI 3.15兼容的版本:
<dependency> <groupId>org.codehaus.woodstox</groupId> <artifactId>woodstox-core-asl</artifactId> <version>4.4.1</version> </dependency>
2. 排查依赖冲突
如果加了依赖还是报错,检查下你的项目里有没有其他依赖排除了StAX相关组件,比如有些框架可能会主动排除woodstox-core-asl或者stax-api,导致实现类找不到。可以用Maven的dependency:tree命令查看依赖树:
mvn dependency:tree
找到那些排除了StAX组件的依赖,调整排除规则或者升级对应依赖版本。
3. 确认版本兼容性
POI 3.15对Woodstox的版本要求是4.x系列,尽量不要用太新或者太旧的版本,避免出现兼容性问题。
补充说明
你的现有依赖里已经加了poi-ooxml,理论上它应该会间接依赖StAX相关组件,但有时候因为Maven的依赖传递规则(比如其他依赖的版本覆盖),或者仓库镜像的问题,导致依赖没有被正确引入,手动添加Woodstox依赖就能解决这个问题。
内容的提问来源于stack exchange,提问作者user3676512

