我有一个XML模式,我需要为其创建Java类。它不是一个特别大的模式,我会说它将导致大约20个类。我试图权衡是否使用自动绑定程序(如JAXB或JiBX中提供的程序)或者是否手动编写我自己的类并使用XStream之类的内容进行编组/解组。
编写自己的类而不是使用绑定程序有什么优点/缺点。
另外,我使用绑定程序,我永远与它绑在一起。例如,如果我使用JAXB的绑定编译器来创建类,我是否必须使用JAXB进行所有编组/解组?
P.S。我已经看到了关于XML绑定/序列化的以下问题,这些问题很有用,但完全没有回答我的问题: xml-serialization-in-java和java-xml-binding
答案 0 :(得分:14)
我认为你的问题没有明确的答案。但我可以给你一些来之不易的建议。以下是一些需要考虑的事项:
编写编组和解组代码非常耗时,尤其是第一次。
您将不得不花费大量时间来学习DOM库的细微差别(Xerces或其等价物)。
有很多重复,所以你最终会被编写一些帮助类。
您需要进行大量的单元测试,以确保您已经涵盖了可选元素和属性领域的所有基础。
查看该列表很容易说“这就是JAXB为我所做的”。多年来我已经完成了这项工作,我会说JAXB为您节省了大量的时间和精力,尤其是Java 5/6中JAXB的最新版本。
但是,如果你选择JAXB,我们已经学到了一个教训:我想要传授的方法:
***不要让JAXB生成的类泄漏到您的应用程序中。
正如您在问题中所说,这将整个应用程序与JAXB的工作方式联系起来。如果必须更换JAXB(将来有很多理由可以解决这个问题)那么你将面临一项充满挑战和痛苦的任务(相信我,我们已经完成了,我们永远不会进入再次定位)。
现在我们总是将JAXB生成的类隐藏在外观或工厂后面,从JAXB类映射到具有所需行为的我们自己的域POJO。当我们做JDBC时,我们会想到JAXB; JAXB只是另一种数据源,是从我们的域POJO获取数据的另一种方式。域名POJO是秘密的,我们控制它们的编码方式以及它们的使用方式。 JAXB只是编组和解组的工具。
答案 1 :(得分:0)
我不想在这个问题上开始漫长而无休止的冬青战争,但根据我的经验 - 如果你可以使用为你生成所有代码并且不需要JAR可靠的工具。将生成的代码将是丑陋的,但它将工作,直到您将清楚地看到需要手工编写手写代码。在大多数情况下,您不需要这样做。对不起,我无法立即建议使用什么工具。