我有一个 XML 模式,需要为其创建 Java 类。它不是一个特别大的模式,我想它会产生大约 20 个类。我正在权衡是使用自动绑定(bind)程序(如 JAXB 或 JiBX 中提供的程序)还是手动编写我自己的类并使用 XStream 之类的东西进行编码/解码。
与使用绑定(bind)程序相比,编写自己的类有哪些优点/缺点。
此外,我使用一个绑定(bind)程序,我是否永远与它绑定(bind)在一起。例如,如果我使用 JAXB 的绑定(bind)编译器来创建类,是否必须使用 JAXB 进行所有编码/解码?
附注我已经看到以下有关 XML 绑定(bind)/序列化的问题,这些问题很有用,但没有完全回答我的问题: xml-serialization-in-java和 java-xml-binding
最佳答案
我认为您的问题没有明确的答案。但我可以给你一些来之不易的建议。以下是一些需要考虑的事项:
编写编码和解码代码非常耗时,尤其是第一次。
您将不得不花费大量时间来了解 DOM 库(Xerces 或其等效工具)的细微差别。
有很多重复,因此您最终会被迫编写一些辅助类。
您将需要进行大量单元测试,以确保您涵盖了可选元素和属性领域的所有基础。
查看该列表,很容易说“这就是 JAXB 为我所做的”。我为此做了很多年,我会说 JAXB 为您节省了大量时间和精力,尤其是 Java 5/6 中 JAXB 的最新迭代。
但是,如果您使用 JAXB,我们已经学到了一个教训,我想传递给您:
*** 不要让 JAXB 生成的类泄漏到您的应用程序中。
正如您在问题中所说,这将您的整个应用程序与 JAXB 的工作方式联系在一起。如果必须更换 JAXB(您将来可能会这样做的原因有很多),那么您将面临一项具有挑战性和痛苦的任务(相信我,我们已经做到了,我们永远不会陷入困境)再次定位)。
现在我们总是将 JAXB 生成的类隐藏在外观或工厂后面,从 JAXB 类映射到我们自己的具有所需行为的域 POJO。我们将 JAXB 视为 JDBC; JAXB 只是另一个数据源,是从我们的域 POJO 获取数据的另一种方式。域 POJO 是秘诀,我们控制它们的编码方式和使用方式。 JAXB 只是一个用于编码和解码的工具。
关于Java 绑定(bind)与手动定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261603/