准确地说,我的问题是新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 = ???;
----
----
}
提前致谢。
答案 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"