Digesterの使い方(覚書)

おぼえがき
strutsのpluginとして、Digesterを使ってXMLファイルから
定数情報を参照したり、そのほか色々応用はあるのですが、、

ルールファイル

<digester-rules>
	<object-create-rule pattern="Conf" classname="hoge"/>
	<call-method-rule pattern="Conf/obj" methodname="setProperty" paramtypes="java.lang.String,java.lang.String" paramcount="2" />
	<call-param-rule pattern="Conf/obj" paramnumber="0" attrname="key" />
	<call-param-rule pattern="Conf/obj" paramnumber="1" attrname="value" />
</digester-rules>

下のような感じで呼び出し
※インターフェースorg.apache.struts.action.PlugInの委譲クラスとして作成

		StringTokenizer st = new StringTokenizer(pathnames, ",");
		try {
                        // ルールファイルのロード
			URL rulesUrl = this.getClass().getResource("digester-rules.xml");
			Digester digester = DigesterLoader.createDigester(rulesUrl);
			digester.setValidating(false);
			while (st.hasMoreTokens()) {
				 String rules = st.nextToken().trim();
                                 // パース処理を行う
				 digester.parse(servlet.getServletContext().getRealPath(rules));
			}
		} catch (SAXException ex) {
			throw new ServletException(ex);
		}

読み込むファイル(プログラムから定数として参照したり)

<?xml version="1.0"?>
<Conf>
<obj key="aaa" value="111" />
<obj key="bbb" value="222" />
</Conf>

struts-config.xmlのpluginとして登録する

<plug-in className="HogePlugin">
  <set-property property="pathnames" value="/WEB-INF/aaa.xml,/WEB-INF/bbb.xml"/>
</plug-in>