flowable/flowable-engine · warning
Json Node is not supported
Error message
Json Node {} is not supported What it means
A WARN from DMNParseUtil.getJsonValue (invoked while building a collection from a JsonNode in a DMN expression): the JsonNode's implementation type is not one of the supported kinds (array/string/etc.), so the value is skipped and null is returned instead of a converted element.
Solutions
- Ensure the JSON variable passed to the decision is an array of supported scalar values (strings, numbers) not an object or boolean.
- Pre-convert the JsonNode to a plain List<String>/List<Number> in the caller before DMN execution.
- Check the logged class name in the warning to identify the unsupported node type and handle it upstream.
Example fix
// before
vars.put("items", objectMapper.readTree("{\"a\":1}"));
// after
vars.put("items", Arrays.asList("a", "b")); Defensive patterns
Strategy: type-guard
Validate before calling
if (jsonNode.isObject() || jsonNode.isBoolean()) throw new IllegalArgumentException("Collection elements must be scalar arrays"); Type guard
boolean isSupportedScalarNode(JsonNode n) { return n.isString() || n.isNumber(); } Prevention
- Pass plain Java Lists of strings/numbers instead of raw JsonNodes
- Document the expected JSON shape for collection hit policies
- Log the offending node type at the boundary before DMN execution
When it happens
Trigger: A DMN expression (e.g. collection hit policy / FEEL 'in' checks) passes a JSON value whose node type (object, number-node variants, boolean, null) is not handled by getCollectionFromArrayNode's type switch.
Common situations: Passing a JSON object where an array of scalars is expected in a collection rule; Jackson JsonNode subtypes produced by custom deserializers; rule input variables serialized as JSON with unexpected element types.
Understand the failure class
Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.
Related errors
- Can only use a collection of String elements for…
- Cannot convert event payload
- Cannot convert value of type
- condition expression returns non-Boolean
- Converter can only convert…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/d640d52e9cee182c.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java:95
protected static Object getJsonValue(FlowableJsonNode jsonNode) {
if (jsonNode.isBoolean()) {
return jsonNode.booleanValue();
}
if (jsonNode.isNull()) {
return null;
}
if (jsonNode.isNumber()) {
return getNumberValue(jsonNode.asString());
}
if (jsonNode.isString()) {
return jsonNode.asString();
}
LOGGER.warn("Json Node {} is not supported", jsonNode.getImplementationValue().getClass());
return null;
}
protected static List<Object> split(String str, Class<?> collectionType) {
String regex;
if (str.contains("\"")) {
// only split on comma between matching quotes
regex = ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)";
} else {
regex = ",";
}
return Stream.of(str.split(regex))
.map(elem -> formatElementValue(elem.trim(), collectionType))
.collect(Collectors.toList());
}
protected static Object getFormattedValue(Object value, Object inputCollection) {View on GitHub (pinned to d6d39ce1c6)