{"record":{"id":"336181b584771a13","repo":"flowable/flowable-engine","slug":"variable-name-is-required","errorCode":null,"errorMessage":"Variable name is required","messagePattern":"Variable name is required","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseVariableResource.java","lineNumber":224,"sourceCode":"                @SuppressWarnings(\"unchecked\")\n                List<Object> variableObjects = (List<Object>) objectMapper.readValue(request.getInputStream(), List.class);\n                for (Object restObject : variableObjects) {\n                    RestVariable restVariable = objectMapper.convertValue(restObject, RestVariable.class);\n                    inputVariables.add(restVariable);\n                }\n                \n            } catch (Exception e) {\n                throw new FlowableIllegalArgumentException(\"Failed to serialize to a RestVariable instance\", e);\n            }\n\n            if (inputVariables == null || inputVariables.size() == 0) {\n                throw new FlowableIllegalArgumentException(\"Request didn't contain a list of variables to create.\");\n            }\n\n            Map<String, Object> variablesToSet = new HashMap<>();\n            for (RestVariable var : inputVariables) {\n                if (var.getName() == null) {\n                    throw new FlowableIllegalArgumentException(\"Variable name is required\");\n                }\n\n                Object actualVariableValue = restResponseFactory.getVariableValue(var);\n                variablesToSet.put(var.getName(), actualVariableValue);\n            }\n\n            if (!variablesToSet.isEmpty()) {\n                variableInterceptor.createVariables(variablesToSet);\n                Map<String, Object> setVariables = null;\n                if (variableType == CmmnRestResponseFactory.VARIABLE_PLAN_ITEM || scope == RestVariableScope.LOCAL) {\n                    if (async) {\n                        runtimeService.setLocalVariablesAsync(instanceId, variablesToSet);\n                        \n                    } else {\n                        runtimeService.setLocalVariables(instanceId, variablesToSet);\n                        setVariables = runtimeService.getLocalVariables(instanceId, variablesToSet.keySet());\n                    }\n                    ","sourceCodeStart":206,"sourceCodeEnd":242,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseVariableResource.java#L206-L242","documentation":"Guard in BaseVariableResource.createVariable: while converting the request payload to RestVariable(s), a variable object without a name was encountered; a variable cannot be stored on a case instance without a name.","triggerScenarios":"POST .../variables with an entry like {\"type\":\"string\",\"value\":\"x\"} — name is null.","commonSituations":"Hand-written JSON omitting 'name'; programmatically built payloads where null-named entries slip in; renaming a field to 'variableName' by mistake.","solutions":["Add a \"name\" property to every object in the variables array.","Validate client-side that each variable has a non-null name before sending.","Check for key typos ('Name', 'variableName') — the field must be exactly \"name\"."],"exampleFix":"// before\n[{\"type\": \"string\", \"value\": \"x\"}]\n// after\n[{\"name\": \"status\", \"type\": \"string\", \"value\": \"x\"}]","handlingStrategy":"validation","validationCode":"const bad = vars.filter(v => !v.name);\nif (bad.length) throw new Error(`Every variable needs a name; ${bad.length} missing`);","typeGuard":"function allNamed(vars) {\n  return Array.isArray(vars) && vars.every(v => typeof v.name === 'string' && v.name.length > 0);\n}","tryCatchPattern":"try {\n  await createVariables(id, vars);\n} catch (e) {\n  if (/Variable name is required/.test(e.message)) throw new Error('One of the variables lacks a \"name\" field');\n  throw e;\n}","preventionTips":["Validate each entry has a non-empty 'name' before submitting.","Use the exact field name 'name' — not variableName or key.","Unit-test payload builders with a null-name case."],"tags":["rest","validation","missing-field","variables"],"backgroundTag":"missing-required-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}