5

我有一个 XML 模式,我需要为其创建 Java 类。这不是一个特别大的模式,我会说它会产生大约 20 个类。我试图权衡是否使用自动绑定程序(如 JAXB 或 JiBX 中提供的程序)或是否手动编写我自己的类并使用 XStream 之类的东西进行编组/解组。

与使用绑定程序相比,编写自己的类有哪些优点/缺点。

另外,我使用一个绑定程序,我是否永远与它绑定。例如,如果我使用 JAXB 的绑定编译器来创建类,我是否必须使用 JAXB 进行所有编组/解组?

ps 我看过以下关于 XML 绑定/序列化的问题,这些问题很有用,但没有完全回答我的问题: xml-serialization-in-javajava-xml-binding

4

2 回答 2

14

我认为您的问题没有明确的答案。但我可以给你一些来之不易的建议。这里有一些要考虑的事情:

  1. 编写编组和解组代码非常耗时,尤其是第一次。

  2. 您将不得不花费大量时间来学习 DOM 库(Xerces 或其等效项)的细微差别。

  3. 有很多重复,所以你最终会被迫编写一些帮助类。

  4. 您将需要大量的单元测试来确保您已经覆盖了可选元素和属性领域的所有基础。

查看该列表很容易说“这就是 JAXB 为我所做的”。多年来一直这样做,我想说 JAXB 为您节省了大量时间和精力,尤其是 Java 5/6 中 JAXB 的最新迭代。

但是,如果您使用 JAXB,那么我们已经学到了一个教训,我想传递给我们:

*** 不要让 JAXB 生成的类泄漏到您的应用程序中。

正如您在问题中所说,这将您的整个应用程序与 JAXB 做事的方式联系起来。如果必须更换 JAXB(将来您可能会这样做的原因有很多),那么您将面临一项具有挑战性和痛苦的任务(相信我,我们已经做到了,我们将永远不会参与其中再次定位)。

现在我们总是将 JAXB 生成的类隐藏在外观或工厂后面,从 JAXB 类映射到我们自己的具有所需行为的域 POJO。我们将 JAXB 视为 JDBC;JAXB 只是另一个数据源,另一种从我们的域 POJO 获取数据的方式。域 POJO 是秘诀,我们控制它们的编码方式和使用方式。JAXB 只是一个编组和解组的工具。

于 2008-11-04T12:15:47.540 回答
0

我不想就这个问题开始一场漫长而无休止的冬青战争,但根据我的经验——如果你可以使用为你生成所有代码的工具并且不需要可靠的 JAR。将生成的代码会很丑陋,但它会一直工作,直到您清楚地看到需要手工编写手写代码。在大多数情况下,您不需要这样做。很抱歉,我无法立即推荐使用什么工具。

于 2008-11-04T12:38:12.207 回答