commons-digester 升级到 commons-digester3 的坑

原创
05/09 17:27
阅读数 261

如果你也遇到同样的报错问题, 查看本文章,可以直接帮你节省大约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">

解决问题

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部