如何使用JAXB框架定制Web服务行为.doc
《如何使用JAXB框架定制Web服务行为.doc》由会员分享,可在线阅读,更多相关《如何使用JAXB框架定制Web服务行为.doc(13页珍藏版)》请在咨信网上搜索。
1、Web 服务概述从本质上来讲 Web 服务就是对外暴露的并能够通过 Web 进行调用的一组 API,它并不要求服务提供方及调用方的技术实现、编程语言、运行平台甚至操作系统等。也正因为这个特点 Web 服务能在企业应用集成领域迅速占领一席之地,并成为实施应用程序集成的首选手段之一,同时 Web 服务也是面向服务架构的重要实现手段。深入剖析 Web 服务我们不难发现在这个简单定义的背后有若干问题需要解决:Web 服务提供程序如何描述自己才能为调用程序所理解;调用程序如何发现可用的 Web 服务;调用程序在找到需要的 Web 服务后应该如何调用特定的接口。目前业界已经有多个标准以及协议来解决上述问题
2、并支撑 Web 服务的使用,其中最重要的非 WSDL、SOAP、UDDI 莫属。本文以 Java Web 服务为例介绍如何定制行为。Web 服务基本构件WSDL、SOAP 和 UDDI 是 Web 服务中最基础也是最重要的组成部分,这三个协议定义了 Web 服务的描述,发现以及访问。WSDL(Web Service Description Language):Web 服务描述语言。每个 Web 服务都会有一个相应的 WSDL 文档来进行描述。WSDL 文档首先对接口和访问时的请求 / 响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服 务访问点。WSDL 文档
3、本质上是一个 XML 格式的文档,其中详细定义了 Web 服务所暴露的接口集合,接口原型,接口参数、返回类型的数据结构,接口调用消息格式,承载协议等。SOAP(Simple Object Access Protocol):简单对象访问协议。SOAP 协议本质上就是 XML 和 HTTP 协议的组合体,它定义了一个 XML 格式的 Web 服务访问消息封装格式并通过 HTTP 协议进行消息承载,当然 SOAP 消息也可以通过 HTTPS 或者 SMTP 等协议来承载。UDDI(Universal Description, Discovery and Integration):统一描述、发现和集成
4、协议。它是为解决 Web 服务的发布和发现问题而制订的技术标准,包含一组基于 Web 的、分布式的 Web 服务信息注册中心的实现标准,以及一组使企业能将自己提供的 Web 服务注册到该中心的实现标准。Web 服务中的数据绑定通俗来讲,XML 形式数据和应用程序业务数据结构的转换过程就称为数据绑定。XML 以其特有的平台独立性可以很好的用来描述 Web 服务,但是 Web 服务的核心仍在于应用程序业务逻辑处理,在业务逻辑处理中需要的业务数据结构而非这些 XMl 格式的数据,因此就需要数据绑定来完成从 XML 格式数据到应用程序业务数据结构的转换。从上节我们不难看出 Web 服务在通信过程中均以
5、 XML 形式进行表示的,而在 Java Web 服务的提供端和调用端又是以 Java 对象形式存在,因此就必然需要一个 XML 和 Java 之间的一个双向转换过程,这个转换过程就是 XML 和 Java 的数据绑定。目前业界有很多数据绑定实现,比如 adb、xmlbeans、jibx、jaxme、jaxb 等,可以根据项目实际情况进行选择,像 Axis2 里就是用了自己的 adb 绑定框架,而 JAX-RPC 类型 Web 服务就有自己的绑定机制。下图直观地反映了 Java Web 服务调用过程中的数据绑定:图 1 .Web 服务中的数据绑定 Web 服务类型 :JAX-WS vs JAX
6、-RPCJAX-RPC 规范定义了如何使用 Java 语言来实现 Web 服务,这个实现是基于 Java 的 RPC, 并不完全支持 XML schema 规范,同时没有对数据绑定定义标准的实现。 JAX-WS 是 JAX-RPC 的后续版本,它在协议支持、接口映射模型以及消息传输等方面均作了较大提升和优化。同时 JAX-WS 映射到 Java 5.0 版本,它大量使用了 Java 5.0 版本新特性诸如注解、泛型支持等,而 JAX-RPC 映射到 Java 1.4 版本。此外一个重要区别就是 JAX-WS 将数据绑定交给 JAXB 来处理,而 JAX-RPC 像之前提到的定义了一套非标准的私
7、有绑定机制,这也直接导致了在 JAX-RPC Web 服务中开发者很难对 Web 服务进行数据绑定的定制。本文后续所指 Web 服务默认为 JAX-WS 型 Web 服务。JAXB 框架概述JAXB(Java Architecture for XML Binding)是由 J2EE 体系中标准的 XML schema 和 Java 数据绑定框架,开发者可以使用 JAXB 方便地在 Java 应用程序中进行 XML 数据和 Java 对象的转换。JAXB 提供了将 XML 文档解析为 Java 内容树的方法,以及将 Java 内容树重新写回 XML 文档的方法。同时 JAXB 还提供了基于 XM
8、L schema 生成 Java 类以及从 Java 类生成 XML schema 的支持。JAXB 框架分为以下三个组成部分:schema 编译器:schema 编译器以 XML schema 为输入生成和 schema 相对应的 Java 类集,生成的 Java 类中会根据 schema 的结构自动包含了相应的 JAXB 注解。比方说 schema 里的一个元素映射的 Java 类会自动用 XmlType 注解加以标注,一个元素的属性所映射的 Java 字段会自动用 XmlElement 注解加以标注;schema 生成器:schema 生成器以包含 JAXB 注解的 Java 类集为输入
9、生成相应的 XML schema。比方说一个包含 XmlType 注解的 Java 类在生成的 schema 中会被映射为一个元素;JAXB 运行环境:JAXB 运行时环境提供了两个基本的操作用于 XML 文档的访问,操作以及验证等等:marshal、unmarshal,这两个操作也是 XML 和 Java 绑定的基础。Marshal 是指将一个内存对象以 XML 文档形式进行编组处理的过程,unmarshal 则是一个相反的过程,将一个 XML 文档解析为内存对象的过程。图 2. JAXB 框架结构示意图JAXB 的基础 -XML schemaXML schema 是 XML 文档的格式定义
10、,是 DTD 的替代产品用于约束 XML 文档内容及结构,比如它定义了 XML 文档可以出现的元素,元素出现的顺序,元素具有的属性等。XML schema 本身就是一个 XML 文档,因此天然具有了 XML 的可扩展性。同时 XML schema 对 XML 数据类型提供了更为丰富的支持。JAXB 框架的基础就是 XML schema,一个使用 JAXB 的典型场合就是根据业务数据模型需要先写出 XML schema,然后利用 JAXB 框架的绑定编译器直接生成 XML 相应的 Java 类集。JAXB 与 Web 服务关系JAX-WS 型 Web 服务将 XML 和 Java 之间的绑定代理
11、给了 JAXB 来完成,也就是说在 Web 服务调用过程中的 XML 数据和 Java 对象间转换都是由 JAXB 框架来完成的。Web 服务中接口引用的参数、返回类型等等数据类型描述都是在关联的 XML schema 中定义的,而 JAXB 框架也正是根据这个 Web 服务关联的 XML schema 来完成于 Java 对象之间的相互映射。JAXB 框架定制支持JAXB 规范定义了 XML schema 与 Java 的标准映射关系,比方说 XML 的 xsd:string 数据类型映射为 Java.lang.String,所有 JAXB 规范实现者必须实现规范所定义的标准的 XML sc
12、hema 与 Java 的映射。在大多数情况下标准映射已经能满足开发者编程需要,但是不排除在一些特殊场合我们需要定制或重载 JAXB 规范定义的标准映射,比方说我们想把 xsd:string 映射到我们自己的一个 Javabean 而非标准映射里的 Java.lang.String 类,或者我们希望对 XML schema 编译器产生的 Java 类集增加 Java doc 支持,甚至定制产生的 Java 类的名字等等,这个时候我们就需要对 JAXB 标准映射进行定制。JAXB 提供了两种方式支持从 XML schema 到 Java 的绑定定制,定制通常是以定制声明形式完成。schema 内
13、置注解:开发者可以通过在 XML schema 文档中用注解方式进行定制声明,这种定制方式开发者可以直观的看到定制声明的作用对象,作用域等,通常用于比较简单的绑定定制。schema 内置定制声明通常的语法格式如下: . binding declaration . schema 外部绑定定制文件:开发者可以把定制声明编写在一个单独的文件中,然后在编译 schema 时指定这个定制文件,这类定制文件通常以 .xjb 扩展名命名。这种方式便于 schema 定制声明的集中化管理。外部绑定定制文件中的定制声明通常的语法格式如下: 从 Java 到 XML schema 的映射开发者可以通过 JAXB
14、提供的注解来完成,在编程 Java 类时可以使用 JAXB 丰富的注解轻松地完成绑定定制。开发者可以在全局、schema、组件等不同层次上进行进行定制声明,相应不同的声明作用域。使用 JAXB 框架定制 Web 服务自底向上编程模型自底向上编程模型是指开发者从编写 Java 类开始,然后将之发布为 Web 服务。自底向上编程模型通常在 Web 服务提供方被采用,开发者在 Java 类的开发过程中可以使用 Java 注解来完成对 Web 服务的行为定制。JAXB 框架提供了丰富的注解供开发者使用来完成从 Java 类开始定制 Web 服务,当然这个定制局限在数据绑定层面上。在这种编程模型中 JA
15、XB 主要完成从 Java 类到 XML schema 的映射。JAX-WS 规范本身也定义了若干注解用于 Web 服务的基础行为定制 ( 比方说服务名称,命名空间等 )。本文我们重点关注如何利用 JAXB 来定制 Web 服务,因此下面我们主要结合 Webshpere 应用服务器 Web 服务实现来介绍一些在编程中常用的注解并介绍相应的 Web 服务行为。XmlRootElementXmlRootElement 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中会以一个全局元素的形式出现,元素的类型是一个包含 Java 类属性的 XML 复杂数据类型。我们可以通过 XmlRo
16、otElement 注解的 name 属性来定制映射的 schema 全局元素的名称,一般来说以 XmlRootElement 标注的类在相应的 XML 文档中会以最外层或根节点形式出现。比方说有如下标注类:XmlRootElement(name=RootStudent,namespace=public class Student .这个 Java 类在映射后的 Web 服务 schema 中会表现为: XmlTypeXmlType 注解用于标注类或枚举类型,用它标注的类在映射后的 schema 中中会以一个 XML 复杂数据类型的形式出现。我们可以通过 XmlType 注解的 name 属性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 使用 JAXB 框架 定制 Web 服务 行为
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。