如题 部分流程文件如下
<serviceTask id="service" name="服务" activiti:expression="${testService.print(name)}"></serviceTask>
问题描述:serviceTask 调用 testService的print方法; 其中testService为spring的一个bean
流程图如下
@Bean
public ProcessEngine processEngine(){
ProcessEngineConfiguration cfg =ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
ProcessEngine processEngine = cfg.buildProcessEngine();
DeploymentBuilder deployment = processEngine.getRepositoryService().createDeployment();
deployment.addClasspathResource("test1.bpmn20.xml");
Deployment deploy = deployment.deploy();
return processEngine;
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
@RestController
public class TestController {
@Autowired
private ProcessEngine processEngine;
@Autowired
private TestService testService;
@GetMapping("/test")
public void test(){
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String,Object> context=new HashMap<>();
context.put("name","Lucy");
//context.put("testService",testService);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("test", context);
System.out.println(processInstance.getId());
}
}
org.activiti.engine.ActivitiException: Could not execute service task expression
Caused by: org.activiti.engine.ActivitiException: Unknown property used in expression: ${testService.print(name)}
Caused by: javax.el.PropertyNotFoundException: Cannot resolve identifier 'testService'
testService放入流程的上下文context.put("testService",testService); 的注释,报以下异常(不能序列化)org.activiti.engine.ActivitiException: couldn't find a variable type that is able to serialize com.boco.mis.activiti.hello.TestService@216d848e
调整TestService的代码 实现Serializable,之后可以正常运行
@Service(value="testService")
public class TestService implements Serializable{
public void print(String name){
System.out.println("TestService1.print("+name+")");
}
}
但是,正式环境中testService会依赖其他类,依赖类也必须实现Serializable,才可以,而依赖类又会依赖其他类,所以此方案不可行
后续又对activiti:class 和activiti:delegateExpression 进行了测试 均没有达到预期效果
所有测试代码均在https://github.com/jiabiaoli/activiti-hello