Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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
Apache commons digester 使用digester xmlrules声明插件_Apache Commons Digester - Fatal编程技术网

Apache commons digester 使用digester xmlrules声明插件

Apache commons digester 使用digester xmlrules声明插件,apache-commons-digester,Apache Commons Digester,我尝试在xml文件(xmlrules)中编写Apache digester解析规则。但是我在digester-rules.dtd中没有看到类似于PluginCreateRule的东西。问题是:(如何)在xml规则文件中声明和引用插件?我想你在这里运气不好 如您所见,DTD文件中没有插件创建规则。此外,Digester使用自己来解析XML规则,在本文中没有提到插件创建规则 看看这些代码,添加该规则似乎很简单,所以我不确定是否因为没有人愿意添加它,或者是因为实现中存在一些不明显的问题而忽略了它 我想

我尝试在xml文件(xmlrules)中编写Apache digester解析规则。但是我在digester-rules.dtd中没有看到类似于PluginCreateRule的东西。问题是:(如何)在xml规则文件中声明和引用插件?

我想你在这里运气不好

如您所见,DTD文件中没有
插件创建规则。此外,Digester使用自己来解析XML规则,在本文中没有提到
插件创建规则

看看这些代码,添加该规则似乎很简单,所以我不确定是否因为没有人愿意添加它,或者是因为实现中存在一些不明显的问题而忽略了它

我想尝试一个补丁来实现这一点,但最近似乎有了发展

更新

是的-创建支持以下内容的基本实现似乎相当简单:

  • binder/PluginCreateRuleBuilder
    添加一个方法,以支持按类名而不仅仅是类实例创建(仅从
    ObjectCreateBuilder
    复制代码)
  • 添加一个新的
    xmlrules/PluginCreateRule
    类(同样,基于
    ObjectCreateRule
    ,其中大部分被丢弃)
  • 将规则添加到
    XmlRulesModule
  • 将规则添加到DTD
完整补丁文件

使用来自的示例和以下XML进行测试

<digester-rules>
  <pattern value="pipeline">
    <object-create-rule classname="Pipeline"/>
    <pattern value="source">
      <call-method-rule methodname="setSource" paramcount="1"/>
      <call-param-rule paramnumber="0" attrname="file"/>
    </pattern>
    <pattern value="transform">
      <plugin-create-rule pluginclass="Transform"/>
    </pattern>
    <pattern value="destination">
      <call-method-rule methodname="setDest" paramcount="1"/>
      <call-param-rule paramnumber="0" attrname="file"/>
    </pattern>
  </pattern>
</digester-rules>

干杯,

非常感谢您的帮助。在补丁之后,我在start元素中遇到了一个异常:org.apache.commons.digester3.RulesBase不能强制转换为org.apache.commons.digester3.plugins.PluginRules。也许我在什么地方犯了个错误。无论如何,我决定只使用对象创建规则,因为插件创建规则也需要一个
include
属性来创建它自己的规则文件。这对我来说太复杂了:(没问题。我已经更新了我的答案以通过类强制转换异常,但是如果你能从交付的包中得到你需要的东西,那么这几乎总是一个更好的方法:-)
DigesterLoader loader = DigesterLoader.newLoader(new FromXmlRulesModule() {
  ...
});

Digester digester= loader.newDigester(new PluginRules());