您使用什么将 XML 绑定到 Java?JAXB、Castor 和 XMLBeans 是一些可用的选择。我看到的比较都是三四年前的。我愿意接受其他建议。编组/解编组性能和易用性特别令人感兴趣。
澄清:我不仅想看看你使用什么框架,还想看看你使用其中一个框架而不是其他框架的理由。
如果您想做出明智的决定,您需要清楚为什么要在 XML 和 java 对象之间进行转换。原因是这个领域的不同技术试图解决不同的问题。不同的工具分为两类:
对于 xml 序列化,Xstream 很难被击败。JAXB 是 XML 绑定的标准。
在任何一种情况下,如果您使用的是 J2EE,则需要特别注意从 JPA 检索到的类,因为类代理和持久性特定的集合类型可能会混淆绑定/序列化工具。
吉宝 以前我使用Castor XML,但 JiBX 被证明要好得多,尤其是在性能方面(将一些应用程序代码从 Castor XML 直接移植到 JiBX 使其速度提高了 9 倍)。我还发现 JiBX 的映射格式比 Castor 的更优雅。
JiBX 通过使用编译后字节码操作而不是 Castor 采用的反射方法来实现其性能。这样做的好处是它对编写映射类的方式要求较少。不需要 getter、setter 和无参数构造函数来满足这些工具。大多数时候,您可以在不考虑映射问题的情况下编写类,然后在不修改的情况下对其进行映射。
如果您有 XML 的 XSD,并且不需要将数据绑定到现有的一组类,那么我真的很喜欢XMLBeans。基本上,它是这样工作的:
将 XML 文档绑定到生成的类非常简单:
EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);
Jibx是这里使用的。它非常快,但绑定可能有点棘手。但是,如果您有描述域对象的 XML 模式,它会特别有用,因为它确实可以很好地映射到 XSD(甚至还有一个 beta 工具 XSD2Jibx,它可以获取 XSD 并创建存根域类和映射,然后您可以获取并哄骗适合您现有的域模型)。
它操作字节码,因此它必须在 Java .class 文件的初始编译之后运行。您可以使用 Maven 插件,或者直接使用它(Eclipse 插件似乎对我不起作用)。
我使用 Jaxb 取得了不同程度的成功。当时(几年前)整体文档乏善可陈,基本使用文档(包括从哪里下载实现)很难找到或变化。
编写 Java 类的解析器非常好,与原始 XSD 几乎没有差异(尽管我认为它在支持抽象 XML 元素方面存在问题)。
从那以后我就没有使用过它,但是我有一个即将进行的项目,它只需要这样一个框架,我很想知道其他人如何看待上述内容。
我在 7 年前用过蓖麻——效果很好。使用 DTD。那个时候选择不多。
在当前的项目中,我使用了
1) JAXB——基于标准、可用的参考实现、可用的命令行和 ant 工具。最新版本 - 2.1.8 需要 java 5+。
2) XStream——用于 Soap 解组——需要 Java 5+。不像最新的 JAXB 那样快速且符合标准。
BR,
~A
XmlBeans 是一个不错的选择,尤其是当您有“损坏的”XSD/WSDL 文件时。
唐提到
EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);
..但它也可以采用节点、文件或几乎任何来源。
无需与命名空间打架,遍历您要解组的对象,然后 Factory.parse 它。
希望我在 2 周前找到它。
我们使用蓖麻。它非常适合我们的需求。
我想知道完全相同的问题,最后我找到了 IBM 进行的性能测试。http://www.ibm.com/developerworks/library/x-databdopt2/。我猜JiBX是我的选择,呵呵。