{"record":{"id":"a16c29866781230f","repo":"flowable/flowable-engine","slug":"could-not-find-an-outbound-channel-adapter-for-cha","errorCode":null,"errorMessage":"Could not find an outbound channel adapter for channel {channelModel.getKey()}","messagePattern":"Could not find an outbound channel adapter for channel (.+?)","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/DefaultOutboundEventProcessor.java","lineNumber":62,"sourceCode":"        if (channelModels == null || channelModels.isEmpty()) {\n            throw new FlowableException(\"No channel model set for outgoing \" + eventInstance);\n        }\n\n        for (ChannelModel channelModel : channelModels) {\n\n            OutboundChannelModel outboundChannelModel = (OutboundChannelModel) channelModel;\n\n            Map<String, Object> headerMap = new HashMap<>();\n            for (EventPayloadInstance headerInstance : eventInstance.getHeaderInstances()) {\n                headerMap.put(headerInstance.getDefinitionName(), headerInstance.getValue());\n            }\n            \n            OutboundEventProcessingPipeline<?> outboundEventProcessingPipeline = (OutboundEventProcessingPipeline<?>) outboundChannelModel.getOutboundEventProcessingPipeline();\n            Object rawEvent = outboundEventProcessingPipeline.run(eventInstance);\n\n            OutboundEventChannelAdapter outboundEventChannelAdapter = (OutboundEventChannelAdapter<?>) outboundChannelModel.getOutboundEventChannelAdapter();\n            if (outboundEventChannelAdapter == null) {\n                throw new FlowableException(\"Could not find an outbound channel adapter for channel \" + channelModel.getKey());\n            }\n            \n            outboundEventChannelAdapter.sendEvent(new DefaultOutboundEvent(rawEvent, eventInstance, headerMap));\n        }\n    }\n\n}\n","sourceCodeStart":44,"sourceCodeEnd":70,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/DefaultOutboundEventProcessor.java#L44-L70","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","solutions":["Redeploy the channel model with an outboundEventChannelAdapter configured (e.g. a Kafka/JMS topic adapter)","Verify the adapter bean exists in the application context and matches the name referenced by the channel model","Check the deployed channel model version actually contains the adapter (inspect the channel model JSON/XML in the repository)","Set the adapter programmatically: ((OutboundChannelModel) channelModel).setOutboundEventChannelAdapter(adapter) for custom setups"],"exampleFix":"// before\n<channel id=\"myChannel\" source=\"processEvent\" /> <!-- no adapter configured -->\n// after\n<channel id=\"myChannel\" source=\"processEvent\" outboundEventChannelAdapter=\"myKafkaAdapter\" />","handlingStrategy":"validation","validationCode":"null","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Assert adapters exist during application startup"],"tags":["event-registry","channel-adapter","configuration","outbound"],"backgroundTag":"missing-config-key","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}