疯狂Activiti6.0连载(22)流程存储Web Service

来源:互联网 发布:夜神模拟器清理数据 编辑:程序博客网 时间:2024/06/05 12:42

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

流程存储Web Service

Activiti的所发布的WebService,主要是调用流程引擎的各个服务组件,操作流程相关数据,这些操作包括增加、查询、删除、数据修改和文件上传,从本小节开始,将讲解这部分WebService使用注意下,本章的全部例子均使用CXFAPI来编写请求客户端。

上传部署文件

Activiti发布了一个/deployment接口,调用该接口可以将流程相关的文件远程部署到流程引擎中,目前支持的格式有.bpmn.bpmn20.xml.bar.zip文件。部署activiti-rest后,这个接口的访问地址为http://localhost:8080/activiti-rest/service/deployment/deployment接口成功接收请求后,会调用RepositoryService().createDeployment()等一系列方法添加资源文件并且进行部署RepositoryService的使用详细请见流程存储章节代码清单17-9为客户端代码。

代码清单17-9codes\17\rs-client\src\org\crazyit\activiti\rest\TestDeployment.java

        //创建WebClient,设置URL、认证用户名和密码

        WebClient client = WebClient.create(

                "http://localhost:8080/activiti-rest/service/repository/deployments",

                "crazyit", "123456", null);

        //设置认证格式为基础认证格式

        String authorizationHeader = "Basic "

                + org.apache.cxf.common.util.Base64Utility

                        .encode("user:password".getBytes());

        client.header("Authorization", authorizationHeader);

        //设置内容类型

        client.type("multipart/form-data");

        //获取上传文件

        String path = TestDeployment.class.getResource("/").toString();

        File file = new File(new URI(path + "bpmn/DeploymentUpload.bpmn20.xml"));

        //一定需要name属性

        ContentDisposition cd = new ContentDisposition(

                "form-data; name=deployment; filename=DeploymentUpload.bpmn20.xml");

        Attachment att = new Attachment(null, new FileInputStream(file), cd);

        //获取响应,使用POS方法

        Response response = client.post(new MultipartBody(att));

        //获取响应内容

        InputStream ent = (InputStream) response.getEntity();

        String content = IOUtils.readStringFromStream(ent);

        //输出响应字符串

        System.out.println(content);

调用时需要注意,在构建ContentDisposition实例时,必须提供name属性,filename属性的文件名称后缀必须为.bpmn.bpmn20.xml.bar.zip,否则接口会返回:“File must be of type .bpmn20.xml, .bpmn, .bar or .zip”这样的异常信息。成功调用接口后,返回以下JSON

{

    "id": "3801",

    "name": "DeploymentUpload.bpmn20.xml",

    "deploymentTime": "2017-07-23T07:34:24.496+08:00",

    "category": null,

    "url": "http://localhost:8080/activiti-rest/service/repository/deployments/3801",

    "tenantId": ""

}

部署数据查询

使用部署数据查询接口,可以分页查询多个部署数据,接口调用的地址为:repository/deployments,地址后可接多个参数,代码清单17-10为接口调用代码。

