{"record":{"id":"dafef412d23d944a","repo":"flowable/flowable-engine","slug":"variablenames-is-null","errorCode":null,"errorMessage":"variableNames is null","messagePattern":"variableNames is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/RemoveLocalVariablesCmd.java","lineNumber":43,"sourceCode":" * @author Tijs Rademakers\n */\npublic class RemoveLocalVariablesCmd implements Command<Void> {\n    \n    protected String planItemInstanceId;\n    protected Collection<String> variableNames;\n    \n    public RemoveLocalVariablesCmd(String planItemInstanceId, Collection<String> variableNames) {\n        this.planItemInstanceId = planItemInstanceId;\n        this.variableNames = variableNames;\n    }\n    \n    @Override\n    public Void execute(CommandContext commandContext) {\n        if (planItemInstanceId == null) {\n            throw new FlowableIllegalArgumentException(\"planItemInstanceId is null\");\n        }\n        if (variableNames == null) {\n            throw new FlowableIllegalArgumentException(\"variableNames is null\");\n        }\n     \n        PlanItemInstanceEntity planItemInstanceEntity = CommandContextUtil.getPlanItemInstanceEntityManager(commandContext).findById(planItemInstanceId);\n        if (planItemInstanceEntity == null) {\n            throw new FlowableObjectNotFoundException(\"No plan item instance found for id \" + planItemInstanceId, PlanItemInstanceEntity.class);\n        }\n        planItemInstanceEntity.removeVariables(variableNames);\n        \n        return null;\n    }\n\n}\n","sourceCodeStart":25,"sourceCodeEnd":56,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/RemoveLocalVariablesCmd.java#L25-L56","documentation":"Thrown as FlowableIllegalArgumentException by RemoveLocalVariablesCmd when the collection of variableNames to remove is null. Both a valid plan item instance id and a non-null variableNames collection are required.","triggerScenarios":"Calling CmmnRuntimeService.removeLocalVariables(planItemInstanceId, null).","commonSituations":"Building the name list from a nullable source (query result, config) without a default; conditional code paths that skipped populating the collection.","solutions":["Pass an initialized collection (use Collections.emptyList() to intentionally remove nothing)","Guard the call: only invoke when the name list is non-null and non-empty","Fix the upstream code that produced the null list"],"exampleFix":"// before\nruntimeService.removeLocalVariables(instanceId, variableNames); // null list\n// after\nList<String> names = resolveNames();\nif (names != null && !names.isEmpty()) {\n    runtimeService.removeLocalVariables(instanceId, names);\n}","handlingStrategy":"validation","validationCode":"boolean canRemove = variableNames != null && !variableNames.isEmpty();","typeGuard":null,"tryCatchPattern":"try { runtimeService.removeLocalVariables(id, variableNames); }\ncatch (FlowableIllegalArgumentException e) { /* null variableNames */ }","preventionTips":["Default to an empty list instead of null","Build name lists with non-null collections","Guard bulk APIs at call sites"],"tags":["null","variable","argument","collection"],"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-18T16:17:23.245Z"}