{"record":{"id":"2051da71afab16af","repo":"flowable/flowable-engine","slug":"planiteminstanceid-is-null-2051da","errorCode":null,"errorMessage":"planItemInstanceId is null","messagePattern":"planItemInstanceId is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetPlanItemVariableInstancesCmd.java","lineNumber":42,"sourceCode":"import org.flowable.common.engine.impl.interceptor.CommandContext;\nimport org.flowable.variable.api.persistence.entity.VariableInstance;\n\npublic class GetPlanItemVariableInstancesCmd implements Command<Map<String, VariableInstance>>, Serializable {\n\n    private static final long serialVersionUID = 1L;\n    \n    protected String planItemInstanceId;\n\n    public GetPlanItemVariableInstancesCmd(String planItemInstanceId) {\n        this.planItemInstanceId = planItemInstanceId;\n    }\n\n    @Override\n    public Map<String, VariableInstance> execute(CommandContext commandContext) {\n\n        // Verify existence of execution\n        if (planItemInstanceId == null) {\n            throw new FlowableIllegalArgumentException(\"planItemInstanceId is null\");\n        }\n\n        PlanItemInstanceEntity planItemInstance = CommandContextUtil.getPlanItemInstanceEntityManager(commandContext).findById(planItemInstanceId);\n\n        if (planItemInstance == null) {\n            throw new FlowableObjectNotFoundException(\"plan item instance \" + planItemInstanceId + \" doesn't exist\", PlanItemInstance.class);\n        }\n\n        return planItemInstance.getVariableInstancesLocal();\n    }\n}\n","sourceCodeStart":24,"sourceCodeEnd":54,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetPlanItemVariableInstancesCmd.java#L24-L54","documentation":"GetPlanItemVariableInstancesCmd throws FlowableIllegalArgumentException('planItemInstanceId is null') as its first validation step in execute(). It fetches all local VariableInstance objects for the plan item, but refuses to run when the id argument is missing. No entity lookup occurs in this case.","triggerScenarios":"Calling getPlanItemVariableInstances(planItemInstanceId) with a null id — usually because the id variable was never assigned, an upstream resolver failed, or a request body lacked the id field.","commonSituations":"Optional id fields in DTOs left unset; loops over plan items where some resolutions fail; script/expression contexts producing null; misuse of the API with case ids.","solutions":["Guarantee a non-null, resolved plan item id before invoking the API.","Add Objects.requireNonNull checks in wrapper code.","Filter out items lacking ids before batch variable retrieval.","Investigate the upstream resolution path that yielded null."],"exampleFix":"// before\nMap<String, VariableInstance> vars = cmmnRuntimeService.getPlanItemVariableInstances(planItemId);\n// after\nObjects.requireNonNull(planItemId, \"planItemInstanceId must be set\");\nMap<String, VariableInstance> vars = cmmnRuntimeService.getPlanItemVariableInstances(planItemId);","handlingStrategy":"validation","validationCode":"Objects.requireNonNull(planItemInstanceId, \"planItemInstanceId is required\");","typeGuard":"boolean hasPlanItemId(String id) { return id != null && !id.trim().isEmpty(); }","tryCatchPattern":"try {\n    vars = cmmnRuntimeService.getPlanItemVariableInstances(planItemInstanceId);\n} catch (FlowableIllegalArgumentException e) {\n    log.warn(\"Missing plan item id for variable read\");\n    vars = Collections.emptyMap();\n}","preventionTips":["Null-check ids before bulk variable reads","Make ids mandatory in request DTOs","Test null-id error paths explicitly","Fix upstream resolution returning null ids"],"tags":["flowable","cmmn","null-argument","variables"],"backgroundTag":"null-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}