网站大量收购闲置独家精品文档,联系QQ:2885784924

XFire客户端流程分析(完整).doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HYPERLINK /cb_121/article/details/2543642 \o XFire客户端流程分析 XFire客户端流程分析 分类: HYPERLINK /cb_121/article/category/410965 Webservice 2008-06-13 14:21 341人阅读 HYPERLINK /cb_121/article/details/2543642 \l comments#comments 评论(0) HYPERLINK javascript:collectArticle(XFire客户端流程分析,2543642) 收藏 HYPERLINK /cb_121/article/details/2543642 \l report#report 举报 XFire是当前J2EE领域非常流行的Web Service框架,以其卓越的性能和简单易用的特性博得了广大开发者的青睐。目前XFire已经演变为Apache的CXF项目,但仍有大量用户在使用XFire。 ? 下面是XFire客户端调用的流程分析图,本文后续本分将围绕该图展开。 XFire客户端的调用非常灵活,可以有很多种方式,如通过配置调用、通过API编程调用或者与Spring等IoC框架集成使用。虽然调用方式灵活多样,但万变不离其中,其内部流程是一致的。 创建服务模型 服务模型是XFire中非常重要的概念之一,包含了服务的接口信息、操作信息、Binding信息等诸多服务调用过程中需要的信息。因此在进行服务调用之前首先要创建服务模型。创建服务模型的工作是由服务工厂ServiceFactory完成的,用户需要为服务工程提供服务接口、名称、命名空间等一些信息,其中服务接口是必须的,其他为可选信息。 创建Client实例 Client是XFire客户端的核心组成部分,间接的代表了一个服务。当为具体某个服务配置拦截器(Handler,有很多种译法如拦截器、处理器、过滤器等,本文统一用拦截器)时,其实是将拦截器信息应用到Client实例上。Client可以手工创建也可以由XFireProxyFactory创建,无论通过哪种方式,Client在初始化过程中最重要的一步都是在out拦截器堆栈中增加一个OutMessageSender拦截器。该拦截器负责最终将服务调用通过HTTP发送到服务提供者并返回处理结果。本文后续部分还会对OutMessageSender做更加详细的讲解。 创建服务代理对象 XFireProxy,XFire SOAP客户端代理实现,用户调用服务时(如Hello.echo(“tony”))就是通过该对象的invoke方法来执行。实际上,XFireProxy只是将调用代理到Client实例,最终执行服务的还是Client实例。 构造调用链信息 Client实例的invoke方法在执行时,生成了一个Invocation对象,该对象构造了一次完整的调用信息,包括OutMessage、MessageContext等。同时Invocation还负责构造一个拦截器管道(HandlerPipeline),该管道包含了本次调用需要执行的所有拦截器,当然也包括OutMessageSender。这些拦截器会分不同的阶段来执行,这也是XFire一个特性。XFire默认定义了很多阶段(Phase),每个阶段都会有若干拦截器被调用。 循环调用拦截器 拦截器(Handler)是XFire中最为重要的概念,一次服务调用就是由若干拦截器组合完成的。XFire默认提供了很多预定义的拦截器,用户也可以定义自己的拦截器。基本上,通过拦截器可以影响XFire执行过程中的任何步骤,你可以为所欲为:) ? 拦截器有两个重要的概念,一个是阶段(Phase),一个是顺序(Order)。这两个因素共同决定了拦截器的执行顺序。可以在三个不同的地方配置拦截器: ????????? XFire实例:全局拦截器,对所有通道上的所有服务起作用 ????????? Transport:通道特定的拦截器,只对该通道(如HTTP、JMS)起作用 ????????? 具体服务:服务特定的拦截器,只对该服务起作用 ? 其实,具体服务上的拦截器最终是配置到Client上。对于同一个阶段上的拦截器,执行顺序为“具体服务—Transport—XFire实例”。千万不要忽视这些顺序,这对你正确的使用拦截器非常有帮助。 发送远程服务请求 这是整个调用链中最后的一环,也是最关键的一步。OutMessageHandler,前文已经有所提及,是一个特殊的拦截器,在Client初始化时创建并加入调用链中。该拦截器处于拦截器调用链的Phase.SEND阶段,基本上也是最后的阶段。OutMessageHandler从当前调用

文档评论(0)

189****6140 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档