Web Service调用过程
1.客户端把需要调用的参数,转换为XML文档片段(SOAP消息)
2.客户端通过网络把XML文档片段传给服务器
3.服务器端接受XML文档片段
4.服务器解析XML文档片段,提取其中的数据,并把数据转为调用所需要的参数
5.服务器执行方法
6.得到方法的返回值,服务器把方法的返回值,转为XML文档片段(SAOP消息)
7.服务器通过网络把XML文档片段传给客户端
8.客户端接受XML文档片段
9.客户端解析XML文档片段,提取其中的数据,并把数据转为调用返回值。
Web Service技术基础
1.WSDL
Web Service接口
(a) types
(b) 2N个message
(c) portType -- N个operation
Web Service实现
(a) binding元素 -- N个更详细的opertion
(b) service -- 服务器地址
2.SOAP
根元素:Envelope
header元素:
Header元素不是强制出现的,是可以有程序员控制添加的信息。主要用于携带一些额外的信息,如验证信息。
body元素:
(a).如果调用正确,body元素,这是WSDL的规范格式
(b).如果调用失败,这显示Fault元素
※SOAP的格式可以理解为与HTML格式比较类似。
服务器端添加拦截器(CXF框架):
1.获取Endpoing的publish方法的返回值(org.apache.cxf.jaxws.EndpoingImpl)。
2.调用该方法的返回值的getInInterceptor, getOutInterceptor方法来获取In,Out拦截器列表。
※自定义的拦截器需要实现Interceptor接口,实际上一般会继承AbstractPhaseInterceptor类。
客户端添加拦截器(CXF框架):
1.调用ClientProxy.getClient()的方法,该方法以远程Web Service问参数。返回值为Client对象。
2.client.getInInterceptors().add(),参数为拦截器对象。
3.client.getOutInterceptors().add(),参数为拦截器对象。
自定义拦截器:
1.继承AbstractPhaseInterceptor<SaopMessage>
※通过PhaseInterceptor可以指定拦截器在哪个阶段起作用。
2.实现方法handleMessage(SoapMessage msg)
※参数SoapMessage msg是SOAP消息对象。获取了SOAP消息,就可以对消息进行解析,修改。
3.实现无参数的构造器,显示调用父类的有参构造器,通过参数指定拦截器作用的阶段
※起作用的阶段字符串的定义在类Phase中。
1.客户端把需要调用的参数,转换为XML文档片段(SOAP消息)
2.客户端通过网络把XML文档片段传给服务器
3.服务器端接受XML文档片段
4.服务器解析XML文档片段,提取其中的数据,并把数据转为调用所需要的参数
5.服务器执行方法
6.得到方法的返回值,服务器把方法的返回值,转为XML文档片段(SAOP消息)
7.服务器通过网络把XML文档片段传给客户端
8.客户端接受XML文档片段
9.客户端解析XML文档片段,提取其中的数据,并把数据转为调用返回值。
Web Service技术基础
1.WSDL
Web Service接口
(a) types
(b) 2N个message
(c) portType -- N个operation
Web Service实现
(a) binding元素 -- N个更详细的opertion
(b) service -- 服务器地址
2.SOAP
根元素:Envelope
header元素:
Header元素不是强制出现的,是可以有程序员控制添加的信息。主要用于携带一些额外的信息,如验证信息。
body元素:
(a).如果调用正确,body元素,这是WSDL的规范格式
(b).如果调用失败,这显示Fault元素
※SOAP的格式可以理解为与HTML格式比较类似。
服务器端添加拦截器(CXF框架):
1.获取Endpoing的publish方法的返回值(org.apache.cxf.jaxws.EndpoingImpl)。
2.调用该方法的返回值的getInInterceptor, getOutInterceptor方法来获取In,Out拦截器列表。
※自定义的拦截器需要实现Interceptor接口,实际上一般会继承AbstractPhaseInterceptor类。
客户端添加拦截器(CXF框架):
1.调用ClientProxy.getClient()的方法,该方法以远程Web Service问参数。返回值为Client对象。
2.client.getInInterceptors().add(),参数为拦截器对象。
3.client.getOutInterceptors().add(),参数为拦截器对象。
自定义拦截器:
1.继承AbstractPhaseInterceptor<SaopMessage>
※通过PhaseInterceptor可以指定拦截器在哪个阶段起作用。
2.实现方法handleMessage(SoapMessage msg)
※参数SoapMessage msg是SOAP消息对象。获取了SOAP消息,就可以对消息进行解析,修改。
3.实现无参数的构造器,显示调用父类的有参构造器,通过参数指定拦截器作用的阶段
※起作用的阶段字符串的定义在类Phase中。