addCallMethod、addCallParam、addObjectCreate、addSetProperties、addSetNext 等規則聲明式處理。所需 JAR:digester、beanutils、collections、commons-logging、相容 SAX2/JAXP1.1 的解析器(如 Xerces)。配置 commons-logging.properties 指向 Log4j。
<?xml version="1.0" encoding="gb2312"?>
<quasar_module>
<module_info>
<name>Skyhome</name>
<description>web site system</description>
<version>2.0.1</version>
<author>l_walker</author>
<mail>walker@skyinn.org</mail>
<update_time>2003-04-30</update_time>
</module_info>
<action_mappings>
<action name="home" requestPath="/Home" actionClass="org.skyinn.action.GlobalAction"/>
<action name="forum" requestPath="/Forum" actionClass="org.skyinn.action.ForumAction"/>
</action_mappings>
</quasar_module>
Digester digester = new Digester();
digester.push(this); // 將當前實例壓入堆疊
digester.addCallMethod("quasar_module/module_info", "addModuleInfo", 6);
digester.addCallParam("quasar_module/module_info/name", 0);
digester.addCallParam("quasar_module/module_info/description", 1);
digester.addCallParam("quasar_module/module_info/version", 2);
digester.addCallParam("quasar_module/module_info/author", 3);
digester.addCallParam("quasar_module/module_info/mail", 4);
digester.addCallParam("quasar_module/module_info/update_time", 5);
digester.parse(configFile);
對應處理方法:
public void addModuleInfo(String name, String desc, String ver, String author, String mail, String time) {
System.out.println("name=" + name + ", version=" + ver + "...");
}
Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate("quasar_module/action_mappings", SampleDigester.class);
digester.addObjectCreate("quasar_module/action_mappings/action", ActionMapping.class);
digester.addSetProperties("quasar_module/action_mappings/action", "name", "name");
digester.addSetProperties("quasar_module/action_mappings/action", "requestPath", "requestPath");
digester.addSetProperties("quasar_module/action_mappings/action", "actionClass", "actionClass");
digester.addSetNext("quasar_module/action_mappings/action", "addActionMapping");
digester.parse("module.xml");
ActionMapping 需具備 name、requestPath、actionClass 三屬性及 getter/setter。addActionMapping(ActionMapping) 會在每個 <action> 結束時被呼叫。
| 規則方法 | 用途 |
|---|---|
| addObjectCreate(pattern, class) | 遇到 pattern 實例化類別,壓入堆疊 |
| addSetProperties(pattern, attr, prop) | 將 XML 屬性 attr 映射至堆疊頂物件的屬性 prop |
| addCallMethod(pattern, method, paramCount) | 呼叫堆疊頂物件的 method,參數由 addCallParam 提供 |
| addCallParam(pattern, paramIndex) | 將 pattern 節點文字內容作為第 paramIndex 參數 |
| addSetNext(pattern, method) | 彈出堆疊頂物件,傳給次頂物件的 method |