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