{"record":{"id":"d640d52e9cee182c","repo":"flowable/flowable-engine","slug":"json-node-is-not-supported","errorCode":null,"errorMessage":"Json Node {} is not supported","messagePattern":"Json Node (.+?) is not supported","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java","lineNumber":95,"sourceCode":"\n    protected static Object getJsonValue(FlowableJsonNode jsonNode) {\n        if (jsonNode.isBoolean()) {\n            return jsonNode.booleanValue();\n        }\n\n        if (jsonNode.isNull()) {\n            return null;\n        }\n\n        if (jsonNode.isNumber()) {\n            return getNumberValue(jsonNode.asString());\n        }\n\n        if (jsonNode.isString()) {\n            return jsonNode.asString();\n        }\n\n        LOGGER.warn(\"Json Node {} is not supported\", jsonNode.getImplementationValue().getClass());\n        return null;\n    }\n\n    protected static List<Object> split(String str, Class<?> collectionType) {\n        String regex;\n        if (str.contains(\"\\\"\")) {\n            // only split on comma between matching quotes\n            regex = \",(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)\";\n        } else {\n            regex = \",\";\n        }\n\n        return Stream.of(str.split(regex))\n            .map(elem -> formatElementValue(elem.trim(), collectionType))\n            .collect(Collectors.toList());\n    }\n\n    protected static Object getFormattedValue(Object value, Object inputCollection) {","sourceCodeStart":77,"sourceCodeEnd":113,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java#L77-L113","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nvars.put(\"items\", objectMapper.readTree(\"{\\\"a\\\":1}\"));\n// after\nvars.put(\"items\", Arrays.asList(\"a\", \"b\"));","handlingStrategy":"type-guard","validationCode":"if (jsonNode.isObject() || jsonNode.isBoolean()) throw new IllegalArgumentException(\"Collection elements must be scalar arrays\");","typeGuard":"boolean isSupportedScalarNode(JsonNode n) { return n.isString() || n.isNumber(); }","tryCatchPattern":null,"preventionTips":["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"],"tags":["dmn","json","type-mismatch","collection"],"backgroundTag":"type-mismatch","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"}