{"record":{"id":"5f449dc1161cb0c2","repo":"flowable/flowable-engine","slug":"error-writing-event-json","errorCode":null,"errorMessage":"Error writing event json","messagePattern":"Error writing 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":146,"sourceCode":"                }\n\n                if (eventPayload.isMetaParameter()) {\n                    eventPayloadNode.put(\"metaParameter\", true);\n                }\n                \n                if (eventPayload.getExtensionProperties() != null && !eventPayload.getExtensionProperties().isEmpty()) {\n                    ObjectNode extensionPropNode = eventPayloadNode.putObject(\"extensionProperties\");\n                    for (String propName : eventPayload.getExtensionProperties().keySet()) {\n                        extensionPropNode.put(propName, eventPayload.getExtensionProperties().get(propName));\n                    }\n                }\n            }\n        }\n\n        try {\n            return objectMapper.writeValueAsString(modelNode);\n        } catch (Exception e) {\n            throw new FlowableEventJsonException(\"Error writing event json\", e);\n        }\n    }\n    \n    protected void processExtensionProperties(JsonNode node, EventPayload payload) {\n        JsonNode extensionNodes = node.path(\"extensionProperties\");\n        if (extensionNodes != null && !extensionNodes.isMissingNode()) {\n            Map<String, String> extensionPropertyMap = new HashMap<>();\n            for (String extensionName : extensionNodes.propertyNames()) {\n                extensionPropertyMap.put(extensionName, extensionNodes.get(extensionName).asString());\n            }\n            \n            payload.setExtensionProperties(extensionPropertyMap);\n        }\n    }\n}","sourceCodeStart":128,"sourceCodeEnd":161,"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#L128-L161","documentation":"EventJsonConverter.convertToJson serializes an EventModel (including payload and extension properties) into its JSON string. A failure in objectMapper.writeValueAsString is wrapped as FlowableEventJsonException('Error writing event json'). It indicates the event model cannot be represented as JSON.","triggerScenarios":"Calling convertToJson with an EventModel holding unserializable field values (e.g. problematic extension property nodes), or an ObjectMapper failure writing the ObjectNode tree.","commonSituations":"Custom EventModel subclasses with fields Jackson cannot serialize, corrupt in-memory model built programmatically, or ObjectMapper configuration issues when caching event definitions.","solutions":["Inspect the cause exception to identify which model field/property fails serialization.","Fix the EventModel: remove or type-correct the offending payload/extension property values.","Ensure the ObjectMapper used (from the supplier) is correctly configured for the model classes."],"exampleFix":"// before\nString json = converter.convertToJson(eventModel); // throws on bad extension property\n// after\nEventPayload payload = eventModel.getPayload();\npayload.getExtensionProperties().remove(\"brokenProperty\");\nString json = converter.convertToJson(eventModel);","handlingStrategy":"try-catch","validationCode":"if (eventModel == null || eventModel.getKey() == null) {\n    throw new IllegalArgumentException(\"EventModel and its key must be set before serializing\");\n}","typeGuard":"boolean isSerializable(EventModel m) {\n    return m != null && m.getKey() != null && !m.getKey().isEmpty();\n}","tryCatchPattern":"try {\n    String json = converter.convertToJson(eventModel);\n} catch (FlowableEventJsonException e) {\n    LOG.error(\"Failed to serialize event model: {}\", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());\n    throw e;\n}","preventionTips":["Ensure payloads and extension properties contain Jackson-serializable values.","Test round-trip convertToEventModel/convertToJson in unit tests.","Verify the ObjectMapper configuration matches the model classes in use."],"tags":["json","serialization","event-model"],"backgroundTag":"json-marshal-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"}