flowable/flowable-engine · error · FlowableException
No channel model set for outgoing {eventInstance}
Error message
No channel model set for outgoing {eventInstance} What it means
DefaultOutboundEventProcessor.sendEvent() throws FlowableException when the collection of channel models to publish the event to is null or empty. An outbound event must be routed through at least one channel; with no channels the library cannot proceed. This is a programming/configuration error rather than a transient failure.
Source
Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/DefaultOutboundEventProcessor.java:45
import org.flowable.eventregistry.model.OutboundChannelModel;
/**
* @author Joram Barrez
*/
public class DefaultOutboundEventProcessor implements OutboundEventProcessor {
protected EventRepositoryService eventRepositoryService;
protected boolean fallbackToDefaultTenant;
public DefaultOutboundEventProcessor(EventRepositoryService eventRepositoryService, boolean fallbackToDefaultTenant) {
this.eventRepositoryService = eventRepositoryService;
this.fallbackToDefaultTenant = fallbackToDefaultTenant;
}
@Override
public void sendEvent(EventInstance eventInstance, Collection<ChannelModel> channelModels) {
if (channelModels == null || channelModels.isEmpty()) {
throw new FlowableException("No channel model set for outgoing " + eventInstance);
}
for (ChannelModel channelModel : channelModels) {
OutboundChannelModel outboundChannelModel = (OutboundChannelModel) channelModel;
Map<String, Object> headerMap = new HashMap<>();
for (EventPayloadInstance headerInstance : eventInstance.getHeaderInstances()) {
headerMap.put(headerInstance.getDefinitionName(), headerInstance.getValue());
}
OutboundEventProcessingPipeline<?> outboundEventProcessingPipeline = (OutboundEventProcessingPipeline<?>) outboundChannelModel.getOutboundEventProcessingPipeline();
Object rawEvent = outboundEventProcessingPipeline.run(eventInstance);
OutboundEventChannelAdapter outboundEventChannelAdapter = (OutboundEventChannelAdapter<?>) outboundChannelModel.getOutboundEventChannelAdapter();
if (outboundEventChannelAdapter == null) {
throw new FlowableException("Could not find an outbound channel adapter for channel " + channelModel.getKey());
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Deploy/bind at least one outbound channel model for the event (check the EventRepositoryService channel model deployments and the event's key bindings)
- Verify the event instance's key exactly matches the key the channel is bound to
- In custom code, guard before calling: only dispatch when channelModels != null && !channelModels.isEmpty(), or log/skip otherwise
Example fix
// before
outboundEventProcessor.sendEvent(eventInstance, resolvedChannels);
// after
if (resolvedChannels == null || resolvedChannels.isEmpty()) {
throw new IllegalStateException("No channels bound for event key " + eventInstance.getEventKey());
}
outboundEventProcessor.sendEvent(eventInstance, resolvedChannels); Defensive patterns
Strategy: validation
Validate before calling
null
Type guard
null
Try / catch
null
Prevention
- Validate channel bindings at deployment time
When it happens
Trigger: Calling sendEvent(eventInstance, null) or sendEvent(eventInstance, Collections.emptyList()); more practically, event key/binding resolution returning zero channel models for the event instance (no channel model bound to the event, or event key mismatch).
Common situations: Deployed event/channel models missing the event-to-channel binding; dispatching an event whose key no channel consumes; custom pipeline code invoking the processor directly with an unfiltered empty collection.
Understand the failure class
Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.
Related errors
- The channel expression key detection value was not found for
- The case definition with id
- No channel keys configured for ${execution}
- A channel key detection value is required for the channel mo
- no org.flowable.eventregistry.api.EventRegistryEngine define
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/7d0325f1790ad0a6.
Report an issue: GitHub.