使用jws(java web service)构建soa-读书笔记(3)

来源:互联网 发布:ping软件下载 编辑:程序博客网 时间:2024/05/29 17:19

第三章 基于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。