【问题标题】:Java XML Binding [closed]Java XML 绑定 [关闭]
【发布时间】:2010-09-17 08:55:28
【问题描述】:

您使用什么将 XML 绑定到 Java? JAXB、Castor 和 XMLBeans 是一些可用的选择。我看到的比较都是三四年前的。我愿意接受其他建议。编组/解组的性能和易用性是特别重要的。

澄清:我不仅想看看你使用什么框架,还想看看你使用其中一个框架而不是其他框架的理由。

【问题讨论】:

    标签: java xml jaxb castor xmlbeans


    【解决方案1】:

    如果您想做出明智的决定,您需要清楚为什么要在 XML 和 java 对象之间进行转换。原因是这个领域的不同技术试图解决不同的问题。不同的工具分为两类:

    1. XML 数据绑定 - 指将 XML 文档中的信息表示为计算机内存中的对象的过程。通常,这意味着定义 XSD 并生成等效的 java 源代码。不同语言之间的互操作是重中之重(因此使用 XSD) - 最常见于实现基于 SOAP 的 Web 服务。
    2. XML 序列化 - 指将内存中对象的图形写入流,以便可以在某处或其他时间重新构建它。你手动编写java类; xml 表示是次要的。此外,对性能的需求通常更高,而与 .net 等其他语言的互操作需求通常更低。

    对于 xml 序列化,Xstream 很难被击败。 JAXB 是 XML 绑定的标准。

    在任何一种情况下,如果您使用的是 J2EE,则需要特别注意从 JPA 检索的类,因为类代理和持久性特定的集合类型会混淆绑定/序列化工具。

    【讨论】:

    • 感谢您的意见。我正在寻找绑定解决方案。这适用于具有现有 XSD 的 RESTful Web 服务。我们已经使用 Castor 多年了。我想知道 JAXB(或其他)更好/更差的原因。
    • 如果你至少熟悉 XStream,你介意看看我关于 XMLDecoder 与 XStream 的问题吗? stackoverflow.com/questions/96059/…
    【解决方案2】:

    JiBX。以前我使用Castor XML,但事实证明JiBX 明显更好,特别是在性能方面(将某些应用程序代码从Castor XML 直接移植到JiBX 使其速度提高了9 倍)。我还发现 JiBX 的映射格式比 Castor 的更优雅。

    JiBX 通过使用编译后字节码操作而不是 Castor 采用的反射方法来实现其性能。这样做的好处是它对编写映射类的方式要求较少。不需要 getter、setter 和无参数构造函数来满足这些工具。大多数情况下,您可以在不考虑映射问题的情况下编写类,然后不加修改地对其进行映射。

    【讨论】:

    • JiBX +1。我看到的最大优势是 JiBX 的使用方式。尽管代码生成是一种选择,但似乎非常强调为自己的数据模型编写自己的映射。任何让我无法处理生成的类的事情都让我感到高兴。我用了几年 JiBX 并且喜欢它。我不能对 Castor 说同样的话。 :)
    【解决方案3】:

    如果您有 XML 的 XSD,并且不需要将数据绑定到现有的一组类,那么我真的很喜欢 XMLBeans。基本上,它是这样工作的:

    • 编译 XSD
    • 使用生成的 java 类来读取/写入符合此架构的文档

    将 XML 文档绑定到生成的类非常简单:

    EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile); 
    

    【讨论】:

      【解决方案4】:

      我们使用xstream。编组/解组是微不足道的。有关示例,请参阅他们的 tutorial

      【讨论】:

      • 哇,看起来很漂亮!
      • Xstream是xml序列化技术,不是绑定技术。
      • 是的,序列化和绑定的区别很重要。
      【解决方案5】:

      Jibx 是这里使用的。它非常快,但绑定可能有点棘手。但是,如果您有描述域对象的 XML 模式,它会特别有用,因为它确实可以很好地映射到 XSD(甚至还有一个 beta 工具 XSD2Jibx,它可以获取 XSD 并创建存根域类和映射,然后您可以获取并哄骗适合您现有的域模型)。

      它操作字节码,所以它必须在 Java .class 文件的初始编译之后运行。你可以使用 Maven 插件,或者直接使用它(Eclipse 插件似乎不适合我)。

      【讨论】:

        【解决方案6】:

        我使用 Jaxb 取得了不同程度的成功。当时(几年前)整体文档乏善可陈,基本使用文档(包括从何处下载实现)很难找到或变化多端。

        编写 Java 类的解析器非常好,与原始 XSD 几乎没有差异(尽管我认为它在支持抽象 XML 元素方面存在问题)。

        从那以后我就没有使用过它,但是我有一个即将进行的项目需要这样一个框架,我很想知道其他人对上述框架的看法。

        【讨论】:

        【解决方案7】:

        我在 7 年前使用过蓖麻——效果很好。使用 DTD。当时选择不多。

        在目前的项目中,我使用过
        1) JAXB——基于标准,提供参考实现,提供命令行和 ant 工具。最新版本 - 2.1.8 需要 java 5+。
        2) XStream——用于 Soap 解组——需要 Java 5+。不像最新的 JAXB 那样快速且符合标准。

        BR,
        ~A

        【讨论】:

          【解决方案8】:

          【讨论】:

            【解决方案9】:

            XmlBeans 是一个不错的选择,尤其是当您有“损坏的”XSD/WSDL 文件时。

            唐提到

            EmployeesDocument empDoc = EmployeesDocument.Factory.parse(xmlFile);

            ..但它也可以采用节点、文件或任何来源。

            不与命名空间争吵, 遍历要解组的对象, 和 Factory.parse 它。

            希望我在 2 周前找到它。

            【讨论】:

              【解决方案10】:

              我们使用 Castor。它非常适合我们的需求。

              【讨论】:

                【解决方案11】:

                我想知道完全相同的问题,最后我发现了 IBM 进行的性能测试。 http://www.ibm.com/developerworks/library/x-databdopt2/。我猜JiBX是我的选择,呵呵。

                【讨论】:

                • 那项研究是从 2003 年开始的——有人知道最新的吗?
                猜你喜欢
                • 2023-03-13
                • 1970-01-01
                • 2011-05-19
                • 1970-01-01
                • 1970-01-01
                • 2010-09-09
                • 2012-11-01
                • 2017-11-17
                • 2013-06-08
                相关资源
                最近更新 更多