JAXB 深入显出 - JAXB 教程 导读

x33g5p2x  于2021-12-28 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(216)

摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录

O/X Mapping

Object/XML Mapping (O/X mapping)指XML文档与Java对象之间的映射关系。
常见的O/Xmapping API:

  • JAXB
  • XMLBeans
  • JiBX
  • Castor
  • XStream
    Java对象可以通过特定的注解或者依照规范被转换为XML,我们把这种转换称之为映射(mapping)

为什么 JAXB

当你接触到JAXB的时候,相信你对Java已经有了一定的认知,至少已经听说或使用过SAX,DOM等处理XML数据的方法。SAX使用起来比较麻烦,不能修改XML数据;DOM解析几乎不能将XML与Java对象映射起来,所有的值类型都只能对应为字符串类型。实际上,无论是SAX还是DOM都不是专门为Java准备的,它们都是访问XML文档的统一底层接口,与语言无关。而JAXB为XML节点和属性提供提供了各种面向对象的处理方式,可以基于注解或适配器将XML转换为Java对象。因为其优雅的处理方式,从JRE6开始,JAXB就已经成为了JRE的内置模块。
XML 是各种应用程序之间进行数据传输的最常用的语言之一,而JAXB提供了一个快速便捷的方式将Java对象与XML进行转换。

在处理XML文档时,使用JAXB要比使用JAXP(DOM、SAX和StAX)更方便。但不表明DOM、SAX和StAX就再无用武之地,JAXB的底层实现可是基于JAXP的。

JAXB 发展历程

JAXB 1.0 由Java 社区开发与维护。
在2006年,发布JAXB 2.0 版本后,成为了J2SE和J2EE平台的一部分。
2006年,发布的Java SE 6 采用JAXB 2.0。
2011年,发布的J2SE 7 采用JAXB 2.2.3。
2014年,发布的J2SE 8 采用JAXB 2.2.8。
2017年,发布的J2SE 9 采用JAXB 2.3.0,不过该模块被标记为废弃的(deprecated )。
在Java 11中,JAXB 将会从J2SE中去除,只保留J2EE版本中的JAXB。

JAXB 转换

一般地,我们将Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal。
为了能告诉转换器使用什么样的规则进行转换,JAXB提供了如下两种方式:

  • Java Annotation 注解
  • JAXB 的 xjc 工具定义 schema
    JAXB框架中提供两种编写XML和java对象交互的方法。其一,通过XSD(XML Schema Definition)文档生成Java类的方式。其二,通过编写标注java类,之后生成相应的XSD文档(第二种,生成XSD文档并不是必须的)。JAXB通过分析java类中的标记(annotation),将java类转换为相应的XML文档。在方案一中,通过XSD文件生成的java类,已经被编译器(xjc)进行了标注,因此无需手工标注,而对应第二种方案,必须是编程人员手工添加这些标记。JAXB定义的标记比较多,也很复杂,要想灵活的控制转换过程,可以使用直接标注的方式。使用XSD转换的方式,相对比较简单,但需要使用者具有熟练的XSD编写经验,此外,使用XSD方式生成XML文档还有一大优势,就是在分布式系统中,不能保证XML信息的发送端和接收端都是使用的java运行环境,因此,XSD实际上将会成为端到端通信的一个标准,规定了通信的信息格式,因此,一般在分布式系统中可以先编写XSD文件,之后通信两端根据XSD提供的协议各自根据自身的情况,实现对XML文档的处理。

JAXB相关的重要类与接口

JAXBContext 类

应用的入口,用于管理XML/Java绑定信息。

Marshaller 接口

将Java对象序列化为XML数据。

Unmarshaller 接口

将XML数据反序列化为Java对象。

JAXB 与 jackson

JAXB(Java Architecture for XML Binding)是JSE和JEE平台的一部分,让开发者能够快速完成java类和XML的互相映射。虽然它官方、简洁(不需要引入依赖jar包),确被另外一个产品jackson 的名声盖过了。jackson 对于处理 JSON 有着独特的优势,对XML 的转换也有比较好的支持(虽然是基于JAXB)。

下节预览

在对 JAXB 有一个整体的认知以后,下一节将通过简单的示例,演示 JAXB 的使用流程。

相关文章