这里有人发誓 JAXB 是自切片面包以来最伟大的东西。我很想知道 Stack Overflow 用户认为 JAXB 的用例是什么,以及是什么使它成为该案例的好或坏解决方案。
9 回答
我是处理 XML 的 JAXB 的忠实粉丝。基本上,它为这个问题提供了一个解决方案(我假设熟悉 XML、Java 数据结构和 XML 模式):
使用 XML 很困难。需要一种方法来获取 XML 文件(基本上是文本文件)并将其转换为某种数据结构,然后您的程序可以对其进行操作。
JAXB 将采用您编写的 XML 模式并创建一组与该模式相对应的类。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 有助于处理它。
这是不使用它的一个原因:性能受到影响。编组和解组时有很多开销。您可能还想考虑另一个用于 XML-Object 绑定的 API——例如 JiBX:http: //jibx.sourceforge.net/
我一直在工作中使用 JAXB,我真的很喜欢它。它非常适合不断变化的复杂 XML 模式,尤其适用于随机访问 XML 文件中的标签。
我讨厌拉皮条,但我刚开始写博客,这实际上是我发布的第一件事!
在这里查看:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
这是一个“XML 的 ORM”。最常与 JAX-WS 一起使用(实际上 Sun 实现是一起开发的),用于 WS Death Star 系统。
xsd
如果您必须对一些定义为 XML 模式 ( )的外部 XML 规范进行编码,那么 JAXB 非常棒。
例如,您有一个交易应用程序,您必须向Uber Lame Trade Reporting 应用程序报告交易,他们已经让您ultra.xsd
继续进行下去。使用$JAVA_HOME/bin/xjc
编译器将 XML 转换为一堆 Java 类(例如UltraTrade
)。
然后,您可以编写一个简单的适配器层来将您的交易对象转换为UltraTrades
并使用将JAXB
数据编组到 Ultra-Corp。比将您的交易转换为 XML 格式更容易。
当 Ultra-Corp 没有真正遵守他们自己的规范时,一切都崩溃了price
,他们以 a表示的交易xsd:float
实际上应该表示为double
!
为什么我们需要 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 是执行 Marshalling 和 UnMarshalling 操作的库或工具。它使您免于头痛,就这么简单。
您也可以查看 JIBX。它也是一个非常好的xml数据绑定器,它也是OTA(Open Travel Alliance)专业的,并且得到了AXIS2服务器的支持。如果您正在寻找性能和兼容性,可以查看:
JAXB 通过默认编组优化提供改进的性能。JAXB 定义了一个程序员 API,用于从 XML 文档读取和写入 Java 对象,从而简化了通过 Java 读取和写入 XML。