{"record":{"id":"42c22d454e990418","repo":"flowable/flowable-engine","slug":"error-reading-event-json","errorCode":null,"errorMessage":"Error reading event json","messagePattern":"Error reading event json","errorType":"exception","errorClass":"FlowableEventJsonException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/EventJsonConverter.java","lineNumber":89,"sourceCode":"                    eventModel.addPayload(payload);\n                }\n            }\n\n            JsonNode correlationParameters = modelNode.path(\"correlationParameters\");\n            if (correlationParameters.isArray()) {\n                for (JsonNode correlationPayloadNode : correlationParameters) {\n                    String name = correlationPayloadNode.path(\"name\").stringValue(null);\n                    String type = correlationPayloadNode.path(\"type\").stringValue(null);\n                    EventPayload payload = eventModel.addCorrelation(name, type);\n                    \n                    processExtensionProperties(correlationPayloadNode, payload);\n                }\n            }\n\n            return eventModel;\n            \n        } catch (Exception e) {\n            throw new FlowableEventJsonException(\"Error reading event json\", e);\n        }\n    }\n\n    public String convertToJson(EventModel definition) {\n        ObjectMapper objectMapper = objectMapperSupplier.get();\n        ObjectNode modelNode = objectMapper.createObjectNode();\n\n        if (definition.getKey() != null) {\n            modelNode.put(\"key\", definition.getKey());\n        }\n\n        if (definition.getName() != null) {\n            modelNode.put(\"name\", definition.getName());\n        }\n        \n        Collection<EventPayload> payload = definition.getPayload();\n        if (!payload.isEmpty()) {\n            ArrayNode payloadNode = modelNode.putArray(\"payload\");","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/EventJsonConverter.java#L71-L107","documentation":"EventJsonConverter.convertToEventModel parses an event definition JSON string into an EventModel. Any exception during parsing/deserialization is wrapped as FlowableEventJsonException('Error reading event json') with the root cause attached. It signals malformed or unreadable event JSON.","triggerScenarios":"Calling convertToEventModel with syntactically invalid JSON, JSON missing required event fields, or structure that fails Jackson deserialization into the event model classes.","commonSituations":"Deploying a hand-edited or corrupted .event JSON resource, exporting an event from a different Flowable version and deploying to an incompatible engine, or copy-paste errors in payload/correlation definitions.","solutions":["Check the wrapped cause (e.getCause()) for the exact deserialization problem.","Validate the event JSON structure (key, name, payload, correlationParameters) against the EventModel schema.","Redeploy with a corrected event definition file; regenerate the JSON from the Flowable designer if possible."],"exampleFix":"// before\nEventModel model = converter.convertToEventModel(eventJson); // malformed JSON\n// after\ntry {\n    EventModel model = converter.convertToEventModel(eventJson);\n} catch (FlowableEventJsonException e) {\n    LOG.error(\"Bad event JSON: \" + e.getCause().getMessage());\n    throw e;\n}","handlingStrategy":"try-catch","validationCode":"try {\n    JsonNode node = new ObjectMapper().readTree(eventJson);\n    if (node == null || !node.has(\"key\") || !node.has(\"name\")) {\n        throw new IllegalArgumentException(\"Event JSON missing key/name\");\n    }\n} catch (JsonProcessingException e) {\n    throw new IllegalArgumentException(\"Event JSON is not valid JSON\", e);\n}","typeGuard":"boolean isParsableEventJson(String json) {\n    try { new ObjectMapper().readTree(json); return true; } catch (Exception e) { return false; }\n}","tryCatchPattern":"try {\n    EventModel model = converter.convertToEventModel(eventJson);\n} catch (FlowableEventJsonException e) {\n    LOG.error(\"Event JSON invalid: {}\", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());\n    throw new DeploymentException(\"Cannot deploy event definition\", e);\n}","preventionTips":["Schema-validate event JSON in CI before deployment.","Never hand-edit exported event JSON; use the modeler/export tooling.","Log e.getCause() to surface the real deserialization error."],"tags":["json","parsing","event-model","deployment"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}