Groovy 发送POST Rest接口请求
引入依赖
<!--Spring boot 集成camunda-->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter</artifactId>
<version>7.15.0</version>
</dependency>
<!--camunda Rest 接口-->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
<version>7.15.0</version>
</dependency>
<!--camunda webapp 页面操作流程-->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
<version>7.15.0</version>
</dependency>
<!--外部任务客户端-->
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-external-task-client</artifactId>
<version>7.15.0</version>
</dependency>
<!--连接器-->
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-plugin-connect</artifactId>
<version>7.15.0</version>
</dependency>
<!--Spin和Json Rest Http中解析; parse http response variable with camunda-spin-->
<dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-plugin-spin</artifactId>
<version>7.15.0</version>
</dependency>
<dependency>
<groupId>org.camunda.spin</groupId>
<artifactId>camunda-spin-dataformat-json-jackson</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.camunda.spin</groupId>
<artifactId>camunda-spin-core</artifactId>
<version>1.10.1</version>
</dependency>
<dependency>
<groupId>org.camunda.spin</groupId>
<artifactId>camunda-spin-dataformat-all</artifactId>
<version>1.10.1</version>
</dependency>
<!--执行groovy脚本-->
<!--org.camunda.bpm.engine.exception.NullValueException: Can't find scripting engine for 'groovy': scriptEngine is null-->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.21</version>
</dependency>
<!--groovy发送Http请求,底层是对HTTPClient封装 HttpBuilder-->
<dependency>
<groupId>org.codehaus.groovy.modules.http-builder</groupId>
<artifactId>http-builder</artifactId>
<version>0.7.1</version>
</dependency>
1、脚本发送POST请求
Groovy脚本 发送POST请求
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.ContentType
import groovyx.net.http.Method
import groovyx.net.http.RESTClient
import groovyx.net.http.HttpResponseDecorator
def http = new HTTPBuilder('http://localhost:8010')
http.request(Method.POST ,ContentType.TEXT) {
//请求URL路径信息
uri.path='/conn/two'
//请求参数信息 [id:'666',name:'jake']
uri.query=[id:'1']
//设置请求头信息
headers.'User-Agent' = 'Mozill/5.0'
//设置成功响应的处理闭包
//resp 数据类型:groovyx.net.http.HttpResponseDecorator;reader 数据类型:java.io.InputStreamReader
response.success= {resp,reader->
println resp.status
println resp.statusLine.statusCode
println resp.headers.'content-length'
println resp
println reader
System.out << reader
}
//根据响应状态码分别指定处理闭包
response.'404' = { println 'not found' }
//未根据响应码指定的失败处理闭包
response.failure = { println "Unexpected failure: ${resp.statusLine}" }
}
开启流程
/**
* 发送Post请求
*/
@Test
public void httpPost(){
String processKey="GroovyHttp1";
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey);
log.info("流程开启:{}",processInstance.getId());
}
案例Rest接口
@RestController
@RequestMapping("/conn")
@Slf4j
public class ConnectionController {
@PostMapping("/two")
public String connTest2(String id){
log.info("{流程实例ID:{}}",id);
return "post-two";
}
groovy 脚本一些笔记
1、嵌套的Groovy 脚本不需要 <![CDATA[ ]]> 包裹;
2、脚本中打印 println "Sum: " + sum 用于调试脚本;
3、脚本中设置流程变量:execution.setVariable("sum", sum); 或者 脚本返回值作为变量,脚本最后1行默认是脚本返回值;
4、脚本中可以直接使用流程中的变量 inputArray;
5、Groovy 脚本可调用远程Http请求地址;
6、Groovy脚本中 def 定义的变量,自动写入到流程变量中;def pid=execution.getProcessInstanceId()
2、groovy 案例2
2.1、流程和groovy脚本
def pid=execution.getProcessInstanceId()
sum = 0
for ( i in inputArray ) {
sum += i
}
println "Sum: " + sum
execution.setVariable("sum", sum);
sum
2.2、流程开启设置变量
/**
* 简单执行Groovy脚本
*/
@Test
public void simpleTest(){
String processKey="groovy1";
Map<String,Object> variables=new HashMap<>();
variables.put("inputArray",new Integer[]{2,3,5});
//流程启动时,向连接器传递变量
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey,variables);
log.info("流程开启:{}",processInstance.getId());
}
在脚本的执行过程中,所有在当前范围内可见的流程变量都是可用的。
可以通过变量的名称直接访问(例如,sum)。
但JRuby不同,你必须把变量当做ruby全局变量来访问(在前面加一个美元符号,即$sum)
还有一些特殊的变量,在脚本中可以直接使用
执行监听器(脚本任务):execution
DelegateExecution
类型
任务监听器:task
DelegateTask
类型
脚本在连接器的变量范围内执行:connector
ConnectorVariableScope
类型
流程信号事件上可以获取流程信息:
Signal_EndReport-${execution.processBusinessKey}
脚本中访问流程引擎服务
// 获取流程变量
sum = execution.getVariable('x')
// 设置流程变量
execution.setVariable('y', x + 15)
// 获取 task service 查询 task
task = execution.getProcessEngineServices().getTaskService()
.createTaskQuery()
.taskDefinitionKey("task")
.singleResult()
// 脚本中访问流程引擎服务
execution.getProcessEngineServices().getRuntimeService().createMessageCorrelation("work").correlateWithResult();