【发布时间】:2010-09-17 08:55:28
【问题描述】:
您使用什么将 XML 绑定到 Java? JAXB、Castor 和 XMLBeans 是一些可用的选择。我看到的比较都是三四年前的。我愿意接受其他建议。编组/解组的性能和易用性是特别重要的。
澄清:我不仅想看看你使用什么框架,还想看看你使用其中一个框架而不是其他框架的理由。
【问题讨论】:
标签: java xml jaxb castor xmlbeans
您使用什么将 XML 绑定到 Java? JAXB、Castor 和 XMLBeans 是一些可用的选择。我看到的比较都是三四年前的。我愿意接受其他建议。编组/解组的性能和易用性是特别重要的。
澄清:我不仅想看看你使用什么框架,还想看看你使用其中一个框架而不是其他框架的理由。
【问题讨论】:
标签: java xml jaxb castor xmlbeans
如果您想做出明智的决定,您需要清楚为什么要在 XML 和 java 对象之间进行转换。原因是这个领域的不同技术试图解决不同的问题。不同的工具分为两类:
对于 xml 序列化,Xstream 很难被击败。 JAXB 是 XML 绑定的标准。
在任何一种情况下,如果您使用的是 J2EE,则需要特别注意从 JPA 检索的类,因为类代理和持久性特定的集合类型会混淆绑定/序列化工具。
【讨论】:
JiBX。以前我使用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 周前找到它。
【讨论】:
我们使用 Castor。它非常适合我们的需求。
【讨论】:
我想知道完全相同的问题,最后我发现了 IBM 进行的性能测试。 http://www.ibm.com/developerworks/library/x-databdopt2/。我猜JiBX是我的选择,呵呵。
【讨论】: