flowable/flowable-engine · error · FlowableException

Could not find an outbound channel adapter for channel

Error message

Could not find an outbound channel adapter for channel {channelModel.getKey()}

What it means

Within DefaultOutboundEventProcessor.sendEvent(), after the outbound pipeline runs, the channel model's OutboundEventChannelAdapter is fetched and must be non-null; otherwise FlowableException is thrown. It means the channel model was found and used for processing, but it has no adapter configured to actually deliver the serialized event (e.g. no JMS/Kafka adapter wired).

Solutions

  1. Redeploy the channel model with an outboundEventChannelAdapter configured (e.g. a Kafka/JMS topic adapter)
  2. Verify the adapter bean exists in the application context and matches the name referenced by the channel model
  3. Check the deployed channel model version actually contains the adapter (inspect the channel model JSON/XML in the repository)
  4. Set the adapter programmatically: ((OutboundChannelModel) channelModel).setOutboundEventChannelAdapter(adapter) for custom setups

Example fix

// before
<channel id="myChannel" source="processEvent" /> <!-- no adapter configured -->
// after
<channel id="myChannel" source="processEvent" outboundEventChannelAdapter="myKafkaAdapter" />
Defensive patterns

Strategy: validation

Validate before calling

null

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Sending an event through a channel whose OutboundChannelModel was deployed/parsed without an outboundEventChannelAdapter property, or where the adapter bean failed to be injected/resolved at runtime.

Common situations: Channel XML model defined without the adapter attribute; Spring bean for the adapter missing or misnamed (classpath/service lookup returns null); partially deployed channel model from an older model version.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/a16c29866781230f. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/DefaultOutboundEventProcessor.java:62

        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());
            }
            
            outboundEventChannelAdapter.sendEvent(new DefaultOutboundEvent(rawEvent, eventInstance, headerMap));
        }
    }

}

View on GitHub (pinned to d6d39ce1c6)