我为我的 XML 序列化/反序列化选择了 JAXB,因为我已经有一个 XML 模式,并且想要以 JAXB 提供的方式作为原生 XML 库的 XML。即使 Jackson xml 满足您的需求,它也是一个不错的选择。
Jackson XML 模块的限制:
Jackson 中的 XML 模块绝不是为了完全替代 JAXB 而设计的。在 JAXB 和 Jackson 之间,某些结构的工作方式会略有不同,并且不能保证 Jackson 会生成与 JAXB 相同的 XML。
请注意,与 JSON 不同,最外层对象必须是 bean 类型——它不能是原始类型或包装类型、枚举或集合。这是 XML 工作方式的直接结果——在 XML 中无法表示这样的顶级值。
默认情况下,Jackson 将始终为集合使用包装器元素,这也与 JAXB 的工作方式不同。这是 Jackson 生成的 XML 与 JAXB 生成的 XML 不兼容的主要方式。当然,可以使用 JacksonXmlElementWrapper 注释为一个字段或全局 XmlMapper 上的 setDefaultUseWrapper 配置设置来配置行为。
Jackson 也不支持使用特定的 XML 模式。它是为首先编写 Java Bean 而设计的,而不是从预先存在的模式中生成 Java 代码。请注意,这可以通过使用 JAXB 注释支持并使用标准 xjc 工具生成 bean 在一定程度上解决。
同样,它也不支持一些更高级的 XML 工具——例如 XPath 或 XSLT。如果我们需要这种级别的支持,那么我们应该改用功能更全面的 XML 解决方案。
概括:
如果您正在寻找一种成熟、灵活的方式来支持和使用 JSON 和 XML 来处理相同的数据,那么 Jackson XML 模块是一个可以利用的绝佳库。它不仅是一种独立运行的可靠方式,而且还具有额外的好处,即能够为 XML 和 JSON 重用相同的配置。
通常,这必须使用具有完全独立配置的两个不同库来处理。
最后,除了灵活性和易用性之外,Jackson 团队历来都非常重视性能。鉴于数据的编组和解组是大多数 Web 应用程序的很大一部分,选择正确的库来处理所有这些工作至关重要。再加上 Retrace 等性能监控工具,您可以充分利用您的应用程序。
参考资料:https ://stackify.com/java-xml-jackson/