Activiti框架:resultVariableName行为异常

问题描述

我刚刚开始使用activiti框架。我在Spring Boot应用程序中添加了依赖项,并希望 测试非常简单的顺序流,但是我陷入了奇怪的行为。

所以,我有2个简单的服务,没有任何业务逻辑。

@Service
public class Service1{

    public void m(String id) {
        log.info("Service1 Id {}",id);
    }
} 



@Service
public class Service2{

    public void m(String id) {
        log.info("Service2 Id {}",id);
    }
}

具有流程定义的xml文件

    <startEvent id="startEvent" name="Start"></startEvent>

    <serviceTask id="service1Task" name="service1"
                 activiti:expression="${service1.m(id)}"
                 activiti:resultvariableName="id">
    </serviceTask>

    <serviceTask id="service2Task" name="service2"
                 activiti:expression="${service2.m(id)}">
    </serviceTask>

    <endEvent id="endEvent" name="End"></endEvent>

    <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="service1Task"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="service1Task" targetRef="service2Task"></sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="service2Task" targetRef="endEvent"></sequenceFlow>

然后我放了一些控制器:

  Map<String,Object> variables = new HashMap<>();
   val id = UUID.randomUUID().toString();
   variables.put("id",id);

问题是:对于service1,它打印id,但对于service2,它丢失id。在调试器模式下,由于某种原因,service2中的参数id为空字符串。我不明白为什么...

解决方法

答案是无需在任何地方指示resultVariableName。无论如何,定义的变量仍然可用。