什么是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服务器。 如果你正在寻找性能和兼容性,你可以看看:
JAXB通过默认的编组优化提供了改进的性能。 JAXB定义了一个程序员API,用于从XML文档读取和写入Java对象,从而简化了通过Java读取和写入XML。