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では用意しています。