{"record":{"id":"c8822550c4dca630","repo":"flowable/flowable-engine","slug":"planiteminstanceid-is-null-c88225","errorCode":null,"errorMessage":"planItemInstanceId is null","messagePattern":"planItemInstanceId is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/RemoveLocalVariableCmd.java","lineNumber":38,"sourceCode":"import org.flowable.common.engine.impl.interceptor.CommandContext;\n\n/**\n * @author Tijs Rademakers\n */\npublic class RemoveLocalVariableCmd implements Command<Void> {\n    \n    protected String planItemInstanceId;\n    protected String variableName;\n    \n    public RemoveLocalVariableCmd(String planItemInstanceId, String variableName) {\n        this.planItemInstanceId = planItemInstanceId;\n        this.variableName = variableName;\n    }\n    \n    @Override\n    public Void execute(CommandContext commandContext) {\n        if (planItemInstanceId == null) {\n            throw new FlowableIllegalArgumentException(\"planItemInstanceId is null\");\n        }\n        if (variableName == null) {\n            throw new FlowableIllegalArgumentException(\"variableName 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.removeVariable(variableName);\n        \n        return null;\n    }\n\n}\n","sourceCodeStart":20,"sourceCodeEnd":54,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/RemoveLocalVariableCmd.java#L20-L54","documentation":"Thrown as FlowableIllegalArgumentException by RemoveLocalVariableCmd when the planItemInstanceId supplied to remove a local variable from a plan item instance is null. The command validates its arguments before looking up the plan item instance.","triggerScenarios":"Calling CmmnRuntimeService.removeLocalVariable(null, variableName) (or the plan-item variant) with a null plan item instance id.","commonSituations":"A variable or lookup that should have produced the plan item instance id returned null; accidentally calling the plan-item overload with values swapped.","solutions":["Fetch a valid plan item instance id via runtimeService.createPlanItemInstanceQuery() before removing the variable","Add a null/empty check on the caller side and fail fast with a clear message","Fix the upstream code that yields the null id"],"exampleFix":"// before\nruntimeService.removeLocalVariable(planItemInstanceId, \"score\"); // id was null\n// after\nif (planItemInstanceId != null) {\n    runtimeService.removeLocalVariable(planItemInstanceId, \"score\");\n}","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"boolean canRemove = planItemInstanceId != null && variableName != null;","tryCatchPattern":"try { runtimeService.removeLocalVariable(planItemInstanceId, variableName); }\ncatch (FlowableIllegalArgumentException e) { /* null argument */ }","preventionTips":["Validate ids before invoking runtime APIs","Use planItemInstanceQuery to obtain ids","Fail fast at call sites with clear messages"],"tags":["null","variable","plan-item","argument"],"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-18T11:17:12.947Z"}