說明:以簡單範例說明如何使用 Digester 將 XML 配置檔資訊與規則檔對應,生成 Java 物件。
在 Apache Commons 找到 Digester 專案,下載 commons-digester-1.6.zip。
commons-digester.jar:核心庫(內部用 SAX 解析,可能需 crimson.jar,JBuilder 環境 JDK 已內建無需額外加入)commons-beanutils.jar:公用工具包commons-logging.jar:日誌包,Digester 依賴<?xml version="1.0" encoding="UTF-8"?>
<db-base-config>
<control>
<queue-connection-factory>java:/ConnectionFactory</queue-connection-factory>
<sender-queue>
<param name="Internet">queue/Email</param>
<param name="CDMA">queue/SmsCdma</param>
</sender-queue>
</control>
<db-foreign-exchange-sql>
<publication_id>1</publication_id>
<receiver-list>
<param>Telephone</param>
<param>Email</param>
</receiver-list>
</db-foreign-exchange-sql>
</db-base-config>
<?xml version="1.0" encoding="UTF-8"?>
<digester-rules>
<pattern value="db-base-config/control">
<call-method-rule pattern="queue-connection-factory" methodname="setQueueConnectionFactory" paramcount="0"/>
<pattern value="sender-queue/param">
<call-method-rule methodname="addSenderQueue" paramcount="2"/>
<call-param-rule paramnumber='0' attrname='name'/>
<call-param-rule paramnumber='1'/>
</pattern>
</pattern>
<pattern value="db-base-config/db-foreign-exchange-sql">
<call-method-rule pattern="publication_id" methodname="setExchangePublicationID" paramcount="0"/>
<pattern value="receiver-list/param">
<call-method-rule methodname="addReceiverList" paramcount="0"/>
</pattern>
</pattern>
</digester-rules>
(原文未給出完整 Java 類別,需自行根據規則定義 setQueueConnectionFactory、addSenderQueue、setExchangePublicationID、addReceiverList 等方法)
使用 Digester 解析時,程式碼大致如下:
Digester digester = DigesterLoader.createDigester(rulesXmlUrl);
Object result = digester.parse(configXmlUrl);
Digester 會根據規則檔將配置檔資料自動映射至 Java 物件屬性與集合中。