{"record":{"id":"5fd540771524d00b","repo":"flowable/flowable-engine","slug":"cannot-convert-event-payload-jsonvalue-to-type","errorCode":null,"errorMessage":"Cannot convert event payload ${jsonValue} to type 'json'","messagePattern":"Cannot convert event payload (.+?) to type 'json'","errorType":"exception","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java","lineNumber":129,"sourceCode":"                        }\n                    } else {\n                        JsonNode jsonNode = JsonUtil.asJsonNode(jsonValue, objectMapper, true);\n                        if (jsonNode != null) {\n                            jsonValue = jsonNode;\n                        }\n                    }\n                    if (jsonValue instanceof JsonNode) {\n                        objectNode.set(payloadInstance.getDefinitionName(), (JsonNode) jsonValue);\n                    } else if (jsonValue instanceof String) {\n                        JsonNode jsonNode;\n                        try {\n                            jsonNode = objectMapper.readTree((String) jsonValue);\n                        } catch (JacksonException e) {\n                            throw new FlowableIllegalArgumentException(\"Could not read json event payload\", e);\n                        }\n                        objectNode.set(payloadInstance.getDefinitionName(), jsonNode);\n                    }  else {\n                        throw new FlowableIllegalArgumentException(\"Cannot convert event payload \" + jsonValue + \" to type 'json'\");\n                    }\n\n                } else {\n                    throw new FlowableIllegalArgumentException(\"Unsupported event payload instance type: \" + definitionType);\n                }\n\n            } else {\n                objectNode.putNull(payloadInstance.getDefinitionName());\n            }\n        }\n\n        try {\n            return objectMapper.writeValueAsString(objectNode);\n        } catch (JacksonException e) {\n            throw new FlowableException(\"Could not serialize event to json string for \" + eventInstance, e);\n        }\n    }\n","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java#L111-L147","documentation":"FlowableIllegalArgumentException thrown by EventPayloadToJsonStringSerializer.serialize when a payload declared as type 'json' is neither a JsonNode, Supplier producing one, nor a String — i.e. an arbitrary object the serializer cannot represent as JSON in this branch.","triggerScenarios":"Payload definition type is 'json' but the instance value is a raw POJO, Map, Number, or other non-JsonNode/non-String/non-Supplier object.","commonSituations":"Developers putting POJOs or Maps under a 'json'-typed payload expecting automatic conversion; mixing typed payload definitions with untyped values after a schema change.","solutions":["Convert the object to JSON first: objectMapper.valueToTree(obj) and set the resulting JsonNode.","Wrap the value in a Supplier<JsonNode> if lazy resolution is needed.","Change the payload definition type to match the actual value shape, or serialize the object to a JSON String yourself."],"exampleFix":"// before\npayload.put(\"data\", myPojo); // POJO under 'json' payload\n// after\npayload.put(\"data\", objectMapper.valueToTree(myPojo)); // JsonNode","handlingStrategy":"type-guard","validationCode":"Object v = payloadValue; if (!(v instanceof JsonNode) && !(v instanceof Supplier) && !(v instanceof String)) { throw new IllegalArgumentException(\"'json' payload must be JsonNode, Supplier, or String\"); }","typeGuard":"boolean isJsonCompatible(Object v) { return v instanceof JsonNode || v instanceof Supplier<?> || v instanceof String; }","tryCatchPattern":"try { serializer.serialize(eventInstance); } catch (FlowableIllegalArgumentException e) { LOG.error(\"unsupported json payload value: \" + e.getMessage()); throw e; }","preventionTips":["Convert POJOs with objectMapper.valueToTree before setting json payloads","Use Supplier<JsonNode> for lazy values","Align payload definition types with actual value classes"],"tags":["flowable","serialization","type-mismatch","json","event-payload"],"backgroundTag":"type-mismatch","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}