0

骆驼场景:

  • 读取文件
  • 做一些事情,例如将内容存储在数据库中
  • 运行 activiti 进程并传递上一步的变量

路线构建器:

from("file:/home/work/Inbox")
.to("bean:sourceFileService?method=storeFile")
.to("activiti:Receive?copyVariablesFromProperties=true")

在调用 bean sourceFileService 属性“sourceFileId”期间设置。这个变量应该作为变量传递给进程接收。

如果我不使用 copyVariablesFromProperties,则不会在进程中设置任何变量。另一方面,当 copyVariablesFromProperties=true 然后骆驼尝试传递所有属性并发生异常时:

ActivitiException:找不到能够序列化 GenericFile 的变量类型

(因为属性之一是 object 表示读取文件,所以还有 7 个其他不需要的属性)

如何仅将选定的属性传递给 activiti 端点或骆驼任何下一个“到”?

4

2 回答 2

0

changesourceFileServicestoreFile方法签名如下;

public String storeFile(... your other params, @OutHeaders Map headers) {
       ...
       headers.put("sourceFileId", "32132132");
       ....
}

sourceFileId您可以访问activiti端点中的集合

于 2013-04-11T22:48:46.657 回答
0

我发现没有必要使用 copyVariablesFromProperties。同样是通过

.setBody().properties()
.to("activiti:Receive")

当在正文中时,使用该地图为 activiti 进程设置地图骆驼变量。但出于同样的原因,我仍然会遇到异常(传递不需要的、不可序列化的对象)。

我找到的唯一解决方案是

from("file:/home/work/Inbox")
.to("bean:sourceFileService?method=storeFile")
.setBody(method(Helper.class))
.to("activiti:Receive")

在哪里

public class Helper {
    @Handler
    public Map getProcessVariables(Exchange exchange) {
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("sourceFileId, exchange.getProperty("sourceFileId"));
        return variables;
    }
}
于 2013-04-12T08:02:45.390 回答