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

时间:2009-03-03 16:34:42

标签: java jaxb

这里有人发誓JAXB是切片面包以来最棒的东西。我很想知道Stack Overflow用户认为JAXB的用例是什么,以及是什么使它成为一个好的或坏的解决方案。

9 个答案:

答案 0 :(得分:92)

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

使用XML很困难。人们需要一种方法来获取XML文件 - 这基本上是一个文本文件 - 并将其转换为某种数据结构,然后程序可以操作。

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

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

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

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

但是如果你有一个相当复杂的XML模式,并且其中包含大量数据,那么JAXB非常棒。在我的项目中,我在二进制(由C程序使用)和XML(以便人类可以使用和修改该数据)之间转换大量数据。生成的XML Schema非常重要(许多级别的层次结构,某些字段可以重复,其他字段不能重复),因此JAXB有助于操作它。

答案 1 :(得分:23)

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

答案 2 :(得分:19)

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

答案 3 :(得分:19)

我一直在工作中使用JAXB,我真的很喜欢它。它非常适合复杂的XML模式,这些模式总是在变化,尤其适用于XML文件中标记的随机访问。

我讨厌皮条客,但我刚开始写博客,这是我发布的第一件事!

在这里查看:

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

答案 4 :(得分:9)

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

就XML Schema而言,您有两种选择:

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

还有一些更简单的XML序列化库,如XStreamDigesterXMLBeans,可能是替代品。

答案 5 :(得分:8)

如果必须对定义为XML模式(xsd)的外部XML规范进行编码,则JAXB非常有用。

例如,您有一个交易应用程序,您必须向 Uber Lame交易报告应用程序报告交易,并且他们已经让您ultra.xsd继续进行交易。使用$JAVA_HOME/bin/xjc编译器将XML转换为一堆Java类(例如UltraTrade)。

然后,您可以编写一个简单的适配器图层,将您的交易对象转换为UltraTrades,并使用JAXB将数据整理到Ultra-Corp。 很多比将您的交易转换为XML格式更容易。

一切都失败的地方是Ultra-Corp实际上没有遵守他们自己的规范,而他们作为price的交易xsd:float实际上应该表示为{{1} }}!

答案 6 :(得分:6)

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

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

这个Pojo应该转换(Marshall)到XML文档中,如下所示:

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

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

什么是JAXB?

JAXB是执行编组和UnMarshalling操作的库或工具。它让你免于这种头痛,就这么简单。

答案 7 :(得分:4)

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

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

答案 8 :(得分:0)

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