4. ルールのXML化2005.09.20 株式会社四次元データ 宮澤了祐
Commons Digester 4章 ルールのXML化
4.1. ルールのXML化
ルール自体をXMLファイルにすることが出来ます。
これによりXMLのスキーマが変更されてもプログラムを変更する必要なくなります。
<pattern value="パターン>
<ルール .../>
</pattern>
<ルール pattern="パターン" ...>
ルールは、ルールの名前を次の法則で変換したものが入ります。
例えば<param1>パラメーター1</param1>というパターンをBeanのtextというプロパティに設定するルールの場合、 Javaでは
digester.addBeanPropertySetter("param1","text");
と記述しますが、XMLにすると
<pattern value="param1">
<bean-property-setter-rule propertyname="text" />
</pattern>
または <bean-property-setter-rule pattern="param1" propertyname="text" /> と記述します。 また<pattern>タグを使用する場合は、入れ子にすることが出来ます。
<pattern value="parent">
<ルール .../>
</pattern>
<pattern value="parent/child">
<ルール .../>
</pattern>
は次と同義です。
<pattern value="parent">
<ルール .../>
<pattern value="child">
<ルール .../>
</pattern>
</pattern>
以下は、2章で使用したXMLを読み込むルールをXML化した例です。 sample.xml1:<object> 2: <param1>param1</param1> 3: <param2>param2</param2> 4: 5: <parent> 6: <child>child</child> 7: </parent> 8:</object>samplerule.xml - ルールを記述したXMLファイルです。
<?xml version = "1.0" encoding = "euc-jp" ?>
<digester-rules>
<pattern value="object">
<object-create-rule classname="techscore.DigesterBean" />
<!--object/parentのルール-->
<pattern value="parent">
<object-create-rule classname="techscore.Parent" />
<set-next-rule methodname="setParent" />
<pattern value="child">
<bean-property-setter-rule />
</pattern>
</pattern>
<!--param1の設定-->
<pattern value="param1">
<bean-property-setter-rule />
</pattern>
</pattern>
<!--param2の設定-->
<pattern value="object/param2">
<bean-property-setter-rule />
</pattern>
</digester-rules>
要素はpatternタグのvalue属性に記述し、その内部にルールを記述します。
ルールはJavaのクラス名を小文字にしてハイフンで繋いだ形になります。
また、patternタグは入れ子にすることが出来ます。
import java.io.File;
import java.io.IOException;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;
public class MyDigester {
public static void main(String[] args) throws IOException, SAXException {
Digester d = DigesterLoader.createDigester(new File("techscore/samplerule.xml").toURL());
DigesterBean bean = (DigesterBean)d.parse(new File("techscore/sample.xml"));
System.out.println(bean.toString());
}
}
ルールの記述が完全に取り除かれていることがわかります。 |
![]()
![]()
|