SOAP被设计为语言、传输,以及平台独立,它是老式中间件技术(如CORBA和DCOM)的替代技术。它也
被设计为可扩展。WS-*标准:WS-Addressing、WS-Policy、WS-Security以及等等都是建立在SOAP协议上。
使用SOAP、WSDL以及XML schema构建的web服务已经成为交换基于XML消息的标准。Spring Web-Services
推进了SOAP服务开发(通过提供一套完整的API和配置用于灵活的web服务创建)。
MessageDispatcher是Spring Web-Service的核心,它转发Web服务消息给注册的endpoint。在Spring-WS中,
请求/响应消息被包装在MessageContext对象中,该对象被传递给MessageDispatcher。当一个消息到来了,
MessageDispatcher使用request对象来得到endpoint,然后,得到endpoint的interceptors,并在它们上面调
用handleRequest方法。拦截器就是在调用endpoint的前(请求)后(响应)执行一些操作。之后,
MessageDispatcher得到相应的endpoint adapter。最后EndpointAdapter调用endpoint的方法,并将响应
转换成理想的格式并设置到MessageContext中。
Spring-WS只支持contract-first开发风格,也就是第一步是创建contract(XSD或WSDL)。
使用Spring-WS构建contract-first web服务的步骤如下:
1、契约的定义(XSD或WSDL)
2、创建endpoint:类(接收并处理到来的消息)
3、Spring beans和endpoint的配置
endpoints有两种:payload endpoints、message endpoints。
message endpoint能访问整个XML SOAP envelop
payload endpoint只访问一个SOAP envelop的payload部分,也就是一个SOAP envelop的body部分。
在以后的学习中,我们关注的是payload endpoints。
为了描述Web服务的创建过程,这里使用了简单的虚构的饭店作为业务场景,它需要接受来自客户的订单。
于是它决定发布它的OrderService组件为一个Web服务。为简单起见,只有两个操作:
String placeOrder(...)和boolean cancelOperator(...)
领域模型如下图:
后面的学习将逐渐地构建该项目的一小部分,直到完成整个项目。java项目名取为LiveRestaurant,
每个recipe带有_R-x.x后缀。例如,第1个recipe将使用LiveRestaurant_R-1.1和
LiveRestaurant_R-1.1-Client作为server和client的项目名。
本章的目标是构建一个web服务,因此,更多是强调解释服务端代码和配置。客户端代码只是用来
检验服务端的功能,客户端的更多知识将在后面的章节学习。