我正在使用 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);
如果我检查 Camunda Cockpit 上的对象,我会看到:
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);