JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,让开发者能够快速完成Java类和XML的互相映射。
JAXB 允许Java人员将Java类映射为XML表示方式。其实,JAXB是一个业界标准,是一项可以根据XML Schema产生Java类
的技术,并且可以将Java对象树(Object Tree)的内容写到XML文档
中。
JAXB是众多Java与XML转换技术中的一个。一般地,我们把这种类似的技术称之为O/X Mapping。 Object/XML Mapping (O/X mapping)指XML文档与Java对象之间的映射关系。 常见的O/X mapping API:
我习惯将Java类到XML的过程称之为转换,更准确的表述方法应该这样:Java对象可以通过特定的注解或者依照规范被转换为XML
,这种转换称之为映射(mapping)
。
当你接触到JAXB的时候,相信你对Java已经有了一定的认知,至少已经听说或使用过SAX,DOM等处理XML数据的方法。SAX使用起来比较麻烦,不能修改XML数据;DOM解析几乎不能将XML与Java对象映射起来,所有的值类型都只能对应为字符串类型。
实际上,无论是SAX还是DOM都不是专门为Java准备的,它们都是访问XML文档的统一底层接口,与语言无关。而JAXB为XML节点和属性提供提供了各种面向对象的处理方式,可以基于注解或适配器将XML转换为Java对象。因为其优雅的处理方式,从JRE6开始,JAXB就已经成为了JRE的内置模块
。
JAXB提供了一个快速便捷的方式将Java对象与XML进行转换
。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 展开。
一般地,我们将 Java对象树
转换为 XML 的过程称之为 Marshal
,将XML转换为 Java对象树
的过程称之为 UnMarshal
。 为了能告诉转换器使用什么样的规则进行转换,JAXB提供了如下两种方式:
在方案一中,通过XSD文件生成的java类,已经被编译器(xjc)进行了标注,因此无需手工标注;方案二,必须是编程人员手工添加这些标记。JAXB定义的 XSD 标记比较多,也很复杂,需要借助相关的工具进行辅助开发;要想灵活的控制转换过程,可以使用直接 Java 标注的方式。
使用XSD转换的方式,相对比较简单,但需要使用者具有熟练的XSD编写经验,此外,使用XSD方式生成XML文档还有一大优势,就是在分布式系统中,能保证XML信息的发送端和接收端都是使用的java运行环境,因此,XSD 实际上将会成为端到端通信的一个标准,规定了通信的信息格式,因此,一般在分布式系统中可以先编写XSD文件,之后通信两端根据XSD提供的协议各自根据自身的情况,实现对XML文档的处理。
上一章:无
目录:学习 JAXB
下一章:JAXB-2 JAXB Annotation 注解