首页 > 代码库 > Digester组件

Digester组件

刚认识Digester,记录一下:

    Digester随着Struts的发展以及其的公用性而被提到commons中独自立项,是apache的一个组件 apache commons-digester.jar,通过它可以很方便的从xml文件生成java对象.你不用再象以前通过jdom或者Xerces去读取一个document对象.(jdom和Xerces仍然有它们的用武之地及强大之处,在其它应用里你也少不了它们)

 

工作原理如下: Digester底层采用SAX(Simple API for XML)析XML文件,所以对象转换由"事件"驱动,在遍历每个节点时,检查是否有匹配模式,如果有,则执行规则定义的操作,比如创建特定的Java对象,或调用特定对象的方法等。此处的XML元素根据匹配模式(matching pattern)识别,而相关操作由规则(rule)定义。

Test.xml文件

<identity>  <ldap>                            <name>hao123</name>    <url>https://www.hao123.com/</url>  </ldap></identity>

Identity 类

    private String name;    private String url;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getUrl() {        return url;    }    public void setUrl(String url) {        this.url = url;    }

提取xml数据,赋值给Test类

InputStream is = IdentityUtil.class.getResourceAsStream("/test.xml");//读取xml文件Identity id = new Identity();//将xml文件的数据添加到对象中Digester d = new Digester();d.push(id);d.addCallMethod("identity/ldap/name","setName",0);d.addCallMethod("identity/ldap/url","setUrl",0);d.parse(is);
我们可以看到,使用Digester的代码变得相当简洁,而要付出的代价就是为装载逻辑写一个配置文件。
 
除了Digester之外,当然还有其它的方法来实现Java对象的绑定与装载:
1.java.util.Properties,简单的配置属性(比如数据库连接信息),可以写在properties文件中,调用Properties对象的load(InputStream)方法将配置中的健值对加载到Properties对象中。这种方式一般仅适用于简单的配置信息的加载。
2.JAXB,Java Architecture for XML Binding,在Java Web Services Developer Pack V 1.1中提供了一个参考实现。使用这种方式时,除了提供数据源XML文件之外,还必须提供相应的Schema文件。加载前,首先用Binding Compiler将Schema转换得到目标Java类的接口与实现,然后再调用Unmarshaller或Marshaller将数据源XML文件信息加载到Java对象中,或将设置的Java对象数据导出为XML文件。
3.XPath
4.JaxMe

 

Digester组件