替换为digester3中的DigesterLoader.createDigester(url)

时间:2017-11-22 11:43:10

标签: java apache-commons-digester

准确地说,我的问题是新Digester.createLoader(url)Digester3的替代方法是什么?

commons-digester:1.8.1代码

    URL url;
    ClassLoader curClassLoader = this.getClass().getClassLoader();
    url = curClassLoader.getResource("filepath");

    if (url != null) {          
        Digester tempDigester = DigesterLoader.createDigester(url);
        ----
        ----
        }

现在我已将commons-digester-1.8.1升级为org.apcahe.commons.Digester3-3.2,在新广告中我没有看到任何方法createDigester(ur);

如何使用新API替换DigesterLoader.createDigester(url)以获得Digester对象。

commons-digester:3.2 code

    URL url;
    ClassLoader curClassLoader = this.getClass().getClassLoader();
    url = curClassLoader.getResource("filepath");

    if (url != null) {          
        Digester tempDigester = ???;
        ----
        ----
        }

提前致谢。

1 个答案:

答案 0 :(得分:1)

Haven没有准确检查1.8版本的功能,但假设您的URL解析为基于XML的规则流,那么这样的事情应该可以解决问题:

import org.apache.commons.digester3.Digester;
import org.apache.commons.digester3.binder.DigesterLoader;
import org.apache.commons.digester3.binder.RulesModule;
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;

final URL url = curClassLoader.getResource("filepath");

RulesModule rules = new FromXmlRulesModule() {
  @Override
  protected void loadRules() {
    loadXMLRules(url);
  }
};

DigesterLoader loader = DigesterLoader.newLoader(rules);
Digester digester = loader.newDigester();

请注意,您可能必须使您的URL最终在匿名子类中使用它。

使用以下简单规则文件进行测试:

<?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'>
<digester-rules>
  <pattern value='data'>
    <object-create-rule classname='test.digester.BasicTest$ClassA'/>
    <bean-property-setter-rule pattern='name' propertyname='name'/>
  </pattern>
</digester-rules>

需要DOCTYPE声明,但可以使用或不使用XML声明。没有DOCTYPE运行会给出:

Parse Error at line 1 column 17: Document root element "digester-rules", must match DOCTYPE root "null"