2015-02-11 72 views
0

我正在为我的应用程序编写一组REST API以XML和JSON内容类型。我想在设计和实现这些API时,对XML/JSON处理库做出明智的选择。以下是对API的各种非功能要求:XML/JSON处理

  1. 性能 - API处理大量数据(有效负载可能以兆字节为单位)。与API输出相比,API输入大小更少。
  2. 过滤功能 - API的调用者应该能够指定过滤条件,根据该过滤条件修剪输出以优化带宽消耗。

作为我们研究和分析的一部分,我们确实了解了DOM API和JAXB/Jackson API。考虑到上面列出的非功能性要求,请求您就选择正确的API提出建议/建议。

这是我对编组&使用这些API的非编组过程的理解。如果我错了,请纠正我。

  • DOM的API - 2点步骤的过程(使用DOM解析器&的XMLSerializer)
    XML/JSON来DOM来POJO & POJO到DOM到XML/JSON
  • JAXB的API - 单步工艺(使用注释)
    XML/JSON到POJO & POJO到XML/JSON

虽然JAXB注释更容易,更方便,在编组方面/解组没有的DOM API有更好的表现?

此外,有什么指导什么时候选择什么XML处理库? 对于多种内容类型处理,选择不同的库会更好吗?例如。杰克逊的JSON和JAXB的XML(纯粹是为了表现)。

对于JSON内容类型,在将JSON转换为DOM对象或从DOM对象转换JSON时是否存在任何开销?

+0

总之,去StAX(在JAXB /杰克逊支持)。 DOM不适用于大型XML,所以您需要基于事件的SAX或StAX,并且StAX更易于处理。杰克逊,伍德斯托克是一条路。 – lexicore 2015-02-11 15:09:44

+0

谢谢。感谢您的帮助... – dinup24 2015-02-13 11:50:00

回答

0

好吧,几点:

  1. 是,JSON和DOM(XML)之间的转换不仅有显著(并且,通常不必要的)的开销。更糟糕的是,由于JSON和XML具有不同的信息模型,这通常是有损的。在我看来,应该避免使用这个选项(Jettison等)。
  2. 对于JAXB式的操作,也有杰克逊XML模块(https://github.com/FasterXML/jackson-dataformat-xml/),支持XML和JSON
  3. DOM是方法较慢部分原因是由于2相处理时,并且其可以方便部分是因为存储器使用是3 -5X比更高的直接数据绑定(取决于类型的数据)

基于DOM的方法的一些好处是:

  1. 这是XML特定的,因此,如果特定的XML方面或工装事(使用XPath,XML Schema)可以交流详细介绍XML的使用情况
  2. 由于DOM是无类型的,灵活的,它有时更适合动态和松散的(...或者糟糕的)结构化数据。

但我会同意@lexicore在该DOM应该是最后的选择,如果其他方法不起作用。特别是在处理大量数据时。

+0

感谢您的详细解释。这绝对有帮助 – dinup24 2015-02-18 14:26:27