Digester在项目中应用

Digester由"事件"驱动,通过调用预定义的规则操作对象栈,将XML文件转换为Java对象。

对使用者而言,Digester的核心在于匹配模式与规则(matching pattern + rule)。

其实就两点:

1、用一个XML文件定义Java对象的状态(数据源文件),

2、另一个XML文件定义装载数据源文件的装载逻辑

场景:

CRM要调用帐管的接口查帐单,由于帐管接口未定下来,或者经常变动。

所以先定义好帐单类,因为展示形式相对固定,所以可以先定义好类。

然后

		String result = external2Oss.ossRequest(param);//帐管返回的帐单字符串
		if (param.getRequestNo()==5) {
			result="<?xml version='1.0' encoding='GBK'?><oss-response>	<BillInfo billCycle='20070701_20070801' totalCharge='130.0' unpaymentCharge='130.0' thisCharge='130.0' prepayCharge='0.0' adustmentCharge='0.0' freeCharge='0.0'></BillInfo></oss-response>";
		}
		String clsName = t.getName().replaceAll("\\.", "/") + ".xml";
		URL rulesURL = t.getClassLoader().getResource(clsName);
		Digester d = DigesterLoader.createDigester(rulesURL);
		d.push(obj);
		InputStream is = new ByteArrayInputStream(result.getBytes("GBK"));
		d.parse(is);

 这样,以后改了接口的时候只要修改XML即可。

 

应用场景:

1.appframe解析defaults.xml

    at org.apache.commons.digester.Digester.parse(Digester.java:1666)
    at com.ai.appframe2.complex.xml.XMLHelper.createDefaults(XMLHelper.java:304)
    at com.ai.appframe2.complex.xml.XMLHelper.getInstance(XMLHelper.java:79)
    at com.ai.appframe2.service.ServiceFactory.<clinit>(ServiceFactory.java:27)

2.tomcat解析server.xml

catalina.java

    protected Digester createStartDigester() {
        long t1=System.currentTimeMillis();
        // Initialize the digester
        Digester digester = new Digester();
        digester.setValidating(false);
        digester.setRulesValidation(true);
        HashMap<Class, List<String>> fakeAttributes = new HashMap<Class, List<String>>();
        ArrayList<String> attrs = new ArrayList<String>();
        attrs.add("className");
        fakeAttributes.put(Object.class, attrs);
        digester.setFakeAttributes(fakeAttributes);
        digester.setClassLoader(StandardServer.class.getClassLoader());

        // Configure the actions we will be using
        digester.addObjectCreate("Server",
                                 "org.apache.catalina.core.StandardServer",
                                 "className");
        digester.addSetProperties("Server");
        digester.addSetNext("Server",
                            "setServer",
                            "org.apache.catalina.Server");

        digester.addObjectCreate("Server/GlobalNamingResources",
                                 "org.apache.catalina.deploy.NamingResources");....

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值