JAXB-1 JAXB 概述

  • 1 JAXB 概述
    • 1.1 O/X Mapping
    • 1.2 为什么选 JAXB
    • 1.3 JAXB 发展历程
    • 1.4 JAXB 转换/映射

1 JAXB 概述

JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,让开发者能够快速完成Java类和XML的互相映射。
JAXB 允许Java人员将Java类映射为XML表示方式。其实,JAXB是一个业界标准,是一项可以根据XML Schema产生Java类的技术,并且可以将Java对象树(Object Tree)的内容写到XML文档中。

JAXB XJC
JAXB API + Annotation
JAXB API + Annotation
XML Schema
Java Bean Class
XML

1.1 O/X Mapping

JAXB是众多Java与XML转换技术中的一个。一般地,我们把这种类似的技术称之为O/X Mapping。 Object/XML Mapping (O/X mapping)指XML文档与Java对象之间的映射关系。 常见的O/X mapping API:

  • JAXB
  • XMLBeans
  • JiBX
  • Castor
  • XStream
O/X Mapping API
Java Bean Class
XML

我习惯将Java类到XML的过程称之为转换,更准确的表述方法应该这样:Java对象可以通过特定的注解或者依照规范被转换为XML,这种转换称之为映射(mapping)

1.2 为什么选 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的。
O/X Mapping API
面向过程
面向对象
SAX
DOM
StAX
JAXB

1.3 JAXB 发展历程

JAXB是一个古老技术,其最初版本并不为大众所知,而是存在于Java社区之中。
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属于JAXB2,教程中的所有的叙述也是基于JAXB 2 展开。

2006 年
2011 年
2014 年
2017 年
2018 年
Java 6
JAXB 2.0
Java 7
JAXB 2.2.3
Java 8
JAXB 2.2.8
Java 9
JAXB 2.3.0 Deprecated
Java 11
J2SE 移除 JAXB

1.4 JAXB 转换/映射

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

  • XSD(XML Schema Definition)文档,JAXB 的 xjc 工具解析该定义 schema 的 XSD 文档,生成映射指定格式 XML 的 Java 类;
  • Java Annotation 注解,JAXB通过分析java类中的标记/注解(annotation),将 java 类映射到指定格式的 XML 文档。
JAXB O/X Mapping Choice
#1, XSD Schema
#2, Java Annotaion
Only need XSD document
Need both Java Class and Annotation

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


上一章:无
目录:学习 JAXB
下一章:JAXB-2 JAXB Annotation 注解


JAXB-1 JAXB 概述相关推荐

  1. JAXB 深入显出 - JAXB 教程 解读 JAXBContext

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

  2. java 6 jaxb_JAVA6开发WebService (五)—— JAXB

    JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换.在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版 ...

  3. moxy json介绍_MOXy的对象图和动态JAXB

    moxy json介绍 JAXB(JSR-222)使您可以轻松地将域类的实例转换为XML. EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展,在其中,您可以使用诸如Dy ...

  4. jaxb入门_JAXB教程–入门

    jaxb入门 注意:请查看我们的Java XML绑定JAXB教程– ULTIMATE指南 什么是JAXB? JAXB代表用于XML绑定的Java体系结构.它用于将XML转换为java对象,并将java ...

  5. stax 和jaxb 关系_XML解组基准:JAXB,STAx,Woodstox

    stax 和jaxb 关系 介绍 上周末,我开始考虑如何以一种资源友好的方式处理大量XML数据.我要解决的主要问题是如何以块的形式处理大型XML文件,同时提供上游/下游系统,需要处理一些数据. 当然, ...

  6. jaxb util_JAXB自定义绑定– Java.util.Date / Spring 3序列化

    jaxb util JaxB可以处理Java.util.Date序列化,但是需要以下格式: " yyyy-MM-ddTHH:mm:ss ". 如果需要将日期对象格式化为另一种格式怎 ...

  7. jaxb xsd生成xml_使用JAXB从XSD生成XML

    jaxb xsd生成xml 这是最初由JCG合作伙伴 Experiences Unlimited的Mohamed Sanaulla发表的帖子. Mohamed解释了如何使用JAXB从给定的XSD生成X ...

  8. MOXy的对象图和动态JAXB

    JAXB(JSR-222)使您可以轻松地将域类的实例转换为XML. EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展,在其中,您没有像真实类那样的映射实例,例如名为Dy ...

  9. XML解组基准:JAXB,STAx,Woodstox

    介绍 上周末,我开始考虑如何以一种资源友好的方式处理大量XML数据.我要解决的主要问题是如何以块的形式处理大型XML文件,同时提供上游/下游系统,需要处理一些数据. 当然,我已经使用JAXB技术已有几 ...

最新文章

  1. java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理
  2. ubuntu下使用filezilla上传文件权限问题(open for write: permission denied)
  3. 错误:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp;的解决
  4. 涵盖 14 大主题!最完整的 Python 学习实例集来了!
  5. 将HTML字符转换为DOM节点并动态添加到文档中
  6. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each
  7. FastJson 中 jsonArray 转换成 list 集合的方法
  8. 简述python常用的函数模块_Python中常用的Python time模块常用函数
  9. C语言学习笔记---fgets()函数和fputs()函数
  10. Visio—如何画虚线?
  11. C#捕获摄像头进行拍照和录像资料总结
  12. Python爬取网上文章并发表到微信公众号
  13. 游戏数据分析-玩家战力分析
  14. linux开发板2048游戏界面图,linux c 实现2048游戏
  15. ASP.NET Core 集成AAD认证在Docker中运行时要注意的一个问题
  16. 凡泰极客成为W3C成员并加入MiniApps工作组
  17. linux彻底清除磁盘阵列,Linux下彻底关闭某个RAID磁盘阵列
  18. 基于5G森林防火无线监控解决方案
  19. excel-counta
  20. 工业螺旋齿轮行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)

热门文章

  1. ping, ping6 (icmp, icmpv6)
  2. springboot 简单发邮件 QQ邮箱
  3. android背景图加蒙版,Android实现蒙板效果
  4. 铁威马NAS忘记密码找回方式
  5. 企业数字化转型高级解决方案专家柳京活:元宇宙背景下的大数据之路 l 华坤道威专访
  6. python 输入年月获取下个月年月
  7. Mastering Opencv学习笔记(1)——图片卡通化
  8. Wemos D1mini(ESP8266)基础实验------按钮控制板载等亮灭
  9. 手机综合商城app小程序模板
  10. BigchainDB 2.0 区块链数据库白皮书 V1.0