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");....
分享到:
相关推荐
Digester是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...
Castor和Digester是两个在Java开发...在实际项目中,可能需要结合使用这两个库,以充分利用它们的优势。通过上述实例,你应该对如何使用Castor和Digester有了基本的理解,但要完全掌握它们,还需要进一步的实践和学习。
总的来说,Digester 是一个功能强大的XML解析工具,能够简化Java应用中XML数据的处理。通过合理地利用其规则和特性,可以高效地将XML文档转化为易于操作的对象模型,极大地提高了开发效率。在实际项目中,了解并熟练...
在实际开发中,digester3.2常用于构建配置文件驱动的应用程序,因为它允许灵活地将XML配置映射到Java对象,降低了代码与配置之间的耦合度。例如,在Web应用程序中,可以使用digester来解析web.xml文件,动态地创建和...
8. **使用示例**: 在实际应用中,首先你需要创建一个 Digester实例,然后定义并添加RuleSet。接着,调用`parse()`方法,传入XML输入源,这样Digester就会开始解析XML并执行相应的Rule,创建和填充Java对象。 例如,...
`commons-digester-2.1.jar` 是Apache Commons项目中的一个组件,主要负责XML文档的解析和对象的创建与绑定。Apache Commons Digester库提供了一种规则驱动的方法来解析XML文档,并根据预定义的规则将XML数据映射到...
在Java开发中,Apache Commons Digester是一个非常有用的库,它允许开发者通过XML配置来...在实际应用中,还可以结合使用这两种方法,以便在需要灵活性的地方使用硬编码规则,在其他地方利用规则文件来保持代码整洁。
本文将深入探讨digester包的原理、使用方法以及在实际项目中的应用。 首先,让我们了解什么是Apache Commons Digester。digester是一个开源Java库,它通过定义规则来解析XML文档,这些规则决定了当XML文档中的特定...
在Java开发中,处理XML文件是常见的任务,而Apache Commons Digester库提供了一种高效且便捷的方式来解析XML并将其映射到Java对象。本教程将深入探讨如何使用Digester来读取XML文件,帮助你更好地理解和应用这一强大...
首先,我们需要在Eclipse环境中创建一个项目,并引入Apache Commons Digester库。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>commons-digester <artifactId>commons-digester <version>...
本文将深入探讨Digester的功能、工作原理以及如何在实际项目中应用。 **一、什么是Digester** Apache Commons Digester是一个用于读取XML文档并根据预定义规则自动创建和填充Java对象的工具。它通过使用匹配模式来...
- **栈数据结构**: 在解析过程中,Digester使用栈来保存和检索生成的Java对象。这种方式有利于处理嵌套层次较深的XML元素。 ##### 2. 模式匹配 - Digester通过匹配模式来定位XML文件中的元素。模式匹配是一种灵活的...
Commons Digester项目通常包括几个主要组件: - `digester`: 主要的解析器类,负责读取XML文档并应用规则。 - `rules`: 规则接口和实现,定义了如何处理XML元素和属性。 - `util`: 辅助工具类,如`...
在实际应用中,Commons Digester通过`Digester`类作为主要入口点,开发人员可以设置一系列的规则(如`Rule`对象),这些规则定义了XML元素如何触发Java对象的创建和操作。例如,你可以指定当遇到XML文档中的某个元素...
总之,Apache Commons Digester是一个强大的工具,它简化了XML文档到Java对象的映射,使得在Java应用中处理XML数据变得更加便捷。结合 Commons Logging 和 Commons BeanUtils,可以实现更高效、灵活的XML解析和数据...
7. **在MVC框架中的应用**:在MVC框架中, Digester可以帮助解析配置文件,创建和配置控制器、视图和模型组件。例如,它可以用来加载bean定义,设置依赖关系,以及执行其他初始化任务。 8. **最佳实践**:使用...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于软件配置、数据交换等领域。Apache Commons Digester是Java中一个强大...注意,实际应用中可能需要根据XML结构和业务需求调整规则。
`digester`是Apache Commons项目中的一个库,专门设计来帮助开发者方便地将XML文档解析成Java对象。在本文中,我们将深入探讨Java解析XML文件,特别是使用Digester库的过程。 1. **Java解析XML的基本概念** 在Java...
在实际应用中,通常会关闭验证以提高性能。 - **`addObjectCreate(String pattern, Class<?> clazz)`**:指定模式 `pattern` 匹配到的元素创建的对象类型为 `clazz`。 - **`addBeanPropertySetter(String pattern, ...