Изменение ArrayList в Javascript приводит к сбою сериализации в Camunda

Я создал модель сотрудничества BPMN со скриптовой задачей типа Javascript. Затем я создал экземпляр процесса с такой переменной процесса:

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);

И повторно развернутый, повторно инстанцированный; и, к моему удивлению, это привело к ошибке:

Невозможно отправить форму задачи xxx: невозможно сериализовать объект в переменной 'arr': jdk.nashorn.internal.scripts.JO4

Кто-нибудь может сказать мне, что я делаю не так?

[ОБНОВЛЕНИЕ]

Я только что нашел что-то новое, если я изменю ArrayList следующим образом:

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

Работает отлично! И измененное значение:

[{ "id": 10 }, 2]

Это означает, что у setVariable есть проблема с сериализацией измененного списка. Итак, как мне его сериализовать?


person Mehran    schedule 05.10.2015    source источник


Ответы (1)


В основном это та же проблема, что описана здесь. Вместо массива, созданного в Javascript, здесь мы имеем дело с объектом, который, по-видимому, Nashorn внутренне представляет как экземпляр класса jdk.nashorn.internal.scripts.JO4, и механизм процесса не может его сериализовать (с JDK> = 8u40 экземпляр JO4 завернутый в экземпляр ScriptObjectMirror при вызове метода Java, но проблема та же).

Чтобы создать экземпляр класса Java, вы можете использовать следующий код:

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

Источник: документация Nashorn

person thorben    schedule 06.10.2015
comment
Я не уверен, существует он или нет, но я думаю, что документация, объясняющая это, была бы действительно полезной. Спасибо. - person Mehran; 06.10.2015