Apache Digester示例–轻松配置
使用Apache Digester相當容易將XML文檔轉換為相應的Java bean對象層次結構。 請參閱下面的“摘要”。
Digester引入了三個重要概念:
元素匹配模式將 XML元素與處理規則相關聯。
范例:
你有什么:
您有Java類和相應的xml文件。 您希望從xml數據創建Java類實例。
您需要編寫哪些額外的代碼。
分步任務:
現在在行動–
這是我的Eclipse項目結構:
任務2 –如下創建數據xml文件,您要從中加載數據, 例如– chain-config.xml
<?xml version="1.0" encoding="UTF-8"?><catalogs><!-- Default Catalog: "Path Info" example --><catalog><!-- Command that maps "Path Info" patterns to Commands --><chain name="COMMAND_MAPPER"><command className="org.apache.commons.chain.web.servlet.PathInfoMapper"/><command forward="/pathinfo.jsp" className="org.apache.commons.chain.apps.example.ForwardCommand"/></chain><!-- Foo Command --><chain name="/foo"><command attribute="pathinfoFooCount" className="org.apache.commons.chain.apps.example.CountCommand"/></chain><!-- Bar Command --><chain name="/bar"><command attribute="pathinfoBarCount" className="org.apache.commons.chain.apps.example.CountCommand"/></chain></catalog><!-- Catalog for "Request Parameter" example --><catalog name="reqparam"><!-- Command that maps a "Request Parameter" to Commands --><chain name="COMMAND_MAPPER"><command catalogName="reqparam" className="org.apache.commons.chain.web.servlet.RequestParameterMapper"/><command forward="/reqparam.jsp" className="org.apache.commons.chain.apps.example.ForwardCommand"/></chain><!-- Foo Command --><chain name="foo"><command attribute="reqparamFooCount" className="org.apache.commons.chain.apps.example.CountCommand"/></chain><!-- Bar Command --><chain name="bar"><command attribute="reqparamBarCount" className="org.apache.commons.chain.apps.example.CountCommand"/></chain></catalog></catalogs>
創建相應的Java類 Catalog.java:
Chain.java:
Command.java:
任務3 –創建 摘要程序 規則 digester-catalog-rules.xml
<?xml version="1.0"?> <!DOCTYPE digester-rules PUBLIC"-//Apache Commons //DTD digester-rules XML V1.0//EN""http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd"> <digester-rules><pattern value="catalogs/catalog"><object-create-rule classname="Catalog"/><set-properties-rule/><!-- comment :<bean-property-setter-rule pattern="name"/> use as shown above if say <catalog><name>reparam</name> </catalog> instead of <catalog name="reparam"> </catalog>--><!-- Nested Pattern for Characters --><pattern value="chain"><object-create-rule classname="Chain"/><set-properties-rule/> <!-- Nested Pattern for Characters --><pattern value="command"><object-create-rule classname="Command"/><set-properties-rule/><set-next-rule methodname="addCommands" paramtype="Command"/> </pattern><set-next-rule methodname="addChains" paramtype="Chain"/> </pattern><set-next-rule methodname="add" paramtype="Catalog"/> </pattern> </digester-rules>任務4 –加載xml數據的客戶端程序
import java.io.IOException; import java.io.InputStream; import java.net.URL;import org.apache.commons.digester3.Digester; import org.apache.commons.digester3.binder.DigesterLoader; import org.apache.commons.digester3.xmlrules.FromXmlRulesModule; import org.xml.sax.SAXException;import java.util.ArrayList; import java.util.List;public class runProgram {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub// Create an instance of the Digester from the XML rule setDigesterLoader digesterLoader = DigesterLoader.newLoader(new FromXmlRulesModule() {@Overrideprotected void loadRules() {// TODO Auto-generated method stubloadXMLRules( getClass( ).getResource("/com/tatu/resources/digester-catalog-rules.xml"));}}); Digester digester = digesterLoader.newDigester();List<Catalog> catalogs = new ArrayList<Catalog>();// Push a reference to the plays List on to the Stackdigester.push(catalogs);// Parse the XML documentInputStream input = Digester.class.getClass().getResourceAsStream("/com/tatu/resources/chain-config.xml");try {Object root = digester.parse(input);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} 做完了 因此,已經用xml數據加載了catalogs對象。
上述解決方案要注意的幾點:
有任何問題,請發表您的評論。
再想一想,您不希望在xml文件和java類之間出現所有這些問題。 猜猜怎么著,有個避免的辦法。 但是除非您著急,否則我不喜歡這個把戲。 但是,每次使用快捷方式時,都必須失去靈活性。
技巧是使用Apache Betwixt。 記住要使用Betwixt,您需要使用Apache Digester 2.1。 有關更多信息,請訪問apache Betwixt網站。
使用Betwixt BeanWriter將Java Bean寫入文件,然后使用BeanReader從該文件讀取。 從BeanWriter生成文件后,就可以更改值,并在BeanReader中加載該文件。 (需要在此處省略配置之間的映射)
祝您編程愉快,別忘了分享!
參考:在我的軟件開發博客博客上,來自我們的JCG合作伙伴 Bijay Deo的示例中使用Apache Digester-輕松進行配置 。
翻譯自: https://www.javacodegeeks.com/2012/09/apache-digester-example-make-easy.html
總結
以上是生活随笔為你收集整理的Apache Digester示例–轻松配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二类医疗器械备案证怎么办理(二类医疗器械
- 下一篇: JBoss BRMS与JasperRep