【发布时间】:2022-10-08 14:20:47
【问题描述】:
我正在实现一个 Java ExternalTaskHandler,来处理一个 Camunda 外部任务。作为任务的结果,我正在返回一个对象数组。不幸的是,当我返回这个数组时,我得到一个错误,即 Camunda 无法反序列化我的对象。
我的代码如下:
public class MyClass implements ExternalTaskHandler
{
public void execute(ExternalTask externalTask, ExternalTaskService externalTaskService)
{
// Construct the returned object
List<MyObject> myObjects = new ArrayList<MyObject>();
myObjects.add(new MyObject());
// Put it in the response
Map<String,Object> returnedObjects = new HashMap<String,Object>();
returnedObjects.put("myObjects", myObjects);
// Finish the task -- this is where the error occurs
externalTaskService.setVariables(externalTask, returnedObjects);
}
}
错误如下:
TASK/CLIENT-01009 Exception while completing the external task:
The corresponding process instance could not be resumed. Reason: status code: 500, reason phrase:
{"type":"ProcessEngineException","message":"Cannot deserialize object in variable 'returnedObjects': SPIN/JACKSON-JSON-01007 Cannot construct java type from string 'java.util.ArrayList<my.test.MyObject>'","code":0}
有趣的是,如果我用字符串列表替换 MyObject 的列表,比如说,代码可以工作。
我应该添加或配置什么以允许 Camunda 成功反序列化我的对象?
编辑:这是MyObject 的实现:
public class MyObject
{
private String name;
private List<String> values;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getValues() {
return values;
}
public void setValues(List<String> values) {
this.values = values;
}
}
【问题讨论】:
-
请添加
my.test.MyObject的代码 -
@MichaelKatt 它里面有一个 List<String> 。而已。当然有一个 getter 和 setter。
-
这是一个序列化或 camunda 知道你的班级的问题。因此,我要求您实施
my.test.MyObject。是否使用接口Serializable标记?场不是瞬态的吗?您是否使用自定义序列化?对于 Camunda:Camundo 知道你的班级吗?您是否将带有my.test.MyObject的 JAR 的依赖项添加到您的自定义 Camunda 部分? -
@MichaelKatt 感谢您的回复。我已经用代码编辑了这个问题。
标签: java serialization camunda