Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XML绑定_Java_Xml_Jaxb_Castor_Xmlbeans - Fatal编程技术网

Java XML绑定

Java XML绑定,java,xml,jaxb,castor,xmlbeans,Java,Xml,Jaxb,Castor,Xmlbeans,您使用什么将XML绑定到Java?JAXB、Castor和XMLBeans是一些可用的选择。我看到的比较都是三、四年前的。我愿意接受其他建议。编组/解编性能和易用性尤其令人感兴趣 澄清:我想了解的不仅仅是您使用的框架,还有您使用其中一个框架而不是其他框架的理由。我们使用Castor。它非常适合我们的需要。我们使用。编组/解编组非常简单。参见他们的示例。是这里使用的。它非常快,但是绑定可能有点棘手。但是,如果您有描述域对象的XML模式,它就特别有用,因为它确实可以很好地映射到XSD(甚至有一个测试

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


澄清:我想了解的不仅仅是您使用的框架,还有您使用其中一个框架而不是其他框架的理由。

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

我们使用。编组/解编组非常简单。参见他们的示例。

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


它处理字节码,因此必须在Java.class文件的初始编译之后运行。您可以使用Maven插件,也可以直接使用它(Eclipse插件似乎不适合我)。

我使用Jaxb取得了不同的成功。当时(几年前),整个文档都很平淡,基本使用文档(包括在何处下载实现)很难找到或更改

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


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

我7年前使用过castor,它工作得相当好。使用DTD。当时没有太多的选择

在当前项目中,我使用了
1) JAXB——基于标准、可用的参考实现、可用的命令行和ant工具。最新版本-2.1.8需要java 5+。
2) XStream——用于Soap解组——需要Java5+。没有JAXB最新版本那么快,也不符合标准

BR,
~A

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


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

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

  • XML数据绑定—是指将XML文档中的信息表示为计算机内存中的对象的过程。通常,这意味着定义XSD并生成等效的java源代码。不同语言之间的互操作是最高优先级(因此使用XSD)——最典型的是用于基于SOAP的web服务的实现
  • XML序列化—指将内存中对象的图形写入流,以便在某处或其他时间对其进行重构。手工编写java类;xml表示是次要的。此外,对性能的需求通常更高,而对与其他语言(如.net)的互操作的需求通常更低
  • 对于xml序列化,Xstream很难被击败。JAXB是XML绑定的标准


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

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

    • 编译XSD
    • 使用生成的java类来读/写符合此模式的文档
    将XML文档绑定到生成的类非常简单:

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

    相关:

    XmlBeans是一个很好的选择,特别是当您有“损坏的”XSD/WSDL文件时

    唐提到

    EmployeesDocument empDoc=EmployeesDocument.Factory.parse(xmlFile)

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

    不要与名称空间发生冲突, 遍历到要解组的对象, 和工厂。解析它


    但愿我能在两周前找到它。

    我想知道完全相同的问题,最后我找到了由IBM进行的性能测试。我想JiBX是我的选择,呵呵。

    哇,看起来很漂亮!Xstream是一种xml序列化技术,而不是绑定技术。是的,序列化和绑定之间的区别很重要。请检查:感谢您的输入。我正在寻找一个绑定解决方案。这适用于具有现有XSD的RESTful web服务。我们已经使用Castor很多年了。我想知道JAXB(或其他)更好/更差的原因。如果你至少熟悉XStream,你介意看看我关于XMLDecoder和XStream的问题吗?这项研究是从2003年开始的——有人知道最新的消息吗?这里似乎有很多好的链接:查看我的博客,了解JAXB示例:+1了解JiBX。我看到的最大优势是JiBX的使用方式。虽然代码生成是一种选择,但似乎有很多重点放在为自己的数据模型编写自己的映射上。任何让我