2015-10-05 235 views
0

我创建了一个BPMN协作模型,其中包含一个类型为Javascript的脚本任务。然后,我实例化一个流程实例与过程变量,像这样:在Javascript中修改ArrayList导致Camunda中的序列化失败

Variable name: arr 
Object type name: java.util.ArrayList 
Serialization Data Format: application/x-java-serialized-object 
Value: [{ "id": 10 }] 

然后我通过下面的代码脚本任务:

var arr = execution.getVariable("arr"); 
execution.setVariable("arr2", arr); 

它成功运行。然后我修改脚本任务是这样的:

var arr = execution.getVariable("arr"); 
arr.add({ "id" : 2 }); 
execution.setVariable("arr2", arr); 

并重新部署,重新实例化;并惊讶它导致了一个错误:

Cannot submit task form xxx: Cannot serialize object in variable 'arr': jdk.nashorn.internal.scripts.JO4

有人可以告诉我,我做错了什么?

[更新]

我只是发现一些新的东西,如果我修改的ArrayList是这样的:

var arr = execution.getVariable("arr"); 
arr.add(2); 
execution.setVariable("arr2", arr); 

它工作得很好!而修改后的值是:

[{ "id": 10 }, 2] 

这意味着setVariable有问题序列化修改后的列表。那么我应该如何序列化它呢?

回答

2

基本上这与here所述的问题相同。我们在这里处理的是一个对象,显然Nashorn内部表示为类jdk.nashorn.internal.scripts.JO4的一个实例,并且流程引擎无法序列化该对象(JDK> = 8u40,JO4实例是在调用Java方法时包装在ScriptObjectMirror实例中,但问题相同)。

要创建一个Java类的实例,你可以使用下面的代码:

var HashMap = Java.type("java.util.HashMap"); 
var instance = new HashMap(); 
instance.id = 2; 
arr.add(instance); 
execution.setVariable("arr2", arr); 

来源:Nashorn documentation

+0

我不知道,如果存在一个或没有,但我认为一个文档解释这些将会非常有帮助。谢谢。 – Mehran

相关问题