我有一个如下所示的 XML 文档:
<!-- language: xml -->
<items>
<item type="java.lang.Boolean" name="foo" value="true" />
</items>
我希望<root>
元素创建一个java.util.Map
对象并让每个<item>
元素创建一个适当类型的对象,然后将一个条目添加到Map
-- 类似于 aSetNextRule
但带有来自堆栈的调用的参数。
我已经创建了一个自定义Rule
,它将使用属性中的值创建type
属性中指定类型的对象(java.lang.Boolean
在本例中)value
并将其推送到堆栈上。
现在,我想将项目从堆栈顶部弹出,并将其用作对象上的put
方法的参数Map
(它就在堆栈上的对象“下方” Boolean
)。
这是我到目前为止编写的代码:
<!-- language: lang-java -->
Digester digester = new Digester();
digester.addObjectCreate("items", HashMap.class);
digester.addRule(new MyObjectCreateRule()); // This knows how to create e.g. java.lang.Boolean objects
digester.addCallMethod("items/item", "put", 2, new Class<?>[] { String.class, Object.class });
digester.addCallParam("items/item", 0, "name");
digester.addCallParam("items/item", 1, true); // take argument from stack
我收到put
在类中找不到该方法的错误java.lang.Boolean
。所以,问题是 egBoolean
对象位于堆栈的顶部,我想将它用作堆栈put
上的下一个到顶部元素上调用的方法的参数:
堆:
java.lang.Boolean value=true <-- top of stack, desired call param
java.util.HashMap contents = {} <-- desired call target
有没有办法使用现有的 commons-digester 规则来做到这一点,或者我是否必须创建另一个执行此类操作的自定义规则?