什么是JAXB,我为什么要使用它?

有人在这里发誓,JAXB是自切片面包以来最伟大的事情。 我很好奇Stack Overflow用户认为JAXB的用例是什么,以及是什么使它成为这种情况的好或坏的解决scheme。

我是JAXB操纵XML的忠实粉丝。 基本上,它提供了这个问题的解决scheme(我假定熟悉XML,Java数据结构和XML模式):

使用XML是困难的。 需要一种方法来获取XML文件(基本上是一个文本文件),然后将其转换为某种数据结构,然后程序就可以对其进行操作。

JAXB将采用您编写的XML模式,并创build一组对应于该模式的类。 JAXB实用程序将创build操纵该XML的数据结构层次结构。

然后可以使用JAXB读取XML文件,然后创build生成的类的实例 – 包含来自XML的数据。 JAXB也做了相反的事情:使用java类,并生成相应的XML。

我喜欢JAXB,因为它易于使用,并且附带了Java 1.6(如果您使用1.5,则可以下载JAXB .jars)。创build类层次结构的方式非常直观,根据我的经验,做一个体面的工作抽象出“XML”,以便我可以专注于“数据”。

所以要回答你的问题:我期望,对于小XML文件,JAXB可能是矫枉过正的。 它需要你创build和维护一个XML模式,并使用“Java标准教科书方法”来利用Java类来实现数据结构。 (主要类,表示“节点”的小型内部类,以及它们的巨大层次)。因此,对于应用程序的“首选项”的简单线性列表,JAXB可能不是那么好。

但是如果你有一个相当复杂的XML模式,并且包含了大量的数据,那么JAXB是太棒了。 在我的项目中,我在二进制文件(被C程序使用)和XML(使人类可以使用和修改数据)之间转换大量的数据。 由此产生的XML Schema是不平凡的(层次结构有很多层次,有些字段可以重复,有些字段不能),所以JAXB有助于操纵。

这是一个不使用它的原因:性能受损。 编组和解组时有很大的开销。 您可能还想考虑另一个用于XML-Object绑定的API,比如JiBX: http : //jibx.sourceforge.net/

这是一个“XML的ORM”。 WS Death Star系统通常与JAX-WS一起使用(实际上Sun的实现是一起开发的)。

我一直在工作中使用JAXB,我真的很喜欢它。 这对于复杂的XML模式来说是非常完美的,这些XML模式总是在变化,特别适合随机访问XML文件中的标签。

我讨厌皮条客,但是我刚刚开始了一个博客,这实际上是我发布的第一件事!

看看这里:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/

如果必须将代码定义为XML架构( xsd )的外部XML规范,那么JAXB非常棒。

例如,你有一个交易应用程序,你必须向Uber Lame Trade Reporting App报告这些交易,他们已经给你ultra.xsd了。 使用$JAVA_HOME/bin/xjc编译器将XML转换成一堆Java类(例如UltraTrade )。

然后,您可以编写一个简单的适配器层来将您的交易对象转换为UltraTrades并使用JAXB将数据UltraTrades到Ultra-Corp。 把你的交易转换成XML格式要容易得多。

在这种情况下,Ultra-Corp并没有真正遵守自己的规范,而作为一个xsd:float的交易price实际上应该是double

使用JAXB,您可以自动创build对象的XML表示(编组)和XML的对象表示(解组)。

就XML Schema而言,您有两个select:

  • 从XSD生成Java类
  • 从Java类生成XSD

还有一些比较简单的XML序列化库,比如XStream , Digester或者XMLBeans ,它们可能是另一种select。

为什么我们需要JAXB? Web服务的远程组件(用Java编写)使用XML作为彼此之间交换消息的手段。 为什么XML? 因为在资源有限的networking上XML被认为是轻量级的select。 所以我们经常需要将这些XML文档转换成对象,反之亦然。 例如:简单的Java POJO员工可以用来发送员工数据到远程组件(也是一个Java程序)。

 class Employee{ String name; String dept; .... } 

这个Pojo应该被转换(Marshall)到XML文档如下:

 <Employee> <Name>...</Name> <Department>...</Department> </Employee> 

在远程组件处,从XML文档(Un-Marshall)返回到Java对象。

什么是JAXB?

JAXB是执行编组和取消编组操作的库或工具。 这让你从头痛中解脱出来,就像那样简单。

您也可以查看JIBX。 这也是一个非常好的XML数据绑定,这也是专门在OTA(开放旅游联盟),并支持AXIS2服务器。 如果你正在寻找性能和兼容性,你可以看看:

http://jibx.sourceforge.net/index.html

JAXB通过默认的编组优化提供了改进的性能。 JAXB定义了一个程序员API,用于从XML文档读取和写入Java对象,从而简化了通过Java读取和写入XML。