flowable/flowable-engine · warning
Unsupported payload type: {}
Error message
Unsupported payload type: {} What it means
DefaultJsonPayloadValueTransformer.converts a JSON payload node to a Java value based on the payload definition's declared type (string, integer, long, boolean, date, json...). When the declared type is not one of the known EventPayloadTypes constants, the transformer logs a warning and falls back to returning the node's string representation.
Source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/DefaultJsonPayloadValueTransformer.java:49
value = parameterNode.asString();
} else if (EventPayloadTypes.BOOLEAN.equals(definitionType)) {
value = parameterNode.booleanValue(false);
} else if (EventPayloadTypes.INTEGER.equals(definitionType)) {
value = parameterNode.intValue(0);
} else if (EventPayloadTypes.DOUBLE.equals(definitionType)) {
value = parameterNode.doubleValue(0.0d);
} else if (EventPayloadTypes.LONG.equals(definitionType)) {
value = parameterNode.longValue(0L);
} else if (EventPayloadTypes.JSON.equals(definitionType)) {
value = parameterNode;
} else {
LOGGER.warn("Unsupported payload type: {} ", definitionType);
value = parameterNode.asString();
}
return value;
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Change the payload definition's definitionType in the event model JSON to a supported EventPayloadTypes value (string, integer, long, boolean, date, json)
- If you truly need a custom type, implement/extend a payload value transformer and register it instead of relying on the default
- Verify the event registry model version matches the Flowable runtime version
- If string output is acceptable, you can ignore the warning, but be aware values arrive as String
Example fix
// before (event model JSON)
{"name":"amount","type":"double"}
// after
{"name":"amount","type":"long"} Defensive patterns
Strategy: validation
Validate before calling
Set<String> supported = Set.of("string","integer","long","boolean","date","json");
for (EventPayloadDefinition p : eventModel.getPayload()) {
if (!supported.contains(p.getType())) {
throw new IllegalArgumentException("Unsupported payload type: " + p.getType());
}
} Type guard
boolean isSupportedPayloadType(String t) {
return t != null && EventPayloadTypes.ALL.contains(t);
} Prevention
- Validate event registry model JSON against the schema before deploying
- Only use EventPayloadTypes constants when authoring payload definitions
- Keep the Flowable model/runtime versions aligned
- Treat the WARN as a signal to add a custom transformer for genuinely new types
When it happens
Trigger: An event payload definition (in the event registry JSON model) declares a definitionType string that does not match any supported EventPayloadTypes constant (e.g. 'double', 'float', or a misspelled type), and a payload value is transformed when receiving/handling the event.
Common situations: Hand-edited event registry model JSON with an unsupported type; version mismatch between the registry model and the runtime's supported payload types; custom payload types registered in the model but not recognized by the default transformer.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Unsupported value type ${value == null ? "null" : value.getC
- Unsupported value type " + (value == null ? "null" : value.g
- Can only use a collection of String elements for referencing
- Unsupported event object type: ${event.getEventObject().getC
- Error parsing channel definition JSON
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/a184956dcf39eac4.
Report an issue: GitHub.