代码清单17-10codes\17\rs-client\src\org\crazyit\activiti\rest\TestDeployments.java

        //创建WebClient,设置URL、认证用户名和密码

        WebClient client = WebClient

                .create("http://localhost:8080/activiti-rest/service/"

                        + "repository/deployments?sort=name&nameLike=%processes",

                        "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-10中的粗体字代码,加入了sort参数进行按name字段进行排序,使用nameLike参数进行名称的模糊查询,在使用模糊查询时,注意需要传入通配符。调用接口后返回以下JSON字符串:

{

    "data": [

        {

            "id": "1320",

            "name": "Demo processes",

            "deploymentTime": "2017-07-22T08:36:48.793+08:00",

            "category": null,

            "url": "http://localhost:8080/activiti-rest/service/repository/deployments/1320",

            "tenantId": ""

        }

    ],

    "total": 1,

    "start": 0,

    "sort": "name",

    "order": "asc",

    "size": 1

}

部署资源查询

部署过程可以部署多个资源文件,查询这些资源可以使用repository/deployments/{deploymentId }/resources接口,传入部署数据的ID代码清单17-15为测试代码。

代码清单17-11codes\17\rs-client\src\org\crazyit\activiti\rest\QueryResources.java

        //创建WebClient,设置URL、认证用户名和密码

        WebClient client =WebClient

                .create("http://localhost:8080/activiti-rest/service/"

                        + "repository/deployments/1001/resources",

                        "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);

调用接口成功后,返回以下JSON

[

    {

        "id": "bpmn/TaskExternalForm.bpmn",

        "url": "http://localhost:8080/activiti-rest/service/repository/deployments/1001/resources/bpmn/TaskExternalForm.bpmn",

        "contentUrl": "http://localhost:8080/activiti-rest/service/repository/deployments/1001/resourcedata/bpmn/TaskExternalForm.bpmn",

        "mediaType": "text/xml",

        "type": "processDefinition"

    },

    {

        "id": "forms/TaskExternalForm.form",

        "url": "http://localhost:8080/activiti-rest/service/repository/deployments/1001/resources/forms/TaskExternalForm.form",

        "contentUrl": "http://localhost:8080/activiti-rest/service/repository/deployments/1001/resourcedata/forms/TaskExternalForm.form",

        "mediaType": null,

        "type": "resource"

    }

]

 

查询单个部署资源

查询单个部署资源,使用repository/deployments/{deploymentId}/resources/{resourceId}接口,调用时要传入部署数据的id以及资源id,注意资源id并不是资源表的ID_字段,而是由“部署资源查询”接口返回的id,对应的是数据库中的NAME_字段,代码清单17-12调用该接口。

代码清单17-12codes\17\rs-client\src\org\crazyit\activiti\rest\QueryResource.java

        //创建WebClient,设置URL、认证用户名和密码

        WebClient client = WebClient

                .create("http://localhost:8080/activiti-rest/service/"

                        + "repository/deployments/1001/resources/bpmn/TaskExternalForm.bpmn",

                        "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);

调用接口后,返回的JSON如下:

{

    "id": "bpmn/TaskExternalForm.bpmn",

    "url": "http://localhost:8080/activiti-rest/service/repository/deployments/1001/resources/bpmn/TaskExternalForm.bpmn",

    "contentUrl": "http://localhost:8080/activiti-rest/service/repository/deployments/1001/resourcedata/bpmn/TaskExternalForm.bpmn",

    "mediaType": "text/xml",

    "type": "processDefinition"

}

删除部署

上传部署文件的方法,使用的是HTTPPOST方法,而前面的几个部署数据查询方法,使用的则是GET方法,删除部署,需要使用DELETE方法。删除部署的URLrepository/deployments/{deploymentId }调用该接口后,如果删除成功并不会返回结果如果删除失败,则会返回异常信息代码清单17-13为测试代码

代码清单17-13codes\17\rs-client\src\org\crazyit\activiti\rest\DeleteDeployment.java

        //创建WebClient,设置URL、认证用户名和密码

        WebClient client = WebClient

                .create("http://localhost:8080/activiti-rest/service/"

                        + "repository/deployments/3807",

                        "crazyit", "123456", null);

        //设置认证格式为基础认证格式

        String authorizationHeader = "Basic "

                + org.apache.cxf.common.util.Base64Utility

                        .encode("user:password".getBytes());

        client.header("Authorization", authorizationHeader);

        //获取响应

        Response response = client.delete();

        //获取响应内容

        InputStream ent = (InputStream) response.getEntity();

        String content = IOUtils.readStringFromStream(ent);

        //输出字符串(本例并不会有响应内容)

        System.out.println(content);

在使用删除部署接口时,需要注意以下细节:

     成功删除后,不会返回JSON数据。

     如果被删除的部署数据id不存在,接口则会接收到异常信息:Could not find a deployment with id

     如果被删除的部署已经产生的外键关联(例如启动了流程实例),同样会删除失败。

除了流程存储模块发布的接口,其他模块也提供了大量操作流程引擎的接口,所谓一通百通,其他接口的调用,在此不再赘述。

京东购买地址: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

原创粉丝点击