4.2ダンBeanの
Listのナカに、JavaBeanのListがあるタイプであるが、
クラスとルールがオオくなるだけで、Beanと原理的ゲンリテキにはわらない。
JavaBean sample.util.digester.CascadeListBean.java
package sample.util.digester;
import java.util.ArrayList;
import java.util.List;
public class CascadeListBean {
private String countryJ = "";
private String countryE = "";
private List list_ = new ArrayList();
private static final String LS = System.getProperty("line.separator");
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("<");
sb.append(countryJ);
sb.append("|");
sb.append(countryE);
sb.append(">");
sb.append(LS);
if(list_.size() > 0) {
//sb.append(tempSubTest.getParam1());
for(int i = 0 ; i < list_.size() ; i++) {
ListBean listBean = (ListBean)list_.get(i);
sb.append("  "+listBean.toString() + LS);
}
}
return sb.toString();
}
public void addListBean(ListBean listBean) {
list_.add(listBean);
}
public List getListBeanList() {
return list_;
}
public String getCountryJ() {
return countryJ;
}
public String getCountryE() {
return countryE;
}
public void setCountryJ(String string) {
countryJ = string;
}
public void setCountryE(String string) {
countryE = string;
}
}
XMLデータファイル c:\usr\local\digester\CascadeListBeanData.xml
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <country countryJ="日本" countryE="Japan"/>
  <block>
<address pref="東京" city="高輪"/>
  <pcinfo id="PC2       " os="win2000" cpumhz="500" memmb="256" hdgb="16" http_server="" 
 db="" java="" visual_studio="" virus_tool="" etc="" maker="FujitsuDeskPower" remarks=" "/>
  <pcinfo id="PC3       " os="win2000" cpumhz="500" memmb="192" hdgb="12" http_server="" 
 db="" java="" visual_studio="あぱっち" virus_tool="" etc="漢字テスト" maker="FujitsuDeskPower" remarks=" "/>
  </block>
  <block>
<address pref="千葉" city="東金"/>
  <pcinfo id="PC4       " os="win2000" cpumhz="500" memmb="256" hdgb="16" http_server="" 
 db="" java="" visual_studio="" virus_tool="" etc="" maker="FujitsuDeskPower" remarks=" "/>
  <pcinfo id="PC5       " os="win2000" cpumhz="500" memmb="192" hdgb="12" http_server="" 
 db="" java="" visual_studio="あぱっち" virus_tool="" etc="漢字テスト" maker="FujitsuDeskPower" remarks=" "/>
  </block>
</dataset>
ルールファイル c:\usr\local\digester\CascadeListBeanRuleSample.xml
<?xml version = "1.0" encoding = "Shift_JIS" ?>
<digester-rules>
  <object-create-rule pattern="dataset" classname="sample.util.digester.CascadeListBean" />
<pattern value="dataset/country">
<set-properties-rule />
</pattern>
<pattern value="dataset/block">
<object-create-rule classname="sample.util.digester.ListBean" />
<set-properties-rule />
<set-next-rule methodname="addListBean" />
</pattern>
<pattern value="dataset/block/address">
<set-properties-rule />
</pattern>
<pattern value="dataset/block/pcinfo">
<object-create-rule classname="sample.util.db.SoftwareBean" />
<set-properties-rule />
<set-next-rule methodname="addSoftwareBean" />
</pattern>
</digester-rules>
みテストJavaクラス sample.util.digester.CascadeListBeanTest.java
package sample.util.digester;
import java.io.File;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import java.rmi.*;
public class CascadeListBeanTest implements java.rmi.Remote {
public CascadeListBeanTest() {}
public static void main(String[] args) throws Exception {
CascadeListBeanTest clbt = new CascadeListBeanTest();
CascadeListBean clb = clbt.getCascadeListBean();
System.out.println(clb.toString() );
}
public CascadeListBean getCascadeListBean() throws RemoteException {
CascadeListBean clb = null;
try {
Digester d = DigesterLoader.createDigester(new File("/usr/local/digester/CascadeListBeanRule.xml").toURL());
clb = (CascadeListBean)d.parse(new File("/usr/local/digester/CascadeListBeanData.xml"));
} catch( Exception exc ) {
exc.printStackTrace();
}
return clb;
}
}
実行ジッコウ結果ケッカ
<日本|Japan>
  東京|高輪
    PC2,FujitsuDeskPower,500,256,16,,,,,,,
    PC3,FujitsuDeskPower,500,192,12,,漢字テスト,,,,あぱっち,
  千葉|東金
    PC4,FujitsuDeskPower,500,256,16,,,,,,,
    PC5,FujitsuDeskPower,500,192,12,,漢字テスト,,,,あぱっち,
JSP画面ガメン結果ケッカ