Apache POI 5.2.2中XDDFDoughnutChartData.getHoleSize()抛出异常求助
Apache POI获取环形图表孔大小抛出SchemaTypeLoaderException排查思路
问题场景
使用Apache POI 5.2.2开发PowerPoint自定义环形图表时,从PPT模板现有环形图表中获取孔大小的代码如下:
else if (data instanceof XDDFDoughnutChartData){ log.info("SUCCESS"); XDDFDoughnutChartData pieData = (XDDFDoughnutChartData) data; Integer holeSize= pieData.getHoleSize(); }
运行时抛出异常:
org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Could not locate compiled schema resource org/apache/poi/schemas/ooxml/system/ooxml/stholesizepercenta3d2type.xsb (org.apache.poi.schemas.ooxml.system.ooxml.stholesizepercenta3d2type) - code 0 at org.apache.xmlbeans.impl.schema.XsbReader.<init>(XsbReader.java:63) ~[xmlbeans-5.0.3.jar:na] at org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl.resolveHandle(SchemaTypeSystemImpl.java:933) ~[xmlbeans-5.0.3.jar:na] at org.apache.xmlbeans.SchemaComponent$Ref.getComponent(SchemaComponent.java:113) ~[xmlbeans-5.0.3.jar:5.0.3] at org.apache.xmlbeans.SchemaType$Ref.get(SchemaType.java:1072) ~[xmlbeans-5.0.3.jar:5.0.3] at org.apache.xmlbeans.impl.schema.SchemaTypeImpl.computeFlatUnionModel(SchemaTypeImpl.java:1281) ~[xmlbeans-5.0.3.jar:na] at org.apache.xmlbeans.impl.schema.SchemaTypeImpl.getUnionConstituentTypes(SchemaTypeImpl.java:1239) ~[xmlbeans-5.0.3.jar:na] at org.apache.xmlbeans.impl.values.XmlUnionImpl.set_text(XmlUnionImpl.java:88) ~[xmlbeans-5.0.3.jar:na]
排查思路
锁定XMLBeans与POI的匹配版本
Apache POI 5.2.2官方适配的XMLBeans版本是5.0.2,异常中显示当前使用的是xmlbeans-5.0.3.jar,版本不匹配是核心诱因。需在依赖管理中强制指定XMLBeans为5.0.2版本:<dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>5.0.2</version> </dependency>排查并解决依赖传递冲突
使用依赖分析工具定位引入xmlbeans-5.0.3的来源:- Maven执行
mvn dependency:tree,Gradle执行gradle dependencies
找到冲突依赖后,通过排除规则移除其传递的XMLBeans引用:
<dependency> <!-- 替换为实际冲突的依赖坐标 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> </exclusion> </exclusions> </dependency>- Maven执行
清理项目缓存并重新构建
删除本地Maven/Gradle仓库中xmlbeans相关的包,执行mvn clean install(Maven)或gradle clean build(Gradle),确保依赖完全重新拉取,避免缓存的不匹配包干扰。确保POI组件版本统一
检查所有POI相关依赖(如poi、poi-ooxml、poi-ooxml-schemas)是否均为5.2.2版本,禁止混合不同版本的POI组件,否则会引发Schema加载类的兼容性问题。
内容的提问来源于stack exchange,提问作者user2557930
相关产品推荐
相关产品推荐

