flowable/flowable-engine · error · FlowableEventJsonException

The deserializer type is not supported

Error message

The deserializer type is not supported ${deserializerType} for the channel model with key ${key}

What it means

Thrown when an inbound channel declares a deserializerType other than the supported values json, xml, or expression (null is allowed and skipped). The validator rejects unknown deserializer types at channel deployment/validation time.

Solutions

  1. Set deserializerType to one of: json, xml, or expression
  2. Check for typos and casing (matching is case-insensitive, so JSON/json both work)
  3. Remove deserializerType entirely if deserialization is handled elsewhere (null is permitted)

Example fix

// before
"deserializerType": "protobuf"
// after
"deserializerType": "json"
Defensive patterns

Strategy: validation

Validate before calling

Set<String> supported = Set.of("json", "xml", "expression");
String t = channel.getDeserializerType();
if (t != null && !supported.contains(t.toLowerCase())) {
    throw new IllegalArgumentException("Unsupported deserializerType '" + t + "' on channel '" + channel.getKey() + "'");
}

Type guard

boolean hasSupportedDeserializer = t -> t == null || Set.of("json","xml","expression").contains(t.toLowerCase());

Try / catch

try {
    deployChannel(model);
} catch (FlowableEventJsonException e) {
    logger.error("Unsupported deserializer type: {}", e.getMessage());
}

Prevention

When it happens

Trigger: validateDeserializer reaches the final else-if because deserializerType is a non-null string not matching json/xml/expression case-insensitively, e.g. "JSON-wrong", "protobuf", or a typo like "jso".

Common situations: Typos in deserializerType; using a deserializer type from a different Flowable module or a custom type that requires registration; copy-paste from unrelated configuration.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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

Appendix: source

Thrown at modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/InboundChannelModelValidator.java:76

            if (channelEventKeyDetection == null) {
                throw new FlowableEventJsonException("A channel key detection value is required for the channel model with key " + inboundChannelModel.getKey());
            }

            if (StringUtils.isEmpty(channelEventKeyDetection.getFixedValue()) &&
                StringUtils.isEmpty(channelEventKeyDetection.getXmlXPathExpression()) &&
                StringUtils.isEmpty(channelEventKeyDetection.getDelegateExpression())) {
                throw new FlowableEventJsonException(
                    "The channel xml key detection value was not found for the channel model with key " + inboundChannelModel.getKey()
                        + ". One of fixedValue, xmlPathExpression, delegateExpression should be set.");
            }

        } else if ("expression".equalsIgnoreCase(deserializerType)) {
            if (StringUtils.isEmpty(inboundChannelModel.getDeserializerDelegateExpression())) {
                throw new FlowableEventJsonException(
                    "The channel deserializer delegate expression was not set for the channel model with key " + inboundChannelModel);
            }
        } else if (deserializerType != null) {
            throw new FlowableEventJsonException(
                "The deserializer type is not supported " + deserializerType + " for the channel model with key " + inboundChannelModel.getKey());
        }
    }
}

View on GitHub (pinned to d6d39ce1c6)