【问题标题】:XML library with a low footprint占用空间小的 XML 库
【发布时间】:2011-04-19 06:13:30
【问题描述】:

由于配置复杂性增加,我想为我的库的配置文件引入 XML,并替换现有的属性文件。

我愿意

  • 使用 XSD 公开描述 XML 结构(因此该结构被记录并可以进行版本控制)
  • 如果可能,从该 XSD 生成 Java 源代码以进行解组(如 JAXB / XJC)。另一种简单的访问方法也可以(例如简单的 XPath 表达式)
  • 占用空间小,很少甚至没有额外的依赖项

如果足迹不是问题,我会立即选择JAXB。是否有类似的占用空间较小的库?

编辑:通过占用空间,我不是指消耗的内存,而是库的“大小”,以 KB/类数为单位。我希望我相当简单的用例可以被一个包含大约 5-6 个类的库所覆盖。我不需要 JAXB 的全部功能。

【问题讨论】:

  • 您能定义您的足迹期望吗?我从来没有听说过 JAXB 被描述为占用空间很大。它针对高吞吐量应用程序中的低内存利用率和性能进行了高度优化。
  • @Konstantin,当然,你是对的。我的意思是类加载器的占用空间(.jar 文件的大小)。对于我的小用例来说,JAXB 似乎太强大了
  • XML 不是属性文件的唯一替代品。是否需要拥有基于 XML 的解决方案?还是您愿意考虑其他技术? (如果是后者,那么我很乐意提交答案。)
  • @Ciaran:填我。不一定是 XML

标签: java xml configuration jaxb


【解决方案1】:

JAXB 占用空间小

JAXB (JSR-222) 实现也包含在 Java SE 6 中。生成的类只是带有必要注释的 POJO。在下面的问题中,张贴者观察到 XMLBeans 类比 JAXB 类大四倍。

减少类的数量

如果您从 Java 类开始(而不是从 XML 模式生成它们),您通常可以使模型更小。使用@XmlWrapperElement 可以帮助消除类。

进一步减少类的数量

您可以利用EclipseLink JAXB (MOXy) 中的@XmlPath 注释,注意我是技术主管。它利用 XPath 来扩展 JAXB 映射:

【讨论】:

  • 谢谢。确实,与 XMLBeans 相比,几乎所有东西的占用空间都很小 :-) 我会看看 MOXy
【解决方案2】:

对于零依赖解决方案,请使用作为每个 Java VM 一部分的 DOM 或 SAX 解析器。

如果您想要 Java 类型绑定,请坚持使用 JAXB。即使您找到了一个较小的库,您也会因为使用未经广泛测试或拥有尽可能多知道如何使用它的开发人员的非标准解决方案而松懈。

【讨论】:

  • +1 我没有想到 DOM 实现是 JVM 的一部分。我以为只提供API。我认为并非总是如此?
  • @Lukas:不,运行时中总是有一个实现,与 API 一起使用。
  • 已接受。 DOM 为我现在提供了足够的功能。如果配置变得更复杂,我仍然可以切换到 JAXB。
【解决方案3】:

如果您愿意考虑使用非 XML 技术,那么您可能想查看我的 Config4J 库 (www.config4star.org)。将其与您的愿望清单进行比较...

  • 它提供了一种易于使用的模式语言。

  • jar 文件很小(102KB),没有外部依赖。

  • 您的愿望清单中缺少的一项功能是一种从模式定义中自动生成 Java 类的工具。但是,Config4J 的 API 非常简单,我不确定您是否需要这样的代码生成器。 Practical Usage Guide 手册的第三部分(Config4JMS 案例研究)描述了一种构建类似 Spring 的库以从配置信息创建 Java 对象的技术。

【讨论】:

  • 啊,你是那个库的创建者...看起来不错,有点类似于 CSS 的语法(带有 lesscss.org 扩展名)。但我认为 XML 在我的情况下是更好的选择。通过 XSD 声明,我的用户将立即了解预期的结构。否则,我会收到很多关于如何使用您的配置库的支持请求...... :-) 但它肯定是其他项目的一个很好的参考
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2015-02-18
  • 2019-08-22
相关资源
最近更新 更多