commonsdigester升级到commonsdigester3的坑
如果你也遇到同样的报错问题, 查看本文章,可以直接帮你节省大约2小时时间
commons-digester 已经很久没有维护了, 这次在升级 feilong 到3 的时候, 顺便也升级下 commons-digester3 依赖
1. 升级依赖的jar
<dependency> <groupId>org.apache.commons</groupId>
<artifactId>commons-digester3</artifactId>
<version>3.2</version>
</dependency>
2 报错 1 DigesterLoader.createDigester
升级后, 发现找不到 DigesterLoader.createDigester 方法了
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();Digester digester = DigesterLoader.createDigester(new InputSource(contextClassLoader.getResourceAsStream(RULE_FILE)));
找了一圈的攻略未果, 直接在commons-digester 官网下载src source 包 http://commons.apache.org/proper/commons-digester/download_digester.cgi 查看 单元测试类 之后 改造成
private static Digester build(String file){ try{
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
Digester digester = DigesterLoader.newLoader(new FromXmlRulesModule(){
@Override
protected void loadRules(){
loadXMLRules(new InputSource(contextClassLoader.getResourceAsStream(RULE_FILE)));
}
}).newDigester();
digester.setValidating(false);
return digester;
}catch (Exception e){
throw new DefaultRuntimeException("can not create Digester from: " + file, e);
}
}
3 报错 2 文档根元素 "digester-rules" 必须匹配 DOCTYPE 根 "null"
执行代码,报错
17:25:30 ERROR (Digester.java:1526) [error()] Parse Error at line 2 column 17: 文档根元素 "digester-rules" 必须匹配 DOCTYPE 根 "null"。org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 17; 文档根元素 "digester-rules" 必须匹配 DOCTYPE 根 "null"。
我拿我的rule xml 和官网单元测试里面的rule xml 进行对比 ,然后将xml 最顶部代码改成
<?xml version="1.0"?><!DOCTYPE digester-rules PUBLIC "-//Apache Commons //DTD digester-rules XML V1.0//EN" "http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd">
解决问题
以上是 commonsdigester升级到commonsdigester3的坑 的全部内容, 来源链接: utcz.com/z/516302.html