问题

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


#1 热门回答(90 赞)

我是操作XML的JAXB的忠实粉丝。基本上,它提供了解决此问题的方法(我假设你熟悉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有助于操作它。


#2 热门回答(23 赞)

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


#3 热门回答(19 赞)

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


原文链接