使用 digester xmlrules 声明插件
declare plugin with digester xmlrules
我尝试在 xml 文件中编写 Apache 摘要解析规则 (xmlrules)。但是我在 digester-rules.dtd 中没有看到类似 PluginCreateRule 的东西。问题是:(如何)我可以在 xml 规则文件中声明和引用插件吗?
我觉得你运气不好。
如您所见,DTD 文件中没有 plugin-create-rule
。此外,Digester 使用自身来解析 XML 规则,并且在 digester configuration itself.
中没有提及 plugin-create-rule
查看该代码,添加该规则似乎非常简单,所以我不确定它是否被遗漏只是因为没有人有时间添加它,或者因为有一些实施中的问题不是很明显。
我想尝试一个补丁来实现这个,但最近似乎 little activity in Digester 正在开发...
更新
是的 - 创建支持此功能的基本实现似乎相当简单:
- 向
binder/PluginCreateRuleBuilder
添加方法以支持通过 class 名称创建,而不仅仅是 class 实例(只是从 ObjectCreateBuilder
复制代码)。
- 添加一个新的
xmlrules/PluginCreateRule
class(同样,基于 ObjectCreateRule
,其中大部分被丢弃)。
- 将规则添加到
XmlRulesModule
。
- 将规则添加到 DTD。
完整补丁文件here.
使用 Digester Plugin doco 中的示例和以下 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>
请注意,这只是一个基本的概念验证,但如果您想这样做,应该会给您一些帮助。此外,还有更多用于创建插件的选项,这些选项未包含在本文中,但对于完整的解决方案来说是必需的,因此此补丁(在其当前状态下)不适合提交回 Digester 项目。
更新 2
要调用它,您需要在创建消化器时将一个 PluginRules
实例传递给加载器:
DigesterLoader loader = DigesterLoader.newLoader(new FromXmlRulesModule() {
...
});
Digester digester= loader.newDigester(new PluginRules());
干杯,
我尝试在 xml 文件中编写 Apache 摘要解析规则 (xmlrules)。但是我在 digester-rules.dtd 中没有看到类似 PluginCreateRule 的东西。问题是:(如何)我可以在 xml 规则文件中声明和引用插件吗?
我觉得你运气不好。
如您所见,DTD 文件中没有 plugin-create-rule
。此外,Digester 使用自身来解析 XML 规则,并且在 digester configuration itself.
plugin-create-rule
查看该代码,添加该规则似乎非常简单,所以我不确定它是否被遗漏只是因为没有人有时间添加它,或者因为有一些实施中的问题不是很明显。
我想尝试一个补丁来实现这个,但最近似乎 little activity in Digester 正在开发...
更新
是的 - 创建支持此功能的基本实现似乎相当简单:
- 向
binder/PluginCreateRuleBuilder
添加方法以支持通过 class 名称创建,而不仅仅是 class 实例(只是从ObjectCreateBuilder
复制代码)。 - 添加一个新的
xmlrules/PluginCreateRule
class(同样,基于ObjectCreateRule
,其中大部分被丢弃)。 - 将规则添加到
XmlRulesModule
。 - 将规则添加到 DTD。
完整补丁文件here.
使用 Digester Plugin doco 中的示例和以下 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>
请注意,这只是一个基本的概念验证,但如果您想这样做,应该会给您一些帮助。此外,还有更多用于创建插件的选项,这些选项未包含在本文中,但对于完整的解决方案来说是必需的,因此此补丁(在其当前状态下)不适合提交回 Digester 项目。
更新 2
要调用它,您需要在创建消化器时将一个 PluginRules
实例传递给加载器:
DigesterLoader loader = DigesterLoader.newLoader(new FromXmlRulesModule() {
...
});
Digester digester= loader.newDigester(new PluginRules());
干杯,