Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java digester3中DigesterLoader.CreateMedigester(url)的替代项_Java_Apache Commons Digester - Fatal编程技术网

Java digester3中DigesterLoader.CreateMedigester(url)的替代项

Java digester3中DigesterLoader.CreateMedigester(url)的替代项,java,apache-commons-digester,Java,Apache Commons Digester,确切地说,我的问题是,在新的Digester3中,Digester.createLoader(url)的替代方法是什么 通用摘要:1.8.1代码 URL url; ClassLoader curClassLoader = this.getClass().getClassLoader(); url = curClassLoader.getResource("filepath"); if (url != null) { Diges

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

通用摘要:1.8.1代码

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

    if (url != null) {          
        Digester tempDigester = DigesterLoader.createDigester(url);
        ----
        ----
        }
    URL url;
    ClassLoader curClassLoader = this.getClass().getClassLoader();
    url = curClassLoader.getResource("filepath");

    if (url != null) {          
        Digester tempDigester = ???;
        ----
        ----
        }
现在我已经升级了
commons-digester-1.8.1
org.apcahe.commons.Digester3-3.2
,在新的jar中我没有看到任何方法是
createDigester(ur)

如何使用新API替换
DigesterLoader.createDigester(url)
,以获得Digester对象作为回报

通用摘要:3.2代码

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

    if (url != null) {          
        Digester tempDigester = DigesterLoader.createDigester(url);
        ----
        ----
        }
    URL url;
    ClassLoader curClassLoader = this.getClass().getClassLoader();
    url = curClassLoader.getResource("filepath");

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

提前感谢。

还没有检查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设置为最终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>

@PraveenKumarMekala为我提供了一个快速测试文件-您试图读取的xml规则的内容是什么?我正在深入研究我的异常并产生疑问,是否必须在我的xml文件中定义?@PraveenKumarMekala是的,DOCTYPE是必需的-请参阅上面的示例规则。你能发布一个你试图加载的规则文件的简单版本吗?@PraveenKumarMekala你的两个xml片段都没有结束标记——假设这只是一个剪切粘贴错误。添加了那些标签和一个DOCTYPE(根据前面的评论需要),然后加载对我来说很好,所以不确定该建议什么。异常的完整堆栈跟踪是什么?