flowable/flowable-engine · error · FlowableException
No channel keys configured for ${execution}
Error message
No channel keys configured for ${execution} What it means
SendEventTaskActivityBehavior.getChannelModels throws this when no channel keys could be resolved for the send event task and the event is not being sent on the system channel. Flowable requires at least one destination channel unless sendOnSystemChannel applies.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/SendEventTaskActivityBehavior.java:211
} else {
throw new FlowableIllegalArgumentException("Can only use a collection of String elements for referencing channel model key");
}
}
} else if (resolvedChannelKey instanceof String) {
String[] keys = ((String) resolvedChannelKey).split(",");
channelKeys.addAll(Arrays.asList(keys));
}
}
}
}
if (channelKeys.isEmpty()) {
if (!sendOnSystemChannel) {
// If the event is going to be send on the system channel then it is allowed to not define any other channels
throw new FlowableException("No channel keys configured for " + execution);
} else {
return Collections.emptyList();
}
}
EventRepositoryService eventRepositoryService = CommandContextUtil.getEventRegistryEngineConfiguration(commandContext).getEventRepositoryService();
List<ChannelModel> channelModels = new ArrayList<>(channelKeys.size());
for (String channelKey : channelKeys) {
if (Objects.equals(ProcessEngineConfiguration.NO_TENANT_ID, execution.getTenantId())) {
channelModels.add(eventRepositoryService.getChannelModelByKey(channelKey));
} else {
channelModels.add(eventRepositoryService.getChannelModelByKey(channelKey, execution.getTenantId()));
}
}
return channelModels;
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Add or correct the channelKey attribute on the send event task in the BPMN XML
- Ensure the variable or bean referenced by the channelKey expression is populated before the task executes and non-empty
- If the event should go through the platform's system channel, mark it as a system channel so the empty-list case is permitted
- Verify the expression result after splitting on commas is not an array of empty strings
Example fix
// before <sendEvent eventType="orderShippedEvent"/> <!-- no channelKey --> // after <sendEvent eventType="orderShippedEvent" channelKey="outboundOrderChannel"/>
Defensive patterns
Strategy: validation
Validate before calling
// Ensure channel keys are non-empty before executing the send event task
Object channels = execution.getVariable("channels");
if (channels == null || (channels instanceof Collection && ((Collection<?>) channels).isEmpty())) {
throw new IllegalStateException("No channel keys configured for execution " + execution.getId());
} Try / catch
try {
processEngine.getRuntimeService().signal(executionId);
} catch (FlowableException e) {
if (e.getMessage().startsWith("No channel keys configured")) {
// set channelKey or mark event as system channel
}
} Prevention
- Always set channelKey on send event tasks unless using the system channel
- Validate channelKey expressions resolve non-null in a unit test
- Trim/split comma lists and filter blanks before storing
When it happens
Trigger: The channelKey field/expression resolves to null or to an empty collection, and the execution is not on the system channel, so channelKeys.isEmpty() is true at the guard in getChannelModels.
Common situations: Forgetting to set the channelKey attribute on the send event task; an expression referencing a variable that was never set (resolves to null); a comma-split producing only blank entries that get filtered out.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- A channel key detection value is required for the channel mo
- Error parsing channel definition JSON
- deployment '${deploymentId}' didn't put channel definition '
- The channel expression key detection value was not found for
- The channel expression tenant detection value was not found
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/aadc1c0fd0fac87b.
Report an issue: GitHub.