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使えば良さそうかな。