{"record":{"id":"40b334fefe7863a2","repo":"flowable/flowable-engine","slug":"not-supported-channeltype-channel-model-type-wa","errorCode":null,"errorMessage":"Not supported ${channelType} channel model type was found ${type}","messagePattern":"Not supported (.+?) channel model type was found (.+?)","errorType":"validation","errorClass":"FlowableEventJsonException","httpStatus":null,"severity":"error","filePath":"modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java","lineNumber":112,"sourceCode":"\n            return channelModel;\n        } catch (FlowableEventJsonException e) {\n            throw e;\n        } catch (Exception e) {\n            throw new FlowableEventJsonException(\"Error reading channel json\", e);\n        }\n    }\n\n    protected Class<? extends ChannelModel> determineChannelModelClass(JsonNode channelNode) {\n        String channelType = channelNode.path(\"channelType\").stringValue(null);\n        String type = channelNode.path(\"type\").stringValue(null);\n\n        Class<? extends ChannelModel> channelClass = channelModelClasses.get(channelType + \"-\" + type);\n        if (channelClass != null) {\n            return channelClass;\n        }\n\n        throw new FlowableEventJsonException(\"Not supported \" + channelType + \" channel model type was found \" + type);\n    }\n\n    protected void validateChannel(ChannelModel channelModel) {\n        for (ChannelValidator validator : validators) {\n            validator.validateChannel(channelModel);\n        }\n    }\n\n    public String convertToJson(ChannelModel definition) {\n        try {\n            return objectMapperSupplier.get().writeValueAsString(definition);\n        } catch (Exception e) {\n            throw new FlowableEventJsonException(\"Error writing channel json\", e);\n        }\n    }\n\n    public List<ChannelValidator> getValidators() {\n        return validators;","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java#L94-L130","documentation":"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}').","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n{\"channelType\":\"jms\",\"type\":\"inbound\"} // typo: type is nested field 'type: \"inbound\"'\n// after\n{\"channelType\":\"jms\",\"type\":\"inbound\", ...} with recognized pair, e.g.\n{\"key\":\"myChannel\",\"channelType\":\"jms\",\"type\":\"inbound\"} — verify against supported jms-inbound mapping","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"jms-inbound\",\"jms-outbound\",\"kafka-inbound\",\"kafka-outbound\",\"http-inbound\",\"http-outbound\",\"rabbitmq-inbound\",\"rabbitmq-outbound\");\nString combo = channelType + \"-\" + type;\nif (!supported.contains(combo)) {\n    throw new IllegalArgumentException(\"Unsupported channel type: \" + combo);\n}","typeGuard":"boolean isSupportedChannelType(String channelType, String type) {\n    return channelType != null && type != null && !channelType.isEmpty() && !type.isEmpty();\n}","tryCatchPattern":"try {\n    ChannelModel model = converter.convertToChannelModel(json);\n} catch (FlowableEventJsonException e) {\n    if (e.getMessage() != null && e.getMessage().startsWith(\"Not supported\")) {\n        LOG.error(\"Check channelType/type fields in JSON: {}\", e.getMessage());\n    }\n    throw e;\n}","preventionTips":["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."],"tags":["json","unsupported-type","channel-model"],"backgroundTag":"unsupported-enum-value","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"}