How to serialize Task to json

Hi,
i have a case that i talk to shared engine via java-api and want to convert tasks to json objects to be sent to other module.

i’m using spin to map java Task object to json object but it always fail and throw that exception:
org.camunda.spin.json.SpinJsonDataFormatException: SPIN/JACKSON-JSON-01009 Unable to map object ‘Task[2dc70c1b-9eec-11e8-b7f3-90489a726c19]’ to json node

so what is going wrong?

here is a snippet of my code
List tasks = taskService.createTaskQuery().initializeFormKeys().list();
try {
SpinJsonNode json = JSON(tasks.get(0));
System.out.println(json.toString());
} catch (Exception e) {
e.printStackTrace();
}

and here is a part of stack trace:
org.camunda.spin.json.SpinJsonDataFormatException: SPIN/JACKSON-JSON-01009 Unable to map object ‘Task[2dc70c1b-9eec-11e8-b7f3-90489a726c19]’ to json node
at org.camunda.spin.impl.json.jackson.JacksonJsonLogger.unableToMapInput(JacksonJsonLogger.java:80)
at org.camunda.spin.impl.json.jackson.format.JacksonJsonDataFormatMapper.mapJavaToInternal(JacksonJsonDataFormatMapper.java:54)
at org.camunda.spin.impl.SpinFactoryImpl.createSpinFromObject(SpinFactoryImpl.java:163)
at org.camunda.spin.impl.SpinFactoryImpl.createSpin(SpinFactoryImpl.java:75)
at org.camunda.spin.Spin.JSON(Spin.java:90)
at com.camunda.consulting.jsfSimpleTasklist.Handler.handle(Handler.java:30)
at sun.reflect.GeneratedMethodAccessor84.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.ejada.jms.queue.JMSQueue$2.onMessage(JMSQueue.java:240)
at org.apache.activemq.artemis.jms.client.JMSMessageListenerWrapper.onMessage(JMSMessageListenerWrapper.java:93)
at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1018)
at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:48)
at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1145)
at org.apache.activemq.artemis.utils.OrderedExecutorFactory$OrderedExecutor$ExecutorTask.run(OrderedExecutorFactory.java:103)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: (was java.lang.NullPointerException) (through reference chain: org.camunda.bpm.engine.impl.persistence.entity.TaskEntity[“execution”])
at com.fasterxml.jackson.databind.ObjectMapper.valueToTree(ObjectMapper.java:2790)
at org.camunda.spin.impl.json.jackson.format.JacksonJsonDataFormatMapper.mapJavaToInternal(JacksonJsonDataFormatMapper.java:52)
… 16 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: org.camunda.bpm.engine.impl.persistence.entity.TaskEntity[“execution”])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:391)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:351)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:316)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:727)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2643)
at com.fasterxml.jackson.databind.ObjectMapper.valueToTree(ObjectMapper.java:2785)
… 17 more
Caused by: java.lang.NullPointerException
at org.camunda.bpm.engine.impl.persistence.entity.TaskEntity.getExecution(TaskEntity.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
… 22 more

You can use the TaskDto class in engine-rest which has a static method can transfer from TaskEntity to it and can be serialize to JSON string.

1 Like