Java绑定与手动定义类

时间:2008-11-04 11:39:34

标签: java xml binding

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

编写自己的类而不是使用绑定程序有什么优点/缺点。

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

P.S。我已经看到了关于XML绑定/序列化的以下问题,这些问题很有用,但完全没有回答我的问题: xml-serialization-in-javajava-xml-binding

2 个答案:

答案 0 :(得分:14)

我认为你的问题没有明确的答案。但我可以给你一些来之不易的建议。以下是一些需要考虑的事项:

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

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

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

  4. 您需要进行大量的单元测试,以确保您已经涵盖了可选元素和属性领域的所有基础。

  5. 查看该列表很容易说“这就是JAXB为我所做的”。多年来我已经完成了这项工作,我会说JAXB为您节省了大量的时间和精力,尤其是Java 5/6中JAXB的最新版本。

    但是,如果你选择JAXB,我们已经学到了一个教训:我想要传授的方法:

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

    正如您在问题中所说,这将整个应用程序与JAXB的工作方式联系起来。如果必须更换JAXB(将来有很多理由可以解决这个问题)那么你将面临一项充满挑战和痛苦的任务(相信我,我们已经完成了,我们永远不会进入再次定位)。

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

答案 1 :(得分:0)

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