论文部分内容阅读
摘 要:XML绑定的框架提供了一个功能强大而又实用的方法去在JAVA程序中处理XML内容。JAXB提供了很多新的特性,包括对所有XML Schema模型特性的支持,产生更少的类,并且更容易对这些生成的类进行操作,同时提供了一个更方便的验证机制。
关键词:XML绑定;框架;JAXB;schema
中图分类号:TP311.52文献标识码:A
Research and Application of JAXB
WANG Yang,XU Su-jin
(School of Computer and Information Engineering,Henan University,Henan Kaifeng 475004)
Key words: XML binding; content; JAXB; schema
1 引言
JAXB(Java Architecture for XML Binding, Java XML绑定架构)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该技术可以提供将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便加载XML数据,并以XML文件作为数据存储方式。
2 JAXB技术研究
2.1JAXB技术的优势
(1)简单易用:JAXB技术中XML绑定的JAVA框架提供了一种简单而且方便的方法映射XML模型到JAVA类,所以开发人员不用深入了解XML就可以在他们的JAVA程序就处理XML数据。
(2)维护性好:当产品需要更新,或是数据模型需要改变时,只需要重新定义Schema,然后让JAXB重新生成对XML文档进行操纵的类,使得应用程序具有很好的维护性。
(3)数据兼容性:进行版本更新时,往往要考虑兼容性问题。由于使用了XML作为数据交换的格式,只需要提供XSLT的模板就能将原有的数据格式自动转换成新版本的格式。除此以外,还可以将XML表示的图形数据文件任意转换成其他标准的CAD数据格式。
(4)较好的性能:JAXB在运行时在大部分时间中都是直接操纵内存中的Java对象,只有在读取和存储文件的时候才会与XML文件进行IO操作。
2.2JAXB技术核心组件
JAXB技术主要包含下列核心组件:
(1)XML Schema:XML模式使用XML语法描述XML文档中元素、属性和实体之间的关系。XML模式的目标是定义一个XML文档类,该类必须坚持特定的结构规则和数据约束。例如,你可能希望给面向章的书、在线采购系统或个人数据库定义不同的模式。在JAXB上下文中,将包含数据的受到XML模式约束的XML文档叫做文档实例,并且将文档实例中的结构和数据叫做内容树。
(2)Binding Compiler:JAXB绑定编译器是JAXB处理模型的核心。它的功能是将源XML模式转换或绑定到Java编程语言中的一组JAXB内容类。基本上,可以通过将一个XML模式 (可以选择使用自定义绑定声明)用作输入来运行JAXB绑定编译器。绑定编译器产生Java类,这些Java类映射到了源XML 模式中的约束条件。JAXB绑定编译器可以让你从一个指定的XML模型生成JAVA类。JAXB绑定编译器把XML模型转换成一个符合XML模型里所描述的结构的JAVA类。这些类使用特殊的JAXB注释符进行注释,给运行时框架提供所需要的映射功能用于处理相应的XML文档。
(3)Schema-Derived Classes & Interfaces:这些是JAXB编译器产生的模式派生类。根据输入的模式将采用不同的类。
(4)Application:在JAXB上下文中,Java应用程序是客户端应用程序,它使用JAXB绑定框架来反编组XML数据,验证并修改Java内容对象,并将Java内容编组成XML数据。特别是,JAXB绑定框架包装在一个能提供UI功能、XML转换功能、数据处理或其他所需要的功能的大型Java应用程序中。
(5)JAXB API:提供了反编组、编组和验证Java应用程序中的XML内容的接口。
(6)XML Document:这是反编组出来用作JAXB绑定框架输入的XML内容——即XML实例文档,从这里将产生内容树形式的Java表示。实际上,术语"文档"不再是传统意义上的文档了,因为XML实例文档不一定要是形式完整的、自立的文档文件;相反它具有流的形式,这些流可以是应用程序之间传递的数据、数据库字段集合、XML信息集合,其中信息块包含了描述它们在模式结构中的位置的足够信息。
在JAXB中,反编组过程支持根据源模式定义的约束验证XML输入文档。然而该验证过程是可选的,在某些情况下你可能通过其他途径知道输入文档是有效的,出于对性能的考虑你可能选择在反编组过程中跳过验证。但是,无论在哪种情况下,反编组之前(通过第三方应用程序)或之后验证都很重要,这是因为它确保了关于源模式编组过程中产生的XML文档也是有效的。
(7)Content Objects:这是编组到XML文档的XML内容。在JAXB中,编组包括解析XML内容对象树并写出一个XML文档,该文档是原始XML文档的精确表示并且相对于原始模式来说是有效的。JAXB能够将XML数据编组成XML文档、SAX内容处理程序和DOM节点。
3 JAXB技术应用
3.1应用场景
程序的自定义设置是一个重要的功能,大多数程序都会提供自定义配置的方法,提供用户根据个人喜好、运行环境来配置软件的使用方式。程序的配置方式存在多样性,一般会采用Windows格式的INI配置文件或者注册表方式,Java格式的Properties属性文件,随着XML文件在程序开放中的普及,也有越来越多的配置开始使用XML的文件方式,例如J2EE中的部署描述文件。
在一般的程序配置方式中,使用JAXB是一个简单,方便的做法,无论是加载自定义配置、或者是保存配置。把对配置参数的处理,转化为普通Java对象的操作,对于参数的加载或者保存,则交与JAXB来实现,因此都极为轻松。
JAXB技术允许把Java和XML绑定在一起。这意味着可以在Java程序中访问XML文档的数据。这对创建Schema驱动的用户界面特别便利。
3.2JAXB技术应用步骤
(1)定义XML文件的Schema,用于定义XML文件的格式规范。
(2)运行xjc.bat或者xjc.sh脚本进行数据绑定。
(3)使用marshal静态方法来根据Java对象生成XML文件。
(4)使用unmarshal静态方法从XML文件装载Java对象。
3.3用JAXB技术进行数据绑定
JAXB编译器绑定一个XML模型到一组Java类。一个XML模型就是一个XML文档用于描述在一个特定类型XML文档中指定的元素和属性。XML模型描述是非常的严格的,可以包括诸如一列对象所允许的元素个数,可选,必选属性等等这样的细节。
Schema用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。可以理解成与DTD(文档类型定义)功能差不多,但是Schema在当前的WEB开发环境下优越很多。因为它本身就是一个有效的XML文档,因而可以更直观地了解XML的结构。除此之外,Schema支持命名空间,内置多种简单和复杂的数据类型,并支持自定义数据类型。
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200812/gpjs20081221-1-l.jpg)
命令行工具XJC用于运行JAXB编译器。为了按照自定的模式运行JAXB编译器,运行命令时可以根据需要求改变命令的参数。例:
xjc Schema文件 参数
这将产生一组用JAXB注释符注释的JAVA类。一些比较有用的可选项描述如下:
o -d:把生成的文件存入这个目录。
o -p:把生成的文件存入这个包。
o -nv:不要对输入模式进行严格的验证。
o -classpath:如果有必要的话,指定classpath。
o -readOnly:如果你的操作系统支持这个的话,生成只读源代码文件。
3.4实现简单marshal和unmarshal静态方法
在实现数据绑定过后,就可以根据主要绑定框架包javax.xml.bind提供的三个核心功能编组(marshal)、反编组(unmarshal)和验证(Validator)对XML文件进行操作。
JAXBContext类是Java应用程序到JAXB框架的入口点。JAXBContext 实例为编组、反编组和验证操作使用的JAXB实现将XML元素名绑定到Java内容接口。JAXBContext提供了一个抽象,该抽象可以管理实现反编组、编组和验证操作必要的XML/Java绑定信息。客户端应用程序通过newInstance方法得到该类的新实例。代码如下:
JAXBContext jaxbContext
=JAXBContext.newInstance
(“数据帮定生成Java类的位置”);
javax.xml.bind包中的Marshaller类使得客户端应用程序能够将Java内容树转换成XML数据。编组一个使用工厂方法人为创建的内容树和反编组操作得到的内容树之间没有什么区别。客户端能够将Java内容树编组回到java.io.OutputStream 或java.io.Writer的XML数据中。
通过已编组的数据流生成一个XML文件,代码如下:
Marshaller marshaller=jc.createMarshaller();
marshaller.marshal(数据流,new FileOutputStream(“文件名“);
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200812/gpjs20081221-2-l.jpg)
javax.xml.bind包中的Unmarshaller类使得客户端应用程序能够将XML数据转换成Java内容对象树。模式的unmarshal方法(在命名空间内)允许将模式中声明的任何全局XML元素反编组成实例文档的根。
简单的读取一个XML文件,代码如下:
Unmarshaller u=jc.createUnmarshaller();
JAXBElement 数据流
=(JAXBElement) u.unmarshal(new FileInputStream(”文件名“);
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200812/gpjs20081221-3-l.jpg)
4 结束语
JAXB技术是一个用于集成XML到JAVA应用程序中功能强大的工具。支持所有XML模式,验证更灵活,生成的类更简单,干净。现在JAXB技术越来越多的运用到各种应用程序当中,在越来越多的开放源码的产品都能看到JAXB的影子。尤其是Web Services和XML的应用的迅速发展,JAXB技术越来越受到广大Java开发人员的重视。
参考文献:
[1]John Zukowski.Java? 6 Platform Revealed,2006,(11).
[2]Hanser Fachbuchverlag.JAXB 2.0,2006,(11).
[3]吴波,王华军.XML数据绑定技术探析[J].软件导刊,2008,(8).
[4]姜力.基于Java的XML数据绑定[J].浙江万里学院学报,2004,(5).
关键词:XML绑定;框架;JAXB;schema
中图分类号:TP311.52文献标识码:A
Research and Application of JAXB
WANG Yang,XU Su-jin
(School of Computer and Information Engineering,Henan University,Henan Kaifeng 475004)
Key words: XML binding; content; JAXB; schema
1 引言
JAXB(Java Architecture for XML Binding, Java XML绑定架构)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该技术可以提供将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便加载XML数据,并以XML文件作为数据存储方式。
2 JAXB技术研究
2.1JAXB技术的优势
(1)简单易用:JAXB技术中XML绑定的JAVA框架提供了一种简单而且方便的方法映射XML模型到JAVA类,所以开发人员不用深入了解XML就可以在他们的JAVA程序就处理XML数据。
(2)维护性好:当产品需要更新,或是数据模型需要改变时,只需要重新定义Schema,然后让JAXB重新生成对XML文档进行操纵的类,使得应用程序具有很好的维护性。
(3)数据兼容性:进行版本更新时,往往要考虑兼容性问题。由于使用了XML作为数据交换的格式,只需要提供XSLT的模板就能将原有的数据格式自动转换成新版本的格式。除此以外,还可以将XML表示的图形数据文件任意转换成其他标准的CAD数据格式。
(4)较好的性能:JAXB在运行时在大部分时间中都是直接操纵内存中的Java对象,只有在读取和存储文件的时候才会与XML文件进行IO操作。
2.2JAXB技术核心组件
JAXB技术主要包含下列核心组件:
(1)XML Schema:XML模式使用XML语法描述XML文档中元素、属性和实体之间的关系。XML模式的目标是定义一个XML文档类,该类必须坚持特定的结构规则和数据约束。例如,你可能希望给面向章的书、在线采购系统或个人数据库定义不同的模式。在JAXB上下文中,将包含数据的受到XML模式约束的XML文档叫做文档实例,并且将文档实例中的结构和数据叫做内容树。
(2)Binding Compiler:JAXB绑定编译器是JAXB处理模型的核心。它的功能是将源XML模式转换或绑定到Java编程语言中的一组JAXB内容类。基本上,可以通过将一个XML模式 (可以选择使用自定义绑定声明)用作输入来运行JAXB绑定编译器。绑定编译器产生Java类,这些Java类映射到了源XML 模式中的约束条件。JAXB绑定编译器可以让你从一个指定的XML模型生成JAVA类。JAXB绑定编译器把XML模型转换成一个符合XML模型里所描述的结构的JAVA类。这些类使用特殊的JAXB注释符进行注释,给运行时框架提供所需要的映射功能用于处理相应的XML文档。
(3)Schema-Derived Classes & Interfaces:这些是JAXB编译器产生的模式派生类。根据输入的模式将采用不同的类。
(4)Application:在JAXB上下文中,Java应用程序是客户端应用程序,它使用JAXB绑定框架来反编组XML数据,验证并修改Java内容对象,并将Java内容编组成XML数据。特别是,JAXB绑定框架包装在一个能提供UI功能、XML转换功能、数据处理或其他所需要的功能的大型Java应用程序中。
(5)JAXB API:提供了反编组、编组和验证Java应用程序中的XML内容的接口。
(6)XML Document:这是反编组出来用作JAXB绑定框架输入的XML内容——即XML实例文档,从这里将产生内容树形式的Java表示。实际上,术语"文档"不再是传统意义上的文档了,因为XML实例文档不一定要是形式完整的、自立的文档文件;相反它具有流的形式,这些流可以是应用程序之间传递的数据、数据库字段集合、XML信息集合,其中信息块包含了描述它们在模式结构中的位置的足够信息。
在JAXB中,反编组过程支持根据源模式定义的约束验证XML输入文档。然而该验证过程是可选的,在某些情况下你可能通过其他途径知道输入文档是有效的,出于对性能的考虑你可能选择在反编组过程中跳过验证。但是,无论在哪种情况下,反编组之前(通过第三方应用程序)或之后验证都很重要,这是因为它确保了关于源模式编组过程中产生的XML文档也是有效的。
(7)Content Objects:这是编组到XML文档的XML内容。在JAXB中,编组包括解析XML内容对象树并写出一个XML文档,该文档是原始XML文档的精确表示并且相对于原始模式来说是有效的。JAXB能够将XML数据编组成XML文档、SAX内容处理程序和DOM节点。
3 JAXB技术应用
3.1应用场景
程序的自定义设置是一个重要的功能,大多数程序都会提供自定义配置的方法,提供用户根据个人喜好、运行环境来配置软件的使用方式。程序的配置方式存在多样性,一般会采用Windows格式的INI配置文件或者注册表方式,Java格式的Properties属性文件,随着XML文件在程序开放中的普及,也有越来越多的配置开始使用XML的文件方式,例如J2EE中的部署描述文件。
在一般的程序配置方式中,使用JAXB是一个简单,方便的做法,无论是加载自定义配置、或者是保存配置。把对配置参数的处理,转化为普通Java对象的操作,对于参数的加载或者保存,则交与JAXB来实现,因此都极为轻松。
JAXB技术允许把Java和XML绑定在一起。这意味着可以在Java程序中访问XML文档的数据。这对创建Schema驱动的用户界面特别便利。
3.2JAXB技术应用步骤
(1)定义XML文件的Schema,用于定义XML文件的格式规范。
(2)运行xjc.bat或者xjc.sh脚本进行数据绑定。
(3)使用marshal静态方法来根据Java对象生成XML文件。
(4)使用unmarshal静态方法从XML文件装载Java对象。
3.3用JAXB技术进行数据绑定
JAXB编译器绑定一个XML模型到一组Java类。一个XML模型就是一个XML文档用于描述在一个特定类型XML文档中指定的元素和属性。XML模型描述是非常的严格的,可以包括诸如一列对象所允许的元素个数,可选,必选属性等等这样的细节。
Schema用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。可以理解成与DTD(文档类型定义)功能差不多,但是Schema在当前的WEB开发环境下优越很多。因为它本身就是一个有效的XML文档,因而可以更直观地了解XML的结构。除此之外,Schema支持命名空间,内置多种简单和复杂的数据类型,并支持自定义数据类型。
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200812/gpjs20081221-1-l.jpg)
命令行工具XJC用于运行JAXB编译器。为了按照自定的模式运行JAXB编译器,运行命令时可以根据需要求改变命令的参数。例:
xjc Schema文件 参数
这将产生一组用JAXB注释符注释的JAVA类。一些比较有用的可选项描述如下:
o -d
o -p
o -nv:不要对输入模式进行严格的验证。
o -classpath
o -readOnly:如果你的操作系统支持这个的话,生成只读源代码文件。
3.4实现简单marshal和unmarshal静态方法
在实现数据绑定过后,就可以根据主要绑定框架包javax.xml.bind提供的三个核心功能编组(marshal)、反编组(unmarshal)和验证(Validator)对XML文件进行操作。
JAXBContext类是Java应用程序到JAXB框架的入口点。JAXBContext 实例为编组、反编组和验证操作使用的JAXB实现将XML元素名绑定到Java内容接口。JAXBContext提供了一个抽象,该抽象可以管理实现反编组、编组和验证操作必要的XML/Java绑定信息。客户端应用程序通过newInstance方法得到该类的新实例。代码如下:
JAXBContext jaxbContext
=JAXBContext.newInstance
(“数据帮定生成Java类的位置”);
javax.xml.bind包中的Marshaller类使得客户端应用程序能够将Java内容树转换成XML数据。编组一个使用工厂方法人为创建的内容树和反编组操作得到的内容树之间没有什么区别。客户端能够将Java内容树编组回到java.io.OutputStream 或java.io.Writer的XML数据中。
通过已编组的数据流生成一个XML文件,代码如下:
Marshaller marshaller=jc.createMarshaller();
marshaller.marshal(数据流,new FileOutputStream(“文件名“);
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200812/gpjs20081221-2-l.jpg)
javax.xml.bind包中的Unmarshaller类使得客户端应用程序能够将XML数据转换成Java内容对象树。模式的unmarshal方法(在命名空间内)允许将模式中声明的任何全局XML元素反编组成实例文档的根。
简单的读取一个XML文件,代码如下:
Unmarshaller u=jc.createUnmarshaller();
JAXBElement 数据流
=(JAXBElement) u.unmarshal(new FileInputStream(”文件名“);
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200812/gpjs20081221-3-l.jpg)
4 结束语
JAXB技术是一个用于集成XML到JAVA应用程序中功能强大的工具。支持所有XML模式,验证更灵活,生成的类更简单,干净。现在JAXB技术越来越多的运用到各种应用程序当中,在越来越多的开放源码的产品都能看到JAXB的影子。尤其是Web Services和XML的应用的迅速发展,JAXB技术越来越受到广大Java开发人员的重视。
参考文献:
[1]John Zukowski.Java? 6 Platform Revealed,2006,(11).
[2]Hanser Fachbuchverlag.JAXB 2.0,2006,(11).
[3]吴波,王华军.XML数据绑定技术探析[J].软件导刊,2008,(8).
[4]姜力.基于Java的XML数据绑定[J].浙江万里学院学报,2004,(5).