Camunda Внешняя задача HashMap Дезериализация - PullRequest
0 голосов
/ 05 июля 2018

Я работаю с внешними задачами Camunda, реализую свой собственный обработчик из ExternalTaskHandler, но когда я хочу получить переменную, подобную этой:

HashMap map = externalTask.getVariable("PROCVARS");

Я получил ошибку:

org.camunda.bpm.client.exception.ValueMapperException: TASK/CLIENT-01024 Cannot find serializer for value 'rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAAFdAAabmF0dXJhbF9wYXRlcm5hbF9sYXN0X25hbWV0AARNb3JhdAAPcGVyc29uX2xlZ2FsX2lkdAAFMTIzNDV0AApyZXF1ZXN0X2lkdAABNXQAEm5hdHVyYWxfZmlyc3RfbmFtZXQACUNocmlzdGlhbnQAEXBlcnNvbl9sZWdhbF90eXBldAABQ3g='
at org.camunda.bpm.client.impl.ExternalTaskClientLogger.valueMapperExceptionDueToSerializerNotFoundForTypedValueField(ExternalTaskClientLogger.java:183) ~[?:?]
at org.camunda.bpm.client.variable.impl.DefaultValueMappers.findMapperForTypedValueField(DefaultValueMappers.java:78) ~[?:?]
at org.camunda.bpm.client.variable.impl.VariableValue.getSerializer(VariableValue.java:73) ~[?:?]
at org.camunda.bpm.client.variable.impl.VariableValue.getTypedValue(VariableValue.java:58) ~[?:?]
at org.camunda.bpm.client.task.impl.ExternalTaskImpl.getVariableTyped(ExternalTaskImpl.java:271) ~[?:?]
at org.camunda.bpm.client.task.impl.ExternalTaskImpl.getVariableTyped(ExternalTaskImpl.java:260) ~[?:?]
at com.fisa.bpm.handler.ScheduleHandler.convertTo(ScheduleHandler.java:40) ~[?:?]
at com.fisa.bpm.handler.ScheduleHandler.execute(ScheduleHandler.java:26) ~[?:?]
at org.camunda.bpm.client.topic.impl.TopicSubscriptionManager.handleExternalTask(TopicSubscriptionManager.java:143) ~[?:?]
at org.camunda.bpm.client.topic.impl.TopicSubscriptionManager.lambda$acquire$0(TopicSubscriptionManager.java:102) ~[?:?]
at java.util.Arrays$ArrayList.forEach(Arrays.java:3880) ~[?:?]

Объект был создан в потоке bpmn со скриптом javascript:

var HashMap = Java.type("java.util.HashMap");
var vars = new HashMap();
vars.put("request_id",request_id);
vars.put("person_legal_type","C");
vars.put("person_legal_id","12345");
vars.put("natural_paternal_last_name","Mora");
vars.put("natural_first_name","Christian");

execution.setVariable('PROCVARS', vars);

Если я проверяю объект в кабине Камунды, я вижу это:

Value of PROCVARS - It is a Map

Поток Camunda BPMN таков:

Camunda BPMN

Кто-нибудь знает, как десериализовать в реализации внешней задачи такого рода объекты?

ОБНОВЛЕНО

У меня работает, меняя в задаче скрипта объект на JSON формат :

var vars = {};
vars.request_id = request_id;
vars.person_legal_type = "C";
vars.person_legal_id = "12345";
vars.natural_paternal_last_name = "Mora";
vars.natural_first_name = "Christian";

var proc = JSON.stringify(vars);
execution.setVariable('PROCVARS', proc); 
...