flowable/flowable-engine · error · FlowableEventJsonException
Not supported channel model type was found
Error message
Not supported ${channelType} channel model type was found ${type} What it means
ChannelJsonConverter.determineChannelModelClass resolves the concrete ChannelModel subclass from the JSON's 'channelType' and 'type' fields via a lookup map keyed 'channelType-type'. When the combination is not registered it throws FlowableEventJsonException('Not supported ${channelType} channel model type was found ${type}').
Solutions
- Check the JSON's 'channelType' and 'type' values; correct typos to a supported combination (e.g. jms-inbound, kafka-outbound, http-outbound).
- Upgrade Flowable-event-registry modules so the converter knows the channel type used in the JSON.
- For custom types, extend the converter and register the new channel class in channelModelClasses.
Example fix
// before
{"channelType":"jms","type":"inbound"} // typo: type is nested field 'type: "inbound"'
// after
{"channelType":"jms","type":"inbound", ...} with recognized pair, e.g.
{"key":"myChannel","channelType":"jms","type":"inbound"} — verify against supported jms-inbound mapping Defensive patterns
Strategy: validation
Validate before calling
Set<String> supported = Set.of("jms-inbound","jms-outbound","kafka-inbound","kafka-outbound","http-inbound","http-outbound","rabbitmq-inbound","rabbitmq-outbound");
String combo = channelType + "-" + type;
if (!supported.contains(combo)) {
throw new IllegalArgumentException("Unsupported channel type: " + combo);
} Type guard
boolean isSupportedChannelType(String channelType, String type) {
return channelType != null && type != null && !channelType.isEmpty() && !type.isEmpty();
} Try / catch
try {
ChannelModel model = converter.convertToChannelModel(json);
} catch (FlowableEventJsonException e) {
if (e.getMessage() != null && e.getMessage().startsWith("Not supported")) {
LOG.error("Check channelType/type fields in JSON: {}", e.getMessage());
}
throw e;
} Prevention
- Only use channelType/type pairs supported by your Flowable version.
- Keep event-registry modules on the same version as the deployed JSON artifacts.
- Register custom channel model classes when defining custom channel types.
When it happens
Trigger: Converting channel JSON whose channelType/type pair has no entry in channelModelClasses — e.g. unknown channelType like 'jms'/'kafka' not registered, or a misspelled/renamed type field.
Common situations: Deploying a custom or newer channel model JSON into an engine version that lacks the converter mapping, typos in the JSON 'type' field, or writing a custom channel type without registering its model class in a custom converter.
Related errors
- Error reading channel json
- Error writing channel json
- Unsupported event payload instance type
- An error occurs converting output value as JSon
- Cannot aggregate overview variable
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/40b334fefe7863a2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java:112
return channelModel;
} catch (FlowableEventJsonException e) {
throw e;
} catch (Exception e) {
throw new FlowableEventJsonException("Error reading channel json", e);
}
}
protected Class<? extends ChannelModel> determineChannelModelClass(JsonNode channelNode) {
String channelType = channelNode.path("channelType").stringValue(null);
String type = channelNode.path("type").stringValue(null);
Class<? extends ChannelModel> channelClass = channelModelClasses.get(channelType + "-" + type);
if (channelClass != null) {
return channelClass;
}
throw new FlowableEventJsonException("Not supported " + channelType + " channel model type was found " + type);
}
protected void validateChannel(ChannelModel channelModel) {
for (ChannelValidator validator : validators) {
validator.validateChannel(channelModel);
}
}
public String convertToJson(ChannelModel definition) {
try {
return objectMapperSupplier.get().writeValueAsString(definition);
} catch (Exception e) {
throw new FlowableEventJsonException("Error writing channel json", e);
}
}
public List<ChannelValidator> getValidators() {
return validators;View on GitHub (pinned to d6d39ce1c6)