疯狂Activiti6.0连载(21)Activiti的Web Service
2017-11-29 21:29
543 查看
本文节选自《疯狂Workflow讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
目前支持REST风格Web Service的框架有很多,本书将以CXF、Restlet、HttpClinet为例子,讲述如何调用REST的Web
Service。Restlet是一个轻量级的REST框架,在Activiti5.0版本时使用该框架发布Web
Service,本小节将编写一个Restlet客户端,调用17.2.2章节发布的服务。
代码清单17-4:codes\17\restlet-client\src\org\crazyit\restlet\Client.java
ClientResource client = new ClientResource(
"http://localhost:8080/test-web/person/1");
//调用get方法,由于服务器发布的是GET
Representation response = client.get(MediaType.APPLICATION_JSON);
//创建JacksonRepresentation实例,将响应转换为Map
JacksonRepresentation jr = new JacksonRepresentation(response, HashMap.class);
//获取转换后的Map对象
Map result = (HashMap)jr.getObject();
//输出结果
System.out.println(result.get("name"));
在代码清单17-4中,根据发布的URI创建一个ClientResource的实例,然后调用get方法,服务端发布的是HTTP的GET方法,因此需要使用get,ClientResource还提供了delete、post等方法,以便可以调用其他HTTP方法,当前Restlet支持使用HTTP的GET、POST、DELETE和PUT方法。调用Web
Service后,返回Representation实例,最后通过JacksonRepresentation对象将其转换为Map,运行代码清单17-4后可看到输出结果。
CXF是目前一个较为流行的服务框架,是Apache下的一个开源项目。使用CXF可以发布和调用各种协议的服务,包括SOAP协议、XML/HTTP等,当前CXF已经对REST风格的Web
Service提供支持,可以发布REST的Web Service,也可以使用CXF的API来调用Web
Service。由于CXF可以与Spring进行整合使用并且配置简单,因此得到许多开发者的青睐,而笔者以往所在公司的大部分项目,均使用CXF来发布和调用Web
Service,本章所使用的CXF版本为3.1.10。
同样地,以17.2.2发布的Web Service为基础,编写CXF客户端请求该服务,如代码清单17-5所示。
代码清单17-5:codes\17\cxf-client\src\org\crazyit\activiti\CXFClient.java
//创建WebClient
WebClient client = WebClient
.create("http://localhost:8080/test-web/person/1");
//获取响应
Response response = client.get();
//获取响应内容
InputStream ent = (InputStream) response.getEntity();
String content = IOUtils.readStringFromStream(ent);
//输出字符串
System.out.println(content);
主要使用WebClient类访问Web Service,获取响应后再读取输入流获取响应的JSON字符串。
HttpClient是Apache提供的一个HTTP工具包,使用HttpClient可以通过编码的方式,发送HTTP请求来访问网络上的资源。REST风格的Web
Service完全基于HTTP协议,因此可以使用类似HttpClient这些工具来发送HTTP请求,调用REST的Web
Service。本书所使用的HttpClient版本为4.5.3。以17.2.2发布的Web
Service为基础,编写HttpClient请求该服务,如代码清单17-6所示。
代码清单17-6:codes\17\httpclient-test\src\org\crazyit\activiti\TestHttpClient.java
//创建默认的HttpClient
CloseableHttpClient httpclient = HttpClients.createDefault();
//调用
GET方法请求服务
HttpGet httpget = new HttpGet("http://localhost:8080/test-web/person/1");
//获取响应
HttpResponse response = httpclient.execute(httpget);
//根据 响应解析出字符串
System.out.println(EntityUtils.toString(response.getEntity()));
Activiti的Web Service以一个Web项目为载体,下载Activiti6.0版本后,可以在activiti-6.0.0\wars目录找到activiti-rest.war,将该war包复制到Tomcat的webapps\activiti-rest目录下并解压,就完成了Activiti的Web
Service部署。解压后文件结构如图17-4所示。
图17-4 文件结构
由于activit-rest默认情况下是连接h2数据库,本书的全部案例均使用MySQL数据库,因此还要修改activiti-rest下的配置文件。修改activiti-rest/WEB-INF/classes/db.properties文件,内容如代码清单17-7所示。
代码清单17-7:codes\17\activiti-rest\WEB-INF\classes\db.properties
# 默认配置
# jdbc.url=jdbc\:h2\:tcp\://localhost/activiti
# db=h2
# jdbc.username=sa
# jdbc.driver=org.h2.Driver
# jdbc.password=
# MySQL配置
jdbc.url=jdbc:mysql://localhost:3306/act
db=MySQL
jdbc.username=root
jdbc.driver=com.mysql.jdbc.Driver
jdbc.password=123456
配置文件db.properties主要用来配置Activiti的数据源属性,在默认情况下,activiti-rest中并没有MySQL的JDBC连接驱动,因此还要将MySQL驱动包放到activiti-rest/WEB-INF/lib目录下。完成这些操作后,就可以启动Tomcat,启动完成后,使用浏览器访问以下路径:http://localhost:8080/activiti-rest/service/management/properties,浏览器(笔者使用Chrome浏览器)提示“Authentication
is required”,由于几乎全部的Activiti Web Service都需要经过权限验证,以上的测试路径就是其中一个资源地址,看到权限验证的提示后,就证明已成功部署。
针对MySQL的activiti-rest,放在本书的代码目录中,路径为:codes\17\activiti-rest,读者可直接将该目录复制到tomcat的webapps下,注意需要修改数据库配置。
访问activiti-rest的接口,需要验证用户名与密码,用户名和密码保存在ACT_ID_USER表中,用户名为ID_字段,密码为PWD_字段。在访问接口时,activiti-rest模块,会调用IdentityService的checkPassword方法进行权限验证。
在前面章节,编写了三个客户端访问REST的服务,本章将使用CXF来访问Activiti的服务。由于接口需要权限验证,因此原来的访问代码要作部分修改。代码清单17-8为客户端代码。
代码清单17-8:codes\17\cxf-client\src\org\crazyit\activiti\FirstTest.java
//创建WebClient,设置URL、认证用户名和密码,注意用户名密码在ACT_ID_USER
表配置
WebClient client = WebClient.create(
"http://localhost:8080/activiti-rest/service/management/properties",
"crazyit", "123456", null);
//设置认证格式为基础认证格式
String authorizationHeader = "Basic "
+ org.apache.cxf.common.util.Base64Utility
.encode("user:password".getBytes());
client.header("Authorization", authorizationHeader);
//获取响应
Response response = client.get();
//获取响应内容
InputStream ent = (InputStream) response.getEntity();
String content = IOUtils.readStringFromStream(ent);
//输出字符串
System.out.println(content);
代码清单17-8中的粗体字代码,添加了认证信息,访问的是流程引擎配置接口,运行后可以看到输出的JSON字符串如下:
{"cfg.execution-related-entities-count":"false","next.dbid":"3801","schema.version":"6.0.0.4","schema.history":"create(5.10) upgrade(5.10->6.0.0.4)"}
接下来,笔者将以流程存储服务为例子,调用activiti-rest发布的接口。
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
Activiti的Web Service
使用Restlet编写客户端
目前支持REST风格Web Service的框架有很多,本书将以CXF、Restlet、HttpClinet为例子,讲述如何调用REST的WebService。Restlet是一个轻量级的REST框架,在Activiti5.0版本时使用该框架发布Web
Service,本小节将编写一个Restlet客户端,调用17.2.2章节发布的服务。
代码清单17-4:codes\17\restlet-client\src\org\crazyit\restlet\Client.java
ClientResource client = new ClientResource(
"http://localhost:8080/test-web/person/1");
//调用get方法,由于服务器发布的是GET
Representation response = client.get(MediaType.APPLICATION_JSON);
//创建JacksonRepresentation实例,将响应转换为Map
JacksonRepresentation jr = new JacksonRepresentation(response, HashMap.class);
//获取转换后的Map对象
Map result = (HashMap)jr.getObject();
//输出结果
System.out.println(result.get("name"));
在代码清单17-4中,根据发布的URI创建一个ClientResource的实例,然后调用get方法,服务端发布的是HTTP的GET方法,因此需要使用get,ClientResource还提供了delete、post等方法,以便可以调用其他HTTP方法,当前Restlet支持使用HTTP的GET、POST、DELETE和PUT方法。调用Web
Service后,返回Representation实例,最后通过JacksonRepresentation对象将其转换为Map,运行代码清单17-4后可看到输出结果。
使用CXF编写客户端
CXF是目前一个较为流行的服务框架,是Apache下的一个开源项目。使用CXF可以发布和调用各种协议的服务,包括SOAP协议、XML/HTTP等,当前CXF已经对REST风格的WebService提供支持,可以发布REST的Web Service,也可以使用CXF的API来调用Web
Service。由于CXF可以与Spring进行整合使用并且配置简单,因此得到许多开发者的青睐,而笔者以往所在公司的大部分项目,均使用CXF来发布和调用Web
Service,本章所使用的CXF版本为3.1.10。
同样地,以17.2.2发布的Web Service为基础,编写CXF客户端请求该服务,如代码清单17-5所示。
代码清单17-5:codes\17\cxf-client\src\org\crazyit\activiti\CXFClient.java
//创建WebClient
WebClient client = WebClient
.create("http://localhost:8080/test-web/person/1");
//获取响应
Response response = client.get();
//获取响应内容
InputStream ent = (InputStream) response.getEntity();
String content = IOUtils.readStringFromStream(ent);
//输出字符串
System.out.println(content);
主要使用WebClient类访问Web Service,获取响应后再读取输入流获取响应的JSON字符串。
使用HttpClient编写客户端
HttpClient是Apache提供的一个HTTP工具包,使用HttpClient可以通过编码的方式,发送HTTP请求来访问网络上的资源。REST风格的WebService完全基于HTTP协议,因此可以使用类似HttpClient这些工具来发送HTTP请求,调用REST的Web
Service。本书所使用的HttpClient版本为4.5.3。以17.2.2发布的Web
Service为基础,编写HttpClient请求该服务,如代码清单17-6所示。
代码清单17-6:codes\17\httpclient-test\src\org\crazyit\activiti\TestHttpClient.java
//创建默认的HttpClient
CloseableHttpClient httpclient = HttpClients.createDefault();
//调用
GET方法请求服务
HttpGet httpget = new HttpGet("http://localhost:8080/test-web/person/1");
//获取响应
HttpResponse response = httpclient.execute(httpget);
//根据 响应解析出字符串
System.out.println(EntityUtils.toString(response.getEntity()));
部署Activiti的Web Service
Activiti的Web Service以一个Web项目为载体,下载Activiti6.0版本后,可以在activiti-6.0.0\wars目录找到activiti-rest.war,将该war包复制到Tomcat的webapps\activiti-rest目录下并解压,就完成了Activiti的WebService部署。解压后文件结构如图17-4所示。
图17-4 文件结构
由于activit-rest默认情况下是连接h2数据库,本书的全部案例均使用MySQL数据库,因此还要修改activiti-rest下的配置文件。修改activiti-rest/WEB-INF/classes/db.properties文件,内容如代码清单17-7所示。
代码清单17-7:codes\17\activiti-rest\WEB-INF\classes\db.properties
# 默认配置
# jdbc.url=jdbc\:h2\:tcp\://localhost/activiti
# db=h2
# jdbc.username=sa
# jdbc.driver=org.h2.Driver
# jdbc.password=
# MySQL配置
jdbc.url=jdbc:mysql://localhost:3306/act
db=MySQL
jdbc.username=root
jdbc.driver=com.mysql.jdbc.Driver
jdbc.password=123456
配置文件db.properties主要用来配置Activiti的数据源属性,在默认情况下,activiti-rest中并没有MySQL的JDBC连接驱动,因此还要将MySQL驱动包放到activiti-rest/WEB-INF/lib目录下。完成这些操作后,就可以启动Tomcat,启动完成后,使用浏览器访问以下路径:http://localhost:8080/activiti-rest/service/management/properties,浏览器(笔者使用Chrome浏览器)提示“Authentication
is required”,由于几乎全部的Activiti Web Service都需要经过权限验证,以上的测试路径就是其中一个资源地址,看到权限验证的提示后,就证明已成功部署。
针对MySQL的activiti-rest,放在本书的代码目录中,路径为:codes\17\activiti-rest,读者可直接将该目录复制到tomcat的webapps下,注意需要修改数据库配置。
接口访问权限
访问activiti-rest的接口,需要验证用户名与密码,用户名和密码保存在ACT_ID_USER表中,用户名为ID_字段,密码为PWD_字段。在访问接口时,activiti-rest模块,会调用IdentityService的checkPassword方法进行权限验证。
访问Activiti接口
在前面章节,编写了三个客户端访问REST的服务,本章将使用CXF来访问Activiti的服务。由于接口需要权限验证,因此原来的访问代码要作部分修改。代码清单17-8为客户端代码。代码清单17-8:codes\17\cxf-client\src\org\crazyit\activiti\FirstTest.java
//创建WebClient,设置URL、认证用户名和密码,注意用户名密码在ACT_ID_USER
表配置
WebClient client = WebClient.create(
"http://localhost:8080/activiti-rest/service/management/properties",
"crazyit", "123456", null);
//设置认证格式为基础认证格式
String authorizationHeader = "Basic "
+ org.apache.cxf.common.util.Base64Utility
.encode("user:password".getBytes());
client.header("Authorization", authorizationHeader);
//获取响应
Response response = client.get();
//获取响应内容
InputStream ent = (InputStream) response.getEntity();
String content = IOUtils.readStringFromStream(ent);
//输出字符串
System.out.println(content);
代码清单17-8中的粗体字代码,添加了认证信息,访问的是流程引擎配置接口,运行后可以看到输出的JSON字符串如下:
{"cfg.execution-related-entities-count":"false","next.dbid":"3801","schema.version":"6.0.0.4","schema.history":"create(5.10) upgrade(5.10->6.0.0.4)"}
接下来,笔者将以流程存储服务为例子,调用activiti-rest发布的接口。
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.csdn.net/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.csdn.net/boxiong86/article/details/78608585
本书代码共享地址:https://gitee.com/yangenxiong/CrazyActiviti
相关文章推荐
- 疯狂Activiti6.0连载(21)Activiti的Web Service
- 疯狂Activiti6.0连载(22)流程存储Web Service
- 疯狂Activiti6.0连载(22)流程存储Web Service
- 疯狂Activiti6.0连载(11)Activiti6的流程控制逻辑
- 疯狂Activiti6.0连载(17) Drools规则语法概述
- 疯狂Activiti6.0连载(13)DMN的XML规范
- 疯狂Activiti6.0连载(17) Drools规则语法概述
- 疯狂Activiti6.0连载(18) Activiti与Drools整合
- 疯狂Activiti6.0连载(23)BPMN事件分类与事件定义
- 疯狂Activiti6.0连载(24)BPMN开始事件
- 疯狂Activiti6.0连载(1)Activiti介绍
- 疯狂Activiti6.0连载(14)Activiti运行第一个DMN应用
- 疯狂Activiti6.0连载(19)Activiti整合Spring
- 疯狂Activiti6.0连载(25)BPMN结束事件
- 疯狂Activiti6.0连载(2)下载和运行Activiti
- 疯狂Activiti6.0连载(28)BPMN补偿中间事件
- 疯狂Activiti6.0连载(9)——Activiti数据查询(二)
- 疯狂Activiti6.0连载(13)DMN的XML规范
- 疯狂Activiti6.0连载(23)BPMN事件分类与事件定义
- 疯狂Activiti6.0连载(28)BPMN补偿中间事件