- PR -

DigesterでのオブジェクトのMapへの格納について

1
投稿者投稿内容
suimu
会議室デビュー日: 2005/10/21
投稿数: 2
お住まい・勤務地: 姫路
投稿日時: 2005-11-04 21:11
以下のようなデーターが存在します。
<root>
<user id="admin" password="password"/>
<user id="user1" password="12345678"/>
<user id="user2" password="87654321"/>
</root>

userをそれぞれUserValueというBeanに格納してListにセットする場合、
Digetserルールによる記述では

<digester-rules>
/* root ノードをみつた時点で Listオブジェクトを作成 */
<object-create-rule pattern="root" classname="java.util.ArrayList" />
/* userlistの子ノードであるuserノードをみつける毎に */
<pattern value="root/user">
/* uservalueオブジェクト作成 */
<object-create-rule classname="UserValue"/>
/* 全てのレコードをセットして */
<set-properties-rule />
/* 先に作成したListに格納する */
<set-next-rule methodname="add" />
</pattern>
</digester-rules>

で実現できるのですが、例えばuserのidをKeyとしてMapに格納する場合どうよう
な記述をすればいいのでしょう。
ちなみにcommons-digesterのバージョンは1.7です。
いろいろ調べてみてcall-method-ruleとcall-param-ruleを利用すれば..と思っ
たのですがうまくいきません。なにとぞよろしくお願いします。
kac
会議室デビュー日: 2005/11/22
投稿数: 1
投稿日時: 2005-11-22 15:46
はじめましてKacと申します。
以下のようなルールでどうでしょうか?

<!-- HashMapを生成する -->
<object-create-rule pattern="root" classname="java.util.HashMap" />

<pattern value="root/user">

<!-- HashMap.put()をcall 引数は2つ -->
<call-method-rule methodname="put" paramcount="2" />

<!-- put()の第1引数は id属性 -->
<call-param-rule paramnumber="0" attrname="id" />

<!-- put()の第2引数用にBeanを生成する -->
<object-create-rule classname="UserValue" />

<!-- Beanに値をセットする -->
<set-properties-rule />

<!-- 生成したBeanはスタックの一番上にあるからそれを第2引数に指定する -->
<call-param-rule paramnumber="1" stack-index="0" />

</pattern>
1

スキルアップ/キャリアアップ(JOB@IT)