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

Java 什么是JAXB?我为什么要使用它?,java,jaxb,Java,Jaxb,这里有个家伙发誓说JAXB是自切片面包以来最伟大的东西。我很好奇,看看用户认为JAXB的用例是什么,是什么让它成为这种情况下的好解决方案还是坏解决方案。这是一个“XML的ORM”。最常用于WS-Death Star系统的JAX-WS(实际上Sun实现是一起开发的)。使用JAXB,您可以自动创建对象的XML表示(编组)和XML的对象表示(解编组) 就XML模式而言,您有两种选择: 从XSD生成Java类 从Java类生成XSD 还有一些更简单的XML序列化库,比如,或者,这可能是替代方案。我非

这里有个家伙发誓说JAXB是自切片面包以来最伟大的东西。我很好奇,看看用户认为JAXB的用例是什么,是什么让它成为这种情况下的好解决方案还是坏解决方案。

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

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

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

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

还有一些更简单的XML序列化库,比如,或者,这可能是替代方案。

我非常喜欢JAXB处理XML。基本上,它提供了这个问题的解决方案(我假设熟悉XML、Java数据结构和XML模式):

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

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

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

我喜欢JAXB,因为它易于使用,并且随Java1.6一起提供(如果您使用的是1.5,您可以下载JAXB.jars)。它创建类层次结构的方式是直观的,根据我的经验,它可以很好地抽象出“XML”,以便我可以专注于“数据”

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


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

以下是不使用它的原因:性能受到影响。编组和解编组时会有大量开销。您可能还需要考虑另一个用于XML对象绑定的API——例如JiBX:

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

例如,您有一个交易应用程序,您必须向Uber Lame Trade Reporting应用程序报告交易,他们已经给您提供了
ultra.xsd
。使用
$JAVA_HOME/bin/xjc
编译器将XML转换为一组JAVA类(例如
UltraTrade

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


当Ultra Corp实际上没有遵守他们自己的规范时,一切都崩溃了,而他们作为
xsd:float
的交易
价格
实际上应该表示为
双倍

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

我讨厌拉皮条,但我刚开始写博客,这是我第一次发布的东西

在这里查看:


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


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

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

此Pojo应转换(Marshall)为XML文档,如下所示:

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

...
...
在远程组件上,从XML文档返回Java对象(Un Marshall)

什么是JAXB?


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

这些不是绑定框架,而是序列化库。一个好的绑定框架可以将任何XML映射到同构对象图,也可以映射回同构对象图。这些简单的序列化机制产生并使用固定的非标准XML模式。我将根据您的输入编辑我的答案。实际上,虽然XStream还可以,但是
<Employee>
  <Name>...</Name>
  <Department>...</Department>
</Employee>