{"record":{"id":"75af8c19e0da2846","repo":"flowable/flowable-engine","slug":"cannot-convert-event-payload-payloadinstancevalu-75af8c","errorCode":null,"errorMessage":"Cannot convert event payload ${payloadInstanceValue} to type 'integer'","messagePattern":"Cannot convert event payload (.+?) to type 'integer'","errorType":"exception","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java","lineNumber":81,"sourceCode":"\n                } else if (EventPayloadTypes.DOUBLE.equals(definitionType)) {\n\n                    if (payloadInstanceValue instanceof Number) {\n                        objectNode.put(payloadInstance.getDefinitionName(), ((Number) payloadInstanceValue).doubleValue());\n                    } else if (payloadInstanceValue instanceof String) {\n                        objectNode.put(payloadInstance.getDefinitionName(), Double.valueOf((String) payloadInstanceValue));\n                    } else {\n                        throw new FlowableIllegalArgumentException(\"Cannot convert event payload \" + payloadInstanceValue + \" to type 'double'\");\n                    }\n\n                } else if (EventPayloadTypes.INTEGER.equals(definitionType)) {\n\n                    if (payloadInstanceValue instanceof Number) {\n                        objectNode.put(payloadInstance.getDefinitionName(), ((Number) payloadInstanceValue).intValue());\n                    } else if (payloadInstanceValue instanceof String) {\n                        objectNode.put(payloadInstance.getDefinitionName(), Integer.valueOf((String) payloadInstanceValue));\n                    } else {\n                        throw new FlowableIllegalArgumentException(\"Cannot convert event payload \" + payloadInstanceValue + \" to type 'integer'\");\n                    }\n\n                } else if (EventPayloadTypes.LONG.equals(definitionType)) {\n\n                    if (payloadInstanceValue instanceof Number) {\n                        objectNode.put(payloadInstance.getDefinitionName(), ((Number) payloadInstanceValue).longValue());\n                    } else if (payloadInstanceValue instanceof String) {\n                        objectNode.put(payloadInstance.getDefinitionName(), Long.valueOf((String) payloadInstanceValue));\n                    } else {\n                        throw new FlowableIllegalArgumentException(\"Cannot convert event payload \" + payloadInstanceValue + \" to type 'long'\");\n                    }\n\n                } else if (EventPayloadTypes.BOOLEAN.equals(definitionType)) {\n\n                    if (payloadInstanceValue instanceof Boolean) {\n                        objectNode.put(payloadInstance.getDefinitionName(), (Boolean) payloadInstanceValue);\n                    } else if (payloadInstanceValue instanceof String) {\n                        objectNode.put(payloadInstance.getDefinitionName(), Boolean.valueOf((String) payloadInstanceValue));","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java#L63-L99","documentation":"FlowableIllegalArgumentException thrown by EventPayloadToJsonStringSerializer.serialize when a payload instance declared as type 'integer' is neither a Number nor a String, so it cannot be converted to a JSON int during event payload serialization.","triggerScenarios":"Payload definition declares type 'integer' but the instance value is an incompatible object (Boolean, Map, POJO, Double-like non-Number, etc.) at serialize time.","commonSituations":"Publishing events with values of the wrong Java type; loosely typed map-based payload construction; schema changed from string to integer without updating producers.","solutions":["Set the payload value as an Integer/Number (or integer-parseable String) matching the 'integer' definition.","Change the payload definition type if the value is not truly an integer.","Coerce and validate values before event publication."],"exampleFix":"// before\npayload.put(\"count\", someObject); // e.g. a Map\n// after\npayload.put(\"count\", Integer.parseInt(someObject.toString()));","handlingStrategy":"type-guard","validationCode":"Object v = payloadValue; if (!(v instanceof Number) && !(v instanceof String)) { throw new IllegalArgumentException(\"payload 'integer' value must be Number or numeric String\"); }","typeGuard":"boolean isIntegerCompatible(Object v) { return v instanceof Number || v instanceof String; }","tryCatchPattern":"try { serializer.serialize(eventInstance); } catch (FlowableIllegalArgumentException e) { LOG.error(\"payload type mismatch for integer field: \" + e.getMessage()); throw e; }","preventionTips":["Use Integer/Long values for integer-typed payloads","Avoid putting Maps/POJOs into numeric payload fields","Add unit tests asserting payload types against definitions"],"tags":["flowable","serialization","type-mismatch","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"}