疯狂Activiti6.0连载(21)Activiti的Web Service

来源:互联网 发布:广州数控车床编程入门 编辑:程序博客网 时间:2024/05/22 04:37

 本文节选自《疯狂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

ActivitiWeb Service

使用Restlet编写客户端

目前支持REST风格Web Service的框架有很多,本书将以CXFRestletHttpClinet为例子,讲述如何调用RESTWeb ServiceRestlet是一个轻量级的REST框架,Activiti5.0版本时使用该框架发布Web Service,本小节将编写一个Restlet客户端,调用17.2.2章节发布的服务。

代码清单17-4codes\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方法,服务端发布的是HTTPGET方法,因此需要使用getClientResource还提供了deletepost等方法,以便可以调用其他HTTP方法,当前Restlet支持使用HTTPGETPOSTDELETEPUT方法。调用Web Service后,返回Representation实例,最后通过JacksonRepresentation对象将其转换为Map,运行代码清单17-4后可看到输出结果。

使用CXF编写客户端

CXF是目前一个较为流行的服务框架,是Apache下的一个开源项目。使用CXF可以发布和调用各种协议的服务,包括SOAP协议、XML/HTTP等,当前CXF已经对REST风格的Web Service提供支持,可以发布RESTWeb Service,也可以使用CXFAPI来调用Web Service。由于CXF可以与Spring进行整合使用并且配置简单,因此得到许多开发者的青睐,而笔者以往所在公司的大部分项目,均使用CXF来发布和调用Web Service,本章所使用的CXF版本为3.1.10

同样地,以17.2.2发布的Web Service为基础,编写CXF客户端请求该服务,如代码清单17-5所示。

代码清单17-5codes\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编写客户端

HttpClientApache提供的一个HTTP工具包,使用HttpClient可以通过编码的方式,发送HTTP请求来访问网络上的资源。REST风格的Web Service完全基于HTTP协议,因此可以使用类似HttpClient这些工具来发送HTTP请求,调用RESTWeb Service。本书所使用的HttpClient版本为4.5.317.2.2发布的Web Service为基础,编写HttpClient请求该服务,如代码清单17-6所示。

代码清单17-6codes\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()));

部署ActivitiWeb Service

ActivitiWeb Service以一个Web项目为载体,下载Activiti6.0版本后,可以在activiti-6.0.0\wars目录找到activiti-rest.war,将该war包复制到Tomcatwebapps\activiti-rest目录下并解压,就完成了ActivitiWeb Service部署。解压后文件结构如图17-4所示。


图17-4 文件结构

由于activit-rest默认情况下是连接h2数据库,本书的全部案例均使用MySQL数据库,因此还要修改activiti-rest下的配置文件。修改activiti-rest/WEB-INF/classes/db.properties文件,内容如代码清单17-7所示。

代码清单17-7codes\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中并没有MySQLJDBC连接驱动,因此还要将MySQL驱动包放到activiti-rest/WEB-INF/lib目录下。完成这些操作后,就可以启动Tomcat,启动完成后,使用浏览器访问以下路径:http://localhost:8080/activiti-rest/service/management/properties,浏览器(笔者使用Chrome浏览器)提示“Authentication is required”,由于几乎全部的Activiti Web Service都需要经过权限验证,以上的测试路径就是其中一个资源地址,看到权限验证的提示后,就证明已成功部署。

针对MySQLactiviti-rest,放在本书的代码目录中,路径为:codes\17\activiti-rest,读者可直接将该目录复制到tomcatwebapps,注意需要修改数据库配置

接口访问权限

访问activiti-rest的接口,需要验证用户名与密码,用户名和密码保存在ACT_ID_USER表中,用户名为ID_字段,密码为PWD_字段。在访问接口时,activiti-rest模块,会调用IdentityServicecheckPassword方法进行权限验证。

访问Activiti接口

在前面章节,编写了三个客户端访问REST的服务,本章将使用CXF来访问Activiti的服务。由于接口需要权限验证,因此原来的访问代码要作部分修改。代码清单17-8为客户端代码。

代码清单17-8codes\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

阅读全文
0 0
原创粉丝点击