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