次のような XML ドキュメントがあります。
<!-- language: xml -->
<items>
<item type="java.lang.Boolean" name="foo" value="true" />
</items>
<root>
要素でオブジェクトを作成し、java.util.Map
各<item>
要素で適切な型のオブジェクトを作成してから、エントリをMap
--に追加しますSetNextRule
が、スタックからの呼び出しに引数を付けます。
属性の値を使用して、属性で指定されたタイプ (この場合)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
ます。したがって、問題は、egオブジェクトがスタックの一番上にあり、スタックの一番上から 2 番目の要素で呼び出されるメソッドBoolean
への引数として使用したいということです。put
スタック:
java.lang.Boolean value=true <-- top of stack, desired call param
java.util.HashMap contents = {} <-- desired call target
既存の commons-digester ルールでこれを行う方法はありますか? または、このタイプの操作を実行する別のカスタム ルールを作成する必要がありますか?