当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么是JAXB,我为什么要使用它?》经验,为你挑选了7个好方法。

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



1> poundifdef..:

我是操作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有助于操作它.


JAXB可以在没有XSD的情况下完成.您可以使用注释:https://jaxb.dev.java.net/guide/Mapping_your_favorite_class.html
JAXB是一个规范(如JPA或JAXP),这意味着有多个实现(Metro,EclipseLink等).如果您遇到问题,可以切换到另一个实现.您还可以利用不同供应商提供的扩展.
仅供参考,从Java SE 11中删除了JAXB。请参见[* JEP 320:删除Java EE和CORBA模块*](http://openjdk.java.net/jeps/320)。此操作是[Java SE模块化](https://en.wikipedia.org/wiki/Java_Platform_Module_System)和[Java EE](https://en.wikipedia.org/ Wiki / Java_Platform,_Enterprise_Edition)技术应用于[* Jakarta EE *](https://jakarta.ee)项目。您将必须在项目中添加JAXB API和实现。

2> codefinger..:

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


我在几个项目中使用过JAXB,并继续使用它.但了解它与其他框架的比较非常重要.如果您正在编组/解组数百兆字节的文档,并且时间很重要 - JiBX是一个不错的选择.JAXB ==反射,JiBX ==字节代码检测.
废话.JAXB非常快,只要您使用快速解析器(如Woodstox),与手动绑定相比,开销可能高达30-40%.JiBX很好,没问题,但性能差异不大.

3> Tom Hawtin -..:

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



4> artgon..:

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

我讨厌皮条客,但我刚开始写博客,这是我发布的第一件事!

看看这里:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/


您博客上的清晰示例.为此投了赞成票.:-)

5> Fabian Steeg..:

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

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

从XSD生成Java类

从Java类生成XSD

还有一些更简单的XML序列化库,如XStream,Digester或XMLBeans,可能是替代品.


有人请使用Annotations提及JAXB-2.0.在几个XmlAdapter类之间,我可以将任何模式映射到任何现有的Java结构.

6> oxbow_lakes..:

如果必须编写一些定义为XML模式(xsd)的外部XML规范,JAXB就很棒.

例如,您有一个交易应用程序,您必须向Uber Lame交易报告应用程序报告交易,他们已经让您ultra.xsd继续使用.使用$JAVA_HOME/bin/xjc编译器将XML转换为一堆Java类(例如UltraTrade).

然后你可以编写一个简单的适配器层来转换你的交易对象,UltraTrades并使用它JAXB来整理数据到Ultra-Corp.很多比搞乱转换您的交易到他们的XML格式更容易.

一切都崩溃的地方是Ultra-Corp实际上没有遵守他们自己的规范,而price他们作为a 的交易xsd:float实际上应该表达为double!



7> Prashant_M..:

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

class Employee{
 String name;
 String dept;
 ....
}

这个Pojo应该转换(Marshall)到XML文档中,如下所示:


  ...
  ...

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

什么是JAXB?

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

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有