Spring Web Service支持多种传输协议来和SOAP进行绑定, 包括http,
jms和email.最普遍的就是http协议了. 类似Spring
MVC, Spring-WS也提供一个前端控制器MessageDispathcerServlet来处理来自客户端的请求, 但它的主要作用也就是解析WSDL文件的地址, 并且将实际的请求委托给它包装的一个MessageDispatcher对象.下面是从其官方文档上截下来的时序图:
其实整个原理是很简单的:客户端封装一个SOAP请求通过http发送给服务端, 服务器根据收到的SOAP信息来确定由哪一个处理器(端点, EndPoint)来处理, 处理完后再封装一个SOAP信息返回给客户端.那么这里最核心的一个问题就是怎么通过收到的信息来确定由哪个EndPoint来处理, 最容易想到的就是通过SoapAction这个放在header中的参数来判定, 但是SOAP规范中SoapAction这个参数是可选的, 而且好像很多文章都不提倡选用这个参数. 在Spring-WS主要是根据收到的SOAP的Body中的xml的根元素的QName来判定的, 当然也提供了其它的如SoapAction,
Uri等方式.下面我们结合上面那个时序图来简要说明一下Spring-WS的整个流程, 不过在这之前我们还是来了解几个很重要的概念:
1, WebServiceMessage: 代表一个xml的消息
2, WebServiceConnection: 代表客户端向服务端发送一个WebServiceMessage的点到点的连接, 显然, 这个对象就应该包括两个动作:接收从客户端发来的消息和发送给客户端返回消息
3, MessageContext: 它由两个部分组成:
requeset和response, 它代表C/S的一组Q&A,
也就是说每一次请求都会新建这样一个对象来持有当前会话中的一组Q&A.
实际上, 在上面的流程图中所传递的对象(request)就是一个MessageContext对象, 直到endpoint处理这个对象, 才会将response注入到MessageContext中.
4, TransportContext: 协议上下文, 它持有一个WebServiceConnection,
可以通过TransportContextHolder拿到本地线程(ThreadLoacl)的TransportContext, 从而获得WebServiceConnection中的一些信息, 如http的HttpServletRequest.
下面我们对上图做个简要的分析:
1, 客户端发送一个SOAP请求到MessageDispatcherServlet, 如果是GET请求, 就委托给WsdlDefinitionHandlerAdapter对象将wsdl返回给客户(这一块以后再慢慢深究); 如果是POST请求, 则通过WebServiceMessageReceiverHandlerAdapter给当前的请求建立一个WebServiceConnection对象, 并将其封装在TransportContext中由TransportContextHolder放在本地线程(ThreadLoacl)中, 然后将请求交由MessageDispatcher这个事实上的处理器来处理.
2, MessageDispatcher拿到MessageContext对象, 首先根据用户的请求, 调用EndPointMapping的getEndPoint()方法来获得一个EndpointInvocationChain对象, 这个对象封装了一个EndPoint对象和一个拦截器EndpointInterceptor数组, 如果拦截器不为空则调用拦截器, 然后在Spring的上下文中寻找合适的EndPointAdapter来调用EndPoint对象, 注意: 这里的EndPoint对象可以是任何对象, 不需要实现任何接口, 你所要处理的信息会从EndPointAdapter这个接口中拿到(我想这是我看到的最实用的一个适配器模式的例子).
3, EndPointAdapter通过invoke(MessageContext
messageContext, Object endpoint)这个接口使得endpoint可以处理messageContext这个对象, 然后将response注入到 messageContext对象中, 最后由WebServiceConnection写入到返回的客户的流中.
在写这篇文章的时候, 我不断的想, 整个图一看就懂, 到底这样写出来有没有什么意义.整个文章的感觉给人像是在跑流水线, 时不时还冒出两个对象, 又有点像做源代码分析, 给人一种四不像的感觉. 不过我想, 还是乐观一点比较好, 也许是自己不善于表达, 还是一步一步慢慢走下去吧, 时间长了, 也许就习惯了!
还是听首歌吧: 林志炫<<时间的味道>>,
真的很有味道哦!
- 描述: Spring Web Service
- 大小: 12.2 KB
分享到:
相关推荐
【标题】"Spring Web Service 实战篇(1)" 指的是使用Spring框架构建Web服务的实际操作教程。在这个部分,我们将深入探讨如何利用Spring的强大功能来设计和实现基于Web的服务,以便于不同系统间的交互和数据共享。 ...
本篇文章将深入探讨CXF与Spring的结合,以及如何创建一个基于CXF和Spring的Web服务程序。 ### 1. CXF简介 CXF,全称CXF CXF,是 Continued eXtension Framework 的缩写,它的前身是XFire和Celtix两个项目。CXF不仅...
Spring是目前非常流行的Java应用框架,其提供了丰富的开发组件,WS(Web Service)是其中重要的组成部分。Web Service是一种基于Web的分布式计算技术,它使得不同应用程序能够通过Internet通信和交互。Spring对WS的...
这篇博客可能讨论的是如何将这三个技术——XFire、iBatis和Spring——集成在一起,构建一个Web服务应用程序。在这样的集成中,Spring可以管理整个应用的生命周期,包括XFire的Web服务和iBatis的数据访问层。通过...
【XFire】是一个高性能的Web Service框架,与Axis2...这个例子展示了如何从零开始创建一个简单的"HelloWorld"服务,这对于初学者来说是一个很好的起点,可以进一步深入学习和掌握Web Service和Spring框架的结合使用。
由于XFire与Spring框架的深度融合,使得开发者能够更加便利地在Spring环境中构建Web Service应用,这正是XFire在开源社区受到追捧的原因。 在XFire与Spring集成开发的过程中,主要分为以下几个步骤: 1. **配置web...
本篇文章将详细阐述如何使用XFire和Spring来构建一个Web Service的步骤。 首先,我们需要理解Web Service的基本概念。Web Service是一种基于互联网的、平台独立的交互方式,它允许不同系统之间通过XML进行数据交换...
内容概要:本文档提供了基于XFire和Spring框架集成来搭建Web Service的基本指南。具体包含了创建服务接口和服务实现类(Echo 和 EchoImpl),并在Spring的应用上下文中配置XFire Exporter进行Web服务发布以及相应的...
【Web Service实例详解——Spring+Hibernate+Web Service】 在当今的软件开发中,Web Service作为一项重要的技术,被广泛应用于不同系统之间的数据交互和集成。本实例将详细讲解如何使用Spring、Hibernate和Web ...
Web服务(Web Service)是一种基于互联网的、使用标准XML(Extensible Markup Language)进行通信的软件组件,允许不同系统间的应用程序进行交互。Spring框架是Java平台上的一个核心框架,它提供了一个全面的基础...
以下是关于"Xfire配置Web Service+Spring+Hibernate详细配置流程"的知识点详解: 1. **Spring框架**: Spring是Java企业级应用开发的首选框架,提供依赖注入(DI)和面向切面编程(AOP)。在Web服务场景中,Spring...
### Xfire配置Web Service+Spring+Hibernate详细流程 在IT领域,尤其是企业级应用开发中,集成Web Service、Spring框架以及Hibernate技术是非常常见的需求。本文将深入解析如何使用Xfire来配置并集成这三个核心技术...
总的来说,"Spring学习之路"资料包将带你走过Spring框架的基本知识,从Spring的核心原理到实战Spring MVC项目,是一条完整的自学路径。希望你在学习过程中不断积累,提升自己的Java Web开发能力。
XFire是Apache CXF项目的一部分,是一个轻量级的、高性能的Java Web Service框架,它简化了Web Service的开发流程,并且能够与Spring框架深度集成,提供了强大的服务装配和管理能力。 **实现功能与特点** 1. **...
Web服务是一种基于标准...总的来说,这个Java Web Service示例代码是一个很好的起点,它涵盖了服务端开发和客户端调用的基本流程。深入学习和实践,你将能够熟练地创建和使用各种Web服务,实现不同系统间的无缝集成。
在本篇文章中,我们将深入探讨如何使用 Spring-WS 实现 Web Service,并通过给出的标签“源码”和“工具”,理解其背后的开发流程和技术要点。 1. **契约优先**:Spring-WS 的核心理念是契约优先,这意味着在实现...