2015-10-05 233 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

相關問題