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

回到顶部