Woodstox设置P_MAX_ENTITY_COUNT报错:无法识别com.ctc.wstx.maxEntityCount
解决Woodstox 6.x中"Unrecognized property 'com.ctc.wstx.maxEntityCount'"错误
问题根源
Woodstox从Codehaus迁移到FasterXML后,6.x版本将配置属性的前缀从com.ctc.wstx改为了com.fasterxml.woodstox。你遇到的错误本质是属性键版本不匹配,即使已确认xmlInputFactory是WstxInputFactory实例,仍可能存在以下问题:
- 项目中混入了旧版本(org.codehaus.woodstox)的Woodstox类,导致
WstxInputProperties是旧版本的,其P_MAX_ENTITY_COUNT常量仍指向旧属性键 - 类加载器冲突,导致加载的属性常量与工厂类版本不一致
解决方案
方案1:显式使用新版本属性键
直接指定FasterXML Woodstox 6.x对应的属性键:
xmlInputFactory = XMLInputFactory.newInstance(); xmlInputFactory.setProperty("com.fasterxml.woodstox.maxEntityCount", 100000);
方案2:确保导入正确的WstxInputProperties类
检查代码导入,确认使用FasterXML版本的类:
import com.fasterxml.woodstox.stax.WstxInputProperties; // 正确类路径 // 避免导入 com.ctc.wstx.stax.WstxInputProperties(旧版本)
方案3:彻底清理依赖冲突
在build.gradle中强制使用指定版本的Woodstox,并排除所有旧版本依赖:
configurations.all { resolutionStrategy { // 强制依赖FasterXML的Woodstox 6.5.0 force 'com.fasterxml.woodstox:woodstox-core:6.5.0' // 排除所有Codehaus版本的Woodstox依赖 exclude group: 'org.codehaus.woodstox', module: 'woodstox-core' exclude group: 'org.codehaus.woodstox', module: 'woodstox-core-asl' } }
执行./gradlew dependencies查看依赖树,确认无旧版本Woodstox残留。
方案4:显式实例化WstxInputFactory
绕过XMLInputFactory的SPI加载机制,直接创建FasterXML版本的工厂实例:
import com.fasterxml.woodstox.stax.WstxInputFactory; // 直接实例化,避免SPI加载带来的类加载问题 xmlInputFactory = new WstxInputFactory(); xmlInputFactory.setProperty(WstxInputProperties.P_MAX_ENTITY_COUNT, 100000);
内容的提问来源于stack exchange,提问作者Dulmina
相关产品推荐
相关产品推荐

