您的位置:首页 > 运维架构 > Tomcat

tomcat之catalina使用Digester解析XML配置文件

2017-07-11 13:29 886 查看
Catalina使用Digester解析XML配置文件,所以这里讲解一下如何使用Digester读取配置文件。

Digester是一款用于将XML转换为java对象的事件驱动型工具,是对SAX的高层次封装,隐藏了XML节点具体的层次细节,使开发者更加专注于处理过程。Digester最早作为struts的一部分,后来移到了Apache Commons项目中,maven依赖如下

<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>2.0</version>
</dependency>


示例代码如下:
首先定义一个Java对象

package org.csu.coderlee.tomcat.digester;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Created by lixiang on 2017 07 11 下午12:52.
*/
public class Department {
private String name;
private String code;
private Map<String, String> extension = new HashMap<String, String>();
private List<User> users = new ArrayList<User>();

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public void addUser(User user) {
this.users.add(user);
}

public void putExtension(String name, String value) {
this.extension.put(name, value);
}
}

package org.csu.coderlee.tomcat.digester;

/**
* Created by lixiang on 2017 07 11 下午1:18.
*/
public class User {
private String name;
private String code;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}
}

上述代码中,Department对象包含name和code两个属性,以及一个User的列表,一个表示扩展属性的Map

要转换的XML文件内容如下 test.xml

<?xml version="1.0" encoding="utf-8" ?>
<department name="deptname001" code="deptcode001">
<user name="username001" code="usercode001"></user>
<user name="username002" code="usercode002"></user>
<extension>
<property-name>director</property-name>
<property-value>joke</property-value>
</extension>
</department>
这样准备工作已经完成,我们可以来编写代码完成XML的解析

package org.csu.coderlee.tomcat.digester;

import org.apache.commons.digester.Digester;

import java.io.File;

/**
* Created by lixiang on 2017 07 11 下午1:01.
*/
public class DigesterHandler {
public static void main(String[] args) {
Digester digester = new Digester();
digester.setValidating(false);
// digester.setRules(true);
//匹配department节点时, 创建Department对象
digester.addObjectCreate("department", Department.class);
digester.addSetProperties("department");

digester.addObjectCreate("department/user", User.class);
digester.addSetProperties("department/user");

digester.addSetNext("department/user", "addUser");

digester.addCallMethod("department/extension", "putExtension", 2);
digester.addCallParam("department/extension/property-name", 0);
digester.addCallParam("department/extension/property-value", 1);

try {
Department department = (Department) digester.parse(new File("/Users/lixiang/workspace/javase/src/main/java/org/csu/coderlee/tomcat/digester/test.xml"));
System.out.println(department);
} catch (Exception e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: