REST服务任务

时间:2015-10-21 14:47:35

标签: java activiti camunda

我正在关注一个例子REST Service Task

我使用

启动流程引擎
val configuration = new StandaloneProcessEngineConfiguration(); configuration.setProcessEngineName(processEngineName)

这是我的bpmn文件片段

<process id="approve-loan" name="Loan Approval" isExecutable="true">
<serviceTask id="process_task" activiti:class="com.noggin.bpm.loan.ProcessRequestDelegate" activiti:exclusive="true" name="compute&#xA;Task">
  <extensionElements>
    <activiti:connector>
      <activiti:connectorId>http-connector</activiti:connectorId>
      <activiti:inputOutput>
        <activiti:inputParameter name="url">http://127.0.0.1:5004/Hello/sayhello</activiti:inputParameter>
        <activiti:inputParameter name="method">POST</activiti:inputParameter>
        <activiti:inputParameter name="headers">
          <activiti:map>
            <activiti:entry key="Accept">application/json</activiti:entry>
            <activiti:entry key="Content-type">application/json</activiti:entry>
          </activiti:map>
        </activiti:inputParameter>
        <activiti:inputParameter name="payload"><![CDATA[{"bundleId":"101","script":"def greet = {\n        \"Hello World\"\n      }\n      greet()"}]]></activiti:inputParameter>
        <activiti:outputParameter name="isActive">Result</activiti:outputParameter>
      </activiti:inputOutput>
    </activiti:connector>
  </extensionElements>

我开始这样的过程

    val processEngine   =  ProcessEngines.getProcessEngine(processEngineName)
    val runtime         =  processEngine.getRuntimeService
    val processInstance =  runtime.startProcessInstanceByKey(processInstanceKey)

成功地,我能够将有效载荷发送到(http://127.0.0.1:5004/Hello/sayhello)。

我的问题是如何从我启动实例的位置检索响应消息。由于响应将在Json消息中,应该将其发送回进程启动器。

1 个答案:

答案 0 :(得分:1)

我相信我昨天在Camunda论坛上看到了一个类似的问题。 无论哪种方式,我相信问题和答案是一样的。

让我确保理解你的要求。 1.您正在使用Java API启动实例 2.您的流程定义包括一个进行REST调用的服务任务。 3.您的JavaDelegate类使用REST调用的响应填充“Result”流程变量。 4.您想要捕获响应。

如果我已经捕获了您的要求,那么我认为问题在于您对BPMN引擎如何工作的理解。

使用您建模的流程,流程实例将启动,进行REST调用,填充Response变量,然后立即结束。

由于您当前已对流程建模,因此您无法在流程执行期间捕获响应。

您的选择: 1.将模型更改为使用某种消息服务发送“结果”,或添加等待状态以便检索响应。 2.使用历史查询REST API(或等效的Java API)从已完成的实例中检索Result有效内容。

这实际上取决于您使用的最合适的选项。

干杯, 格雷格