Apache Commons Digester 3.0的新增功能是什么?

最近发布了Apache Commons Digester项目的3.0版 ,主要重写了原始的Apache Commons Digester实现。 在这次采访中,我们就最新版本的新功能与ASF PMC成员Simone Tripodi进行了交谈。

JAXenter:您能否向我们介绍Apache Commons Digester项目?

Simone Tripodi: Apache Commons Digester是最古老的Apache Commons组件之一。 它旨在简化将XML文档映射到Java对象,配置事件(在Digester语言中为Rule)的任务,这些事件必须在某些解析事件时或更佳(在XML元素模式匹配时)在摄取文档流时触发​​。 这确实是Apache Commons Digester与其他XML映射器之间的主要区别:它不仅能够创建对象并设置其属性,而且可以调用任意方法,因此其用例可能与简单的XML <-> POJOs映射不同。就像在邮件列表中报告的某些用户一样,创建Apache Lucene文档并为其建立索引,或者摄取大型RDF文档并在TripleStores上存储数据,或者处理XML管道(如Apache Cocoon 3)在RDBMS中生成并存储数据,以及最有趣的是,可以执行所有这些操作,同时避免映射到临时POJO!

Apache Commons Digester组件最初是在Apache Struts项目内部开发的,目的是简化操作描述符的提取,然后提取代码库并将其贡献给Jakarta Commons。 在生命周期的开发过程中,相关的和有影响力的Apache提交者,例如Geir Magnusson Jr.(Apache董事会董事之一),Jason Van Zyl(Apache Maven创建者),JeanfrançoisFarcand(异步HTTP客户端创建者),Rahul Akolkar(W3C的州) Chart XML的共同编辑,Apache成员),Tim O'Brian(Apache Maven)和Simon Kitching(Apache Commons,Apache MyFaces)为Apache Commons Digester的开发做出了积极贡献。

JAXenter:原始的Apache Commons Digester实现已针对最新的3.0版本进行了重写。 重写有什么好处?

Simone:为了更好地了解Apache Commons Digester 3.0的好处,有必要说明一下获取Digester实例然后对其进行配置,以及被赋予一组(一个或多个)配置与获取Digester实例之间的区别。 即使这两种方法听起来都是互补的,但核心概念是假设每个Digester实例都不是线程安全的,这意味着在多线程应用程序中,用户通常必须重新实例化Digester并重新配置它。 这种方法没有错,但是配置不可重用! RuleSet接口尝试以某种方式填充配置缺乏的重用性。 无论如何,它实际上并不代表配置:

*它只是为给定的Digester实例设置规则;
*将多个规则配置为相同的模式要求及时明确指定模式以匹配多少个规则,这违反了DRY原理;
*规则的语义不直观,因为规则的创建与方法/构造函数的参数严格相关。

在新的Digester中,“禁止”使用RuleSet来支持RulesModule,它允许通过流利的API表示Rule配置,从而使规则的语义更易于理解。 Digester 3的主要功能是使用嵌入式DSL API集合表达规则绑定,该集合用英语而不是编程语言说更多!

无论如何,保守的开发人员不会被迫迁移他们的应用程序。 他们仍然可以使用较旧的API!

另一个有趣的功能是规则绑定错误报告了改进:使用较旧的Apache Commons Digester版本,用户可以在运行时获得规则绑定错误。 相反,新的Digester会尝试在引导过程中尽可能多地检查模式/规则绑定错误。 避免异常,例如在解析操作期间无法在当前ClassLoader中加载或找到的类。

当加载程序尝试创建新的Digester实例时(而不是在运行它时),将报告错误绑定的详细错误列表。 由于开发人员在获取新的Digester实例时会获得大部分错误的报告,并且无需执行测试来迭代修复潜在的错误,这也将使调试操作更加容易。

JAXenter:您能告诉我们有关新型通用装载机的信息吗?

Simone:较旧的Apache Commons Digester版本能够通过扩展(例如XML规则描述符)以及最近使用反映Digester规则的Java5注释来加载Digester规则; 这种方法的主要缺点是每个扩展都需要自己的DigesterLoader,因此混合配置(一些来自XML的规则,一些来自注释的规则和一些手动绑定的)不是立即的。 在新的Digester版本中,重新设计了扩展,以便从核心Rules绑定器继承–现在每个扩展都是RulesModule –实例化新Digester实例的工作完全委托给唯一的DigesterLoader,后者分析所有RulesModule实例,因此可以使用预先填充的规则创建新的Digester实例!

JAXenter:在此发行版中,如何改善Digester配置的可重用性?

Simone:现在,用户只需实现RulesModule,将它们打包并重新分发到单独的软件包中,就可以创建通用的Digester配置,如果用户愿意通过共享其可重用模块来做出贡献,我将非常高兴! 例如,我想像是Atom解析器这样的通用用例,其中Atom API和Digester规则可以在多个竞赛中重用; 用户可以自由使用他们首选的扩展方法-不会阻止他们提供带有Digester批注的带注释的POJO以及只需传递给DigesterLoader的即用型RulesModule-可以节省大量开发工作时间!

JAXenter:该项目的下一步是什么?

Simone:与所有Apache项目一样,在Apache Commons中,项目管理委员会需要审查每个组件路径,并由项目管理委员会一致投票决定哪些功能将被包括在新版本中,而将不包括在新版本中。 我个人将尝试开始一些实验,以编写除XML(例如JSON和YAML)以外的其他格式的Digester适配器,其中模式/规则的概念仍然有效。 一旦准备好至少提交一份有效的概念证明,我就会提出一个新建议,但是我不能保证这将是一个新的发行功能,因为正如我所说,Apache项目具有以下特点:成为“一个男人乐队”项目,而是真正由社区推动–我们的口头禅是“对代码的社区化!”

新的Apache Commons Digester 3也不例外,许多特殊的人为使该版本成为现实做出了贡献:

* Rahul Akolkar,Luc Maisonobe和Phil Steiz进行指导;
*詹姆斯·卡曼(James Carman),提供了使用流利的API构建Digester的最初想法;
* Matt Benson,对DSL产生了影响;
* Joerg Shaible,与“编译动物园”一起度过了时光;
* Daniele Testa,他提供了新的Digester3徽标。

感谢JAXenter对新的Apache Commons Digester版本感兴趣,也感谢Jessica谈论这个重大机会!

对于那些想更多地了解Apache Commons Digester的人,他们可以访问文档站点 。 对于任何问题,反馈或贡献,请不要忘记订阅用户和开发人员邮件列表!!! 我希望很快能收到您的回应!


翻译自: https://jaxenter.com/whats-new-in-apache-commons-digester-3-0-103534.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值