Digester
こういうのもあり?
<!-- config.xml --> <appConfig> <name>てすてす</name> <hoge value="ほげほげ" /> </appConfig>
<!-- configRule.xml --> <digester-rules> <pattern value="appConfig"> <object-create-rule classname="uronim1.s2.digester.AppConfig" /> </pattern> <pattern value="appConfig/name"> <bean-property-setter-rule propertyname="appName" /> </pattern> <pattern value="appConfig/hoge"> <object-create-rule classname="uronim1.s2.digester.Hoge" /> <set-properties-rule/> <set-next-rule methodname="setHoge" /> </pattern> </digester-rules>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components> <component name="myAppConfig" class="uronim1.s2.digester.AppConfig"> <initMethod> @org.apache.commons.beanutils.BeanUtils@copyProperties(#self, @org.apache.commons.digester.xmlrules.DigesterLoader@createDigester( @org.seasar.framework.util.ResourceUtil@getResource( "uronim1/s2/digester/configRule.xml") ) .parse(@org.seasar.framework.util.ResourceUtil@getResourceAsStream( "uronim1/s2/digester/config.xml") ) ) </initMethod> </component> </components>
package uronim1.s2.digester; public class AppConfig { private String appName_; private Hoge hoge_; public void setAppName(String appName) { appName_ = appName; } public String getAppName() { return appName_; } public void setHoge(Hoge hoge) { hoge_ = hoge; } public Hoge getHoge() { return hoge_; } }
package uronim1.s2.digester; public class Hoge { private String name_; public void setValue(String name) { name_ = name; } public String getValue() { return name_; } }
package uronim1.s2.digester; public class Main { public static void main(String[] args) throws IOException, SAXException { S2Container container = S2ContainerFactory.create("uronim1/s2/digester/config.dicon"); container.init(); AppConfig config = (AppConfig) container.getComponent("myAppConfig"); System.out.println(config.getAppName()); System.out.println(config.getHoge().getValue()); } }
実行結果
てすてす ほげほげ
動くには動けど、myAppConfigのinitMethodでやるべきことかどうか不明。なんとなく、違う感じがする。適当にコンポーネントになるクラス作って、そいつがDigester使えば良さそうかな。