第三章 基于REST的soa基础
一.客户端
(一).采用非jws方式(没有使用java web serviceapi),调用rest风格服务获取数据
1.客户端创建URL实例(包括请求地址和请求参数),使用URL.openConnection()方法创建一个HttpURLConnection连接
2.客户端通过HttpURLConnection.connect()向服务器发送GET请求
3.服务处理客户端的请求,将xml写入response
4.客户端通过HttpURLConnection的inputStream来获取response的xml
(二).采用jws方式,调用REST风格的服务获取数据
1.客户端通过javax.xml.ws.Service类的addPort()方法,创建一个端口
2.客户端通过Service.createDispatch()方法创建Dispatch<javax.xml.transform.Source>类的一个实例
3.再用Dispatch.invoke()对xml请求进行封装,并将它发送到REST风格服务
4.服务处理客户端请求,将xml写入response
5.invoke()方法将响应消息作为Source实例返回
(三).采用非jws方式,调用rest风格服务提交数据
1.客户端创建URL实例,创建HttpURLConnection连接,给链接设置一个参数:SourceSystem=xxx(指定数据来源于哪个客户端系统)
2.客户端通过HttpURLConnection.connect()向服务器发送POST请求
3.客户端将xml写入请求
4.服务器接收请求,处理请求后,返回一个响应状态码"200"(200成功,500失败)
5.客户端通过connection.getResponseCode()获取响应状态码
(四).采用jws方式,调用REST风格的服务提交数据
1.客户端通过javax.xml.ws.Service类的addPort()方法,创建一个端口
2.客户端通过Service.createDispatch()方法创建Dispatch<javax.xml.transform.Source>类的一个实例
3.客户端将xml封装在一个javax.xml.transform.stream.StreamSource对象实例中
4.再用Dispatch.invoke()将xml请求包装到POST请求中,并将它发送到REST风格服务
5.服务处理客户端请求,并返回响应状态码
6.客户端采用Dispatch.getResponseContext()来获取响应的Http上下文
7.Http上下文用Map来表示,通过该map可以得到响应状态码
(五).用xslt和jaxp对不同格式xml进行数据转换
需要先恶补下xml命名空间、xslt和xpath语法
xslt定义xml转换规则,再用jaxp的javax.xml.transform.Transformer类执行xml转换
jaxp是xml处理java api高层的抽象,类似于jpa是持久化api高层抽象
构建SOA应用的很大部分工作是xslt转换xml
二.服务端
(一).用非jws方式部署服务端
1.采用servlet开发,用doPost()处理post请求。
(二).用jws方式部署服务端
1.服务端需要实现javax.xml.ws.Provider接口,并设置为WebServiceProvider、配置(BindingType=HTTPBinding.HTTP_BINDING)
2.框架调用Provider接口实现类的invoke(),通过invoke()调用具体服务实现类
这种方式只能接收客户端的post/get请求。更早期版本只支持post请求。
这里仅仅是采用jws来部署服务,没有采用jaxb来序列化和反序列化java。因此两种实现方式都需要自己处理xml。