flowable/flowable-engine · error · FlowableEventJsonException
The deserializer type is not supported
Error message
The deserializer type is not supported ${deserializerType} for the channel model with key ${key} What it means
Thrown when an inbound channel declares a deserializerType other than the supported values json, xml, or expression (null is allowed and skipped). The validator rejects unknown deserializer types at channel deployment/validation time.
Solutions
- Set deserializerType to one of: json, xml, or expression
- Check for typos and casing (matching is case-insensitive, so JSON/json both work)
- Remove deserializerType entirely if deserialization is handled elsewhere (null is permitted)
Example fix
// before "deserializerType": "protobuf" // after "deserializerType": "json"
Defensive patterns
Strategy: validation
Validate before calling
Set<String> supported = Set.of("json", "xml", "expression");
String t = channel.getDeserializerType();
if (t != null && !supported.contains(t.toLowerCase())) {
throw new IllegalArgumentException("Unsupported deserializerType '" + t + "' on channel '" + channel.getKey() + "'");
} Type guard
boolean hasSupportedDeserializer = t -> t == null || Set.of("json","xml","expression").contains(t.toLowerCase()); Try / catch
try {
deployChannel(model);
} catch (FlowableEventJsonException e) {
logger.error("Unsupported deserializer type: {}", e.getMessage());
} Prevention
- Only use json, xml, or expression for deserializerType
- Watch letter casing/typos in channel JSON (matching is case-insensitive but spelling must match)
- Document the allowed deserializer types in your channel authoring guide
When it happens
Trigger: validateDeserializer reaches the final else-if because deserializerType is a non-null string not matching json/xml/expression case-insensitively, e.g. "JSON-wrong", "protobuf", or a typo like "jso".
Common situations: Typos in deserializerType; using a deserializer type from a different Flowable module or a custom type that requires registration; copy-paste from unrelated configuration.
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
- The serializer type is not supported
- A channel key detection value is required for the channel…
- A resource name is mandatory
- An event definition key is mandatory
- Event definition id is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/1ab05272654fdbc2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/InboundChannelModelValidator.java:76
if (channelEventKeyDetection == null) {
throw new FlowableEventJsonException("A channel key detection value is required for the channel model with key " + inboundChannelModel.getKey());
}
if (StringUtils.isEmpty(channelEventKeyDetection.getFixedValue()) &&
StringUtils.isEmpty(channelEventKeyDetection.getXmlXPathExpression()) &&
StringUtils.isEmpty(channelEventKeyDetection.getDelegateExpression())) {
throw new FlowableEventJsonException(
"The channel xml key detection value was not found for the channel model with key " + inboundChannelModel.getKey()
+ ". One of fixedValue, xmlPathExpression, delegateExpression should be set.");
}
} else if ("expression".equalsIgnoreCase(deserializerType)) {
if (StringUtils.isEmpty(inboundChannelModel.getDeserializerDelegateExpression())) {
throw new FlowableEventJsonException(
"The channel deserializer delegate expression was not set for the channel model with key " + inboundChannelModel);
}
} else if (deserializerType != null) {
throw new FlowableEventJsonException(
"The deserializer type is not supported " + deserializerType + " for the channel model with key " + inboundChannelModel.getKey());
}
}
}
View on GitHub (pinned to d6d39ce1c6)