这里有人发誓JAXB是切片面包以来最棒的东西。我很想知道Stack Overflow用户认为JAXB的用例是什么,以及是什么使它成为一个好的或坏的解决方案。
答案 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而言,您有两种选择:
答案 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服务器支持。如果您正在寻找性能和兼容性,可以查看:
答案 8 :(得分:0)
JAXB通过默认的编组优化提供了改进的性能。 JAXB定义了一个程序员API,用于从XML文档读取和写入Java对象,从而简化了通过Java读取和写入XML。