Spring ModulesでDynaBeanを使用できるようにする部品

Spring Modulesでは、MapやDynaBeanを妥当性チェックすることができません。

DynaBeanインターフェースとは、Apache Commonsのライブラリの1つです。

DynaBeanには、LazyDynaMapという派生クラスがあり、MapをDynaBeanに変換することができます。

つまり、DynaBeanがSpring Modulesで使用できるようになれば、自動的にMapも扱えるようになります。

soracaneでは、DynaBeanをSpring Modulesで使用するための部品を用意しています。

以下のクラスです。

DynaBindException

DynaValidatorFactory

以下でこのクラスの設定の仕方を見ていきます。

目標

まず、以下のサンプルの目標(ゴール)を示します。

MapをSpring Modulesで妥当性チェックします。

使用サンプル

<Spring設定サンプル: applicationContext.xml>

<!-- テスト用Validator -->

<bean id="dynaValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">

<property name="validatorFactory" ref="validatorFactory"/>

</bean>

<!--validator 用の設定 -->

<bean id="validatorFactory" class="jp.co.soracane.modules.dyna.DynaValidatorFactory">

<property name="validationConfigLocations">

<list>

<value>classpath:/test/validator-rules.xml</value>

<value>classpath:/test/batch/core/validator/validator.xml</value>

</list>

</property>

</bean>

Validatorの設定をします。

DynaValidatorFactoryはFactoryですので、それをDefaultBeanValidatorなどに設定することになります。

このあたりは、通常のSpring Modulesの使用方法です。

<妥当性チェックファイルサンプル: validator-rules.xml, validator.xml>

ここでは特にvalidatorファイルの記述はしません。

サンプルにあわせて自由に設定してみてください。

参考:

妥当性チェック

<妥当性チェックサンプル: ValidatorTest.java>

Map<String, Object> map = new HashMap<String, Object>();

map.put("id", 10000);

map.put("name", "あいうえお");

//DynaBeanの作成と、エラーオブジェクトの作成。

LazyDynaBean dyna= new LazyDynaMap("member", map);

DynaBindException errors = new DynaBindException(dyna, "member");

Validator validator =(Validator)applicationContext.getBean("dynaValidator");

//妥当性チェック実行

validator.validate(map, errors);

System.out.println(errors);

通常はBindExceptionを使用するところを、DynaBindExceptionに置き換えるだけで使用できます。

その他は、特に通常のSpring Modulesの使い方と変わりません。

上記はCommons Validatorを使用した例になっていますが、Valangの場合も同様にできますので試してみてください。

最後に

ちなみにStrutsでは、デフォルトでDynaBeanをサポートしています。

DynaBeanをサポートできれば、getter/setterを持たないクラスでも妥当性チェックができるようになります。

なぜならDynaBeanはインターフェースであるため、色々なクラスにimplementsできるからです。

妥当性チェックできる対象を広げることができると思います。

例として、DynaBindExceptionを使用して、Spring BatchのJobParametersの妥当性チェックを可能にすることもできます。

それを実装した部品もsoracaneでは用意しています。