{"record":{"id":"ce539c949c0f83a4","repo":"flowable/flowable-engine","slug":"disabledbefore-is-null","errorCode":null,"errorMessage":"disabledBefore is null","messagePattern":"disabledBefore is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/PlanItemInstanceQueryImpl.java","lineNumber":441,"sourceCode":"    }\n\n    @Override\n    public PlanItemInstanceQuery planItemInstanceLastEnabledAfter(Date enabledAfter) {\n        if (enabledAfter == null) {\n            throw new FlowableIllegalArgumentException(\"enabledAfter is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.lastEnabledAfter = enabledAfter;\n        } else {\n            this.lastEnabledAfter = enabledAfter;\n        }\n        return this;\n    }\n\n    @Override\n    public PlanItemInstanceQuery planItemInstanceLastDisabledBefore(Date disabledBefore) {\n        if (disabledBefore == null) {\n            throw new FlowableIllegalArgumentException(\"disabledBefore is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.lastDisabledBefore = disabledBefore;\n        } else {\n            this.lastDisabledBefore = disabledBefore;\n        }\n        return this;\n    }\n\n    @Override\n    public PlanItemInstanceQuery planItemInstanceLastDisabledAfter(Date disabledAfter) {\n        if (disabledAfter == null) {\n            throw new FlowableIllegalArgumentException(\"disabledAfter is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.lastDisabledAfter = disabledAfter;\n        } else {\n            this.lastDisabledAfter = disabledAfter;","sourceCodeStart":423,"sourceCodeEnd":459,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/PlanItemInstanceQueryImpl.java#L423-L459","documentation":"planItemInstanceLastDisabledBefore(Date) throws FlowableIllegalArgumentException 'disabledBefore is null' when the argument is null. Flowable validates non-null date filters inside the query builder so that malformed criteria are rejected immediately. A null value yields no usable comparison predicate.","triggerScenarios":"Calling createPlanItemInstanceQuery().planItemInstanceLastDisabledBefore(null) — commonly because the disabledBefore field on a filter DTO was never populated.","commonSituations":"Report builders composing many optional date filters where one is left null; JSON request bodies omitting the field; timezone-parsing helpers returning null on bad input; tests exercising null handling.","solutions":["Pass a non-null Date to the method.","Wrap the builder call in a null check and skip the filter when absent.","Assign a default date when the input is missing.","Catch FlowableIllegalArgumentException as a last resort and drop the filter."],"exampleFix":"// before\nquery.planItemInstanceLastDisabledBefore(dto.getDisabledBefore()); // null when not set\n// after\nif (dto.getDisabledBefore() != null) {\n    query.planItemInstanceLastDisabledBefore(dto.getDisabledBefore());\n}","handlingStrategy":"validation","validationCode":"if (disabledBefore == null) {\n    throw new IllegalArgumentException(\"disabledBefore must be a non-null Date\");\n}\nquery.planItemInstanceLastDisabledBefore(disabledBefore);","typeGuard":"boolean nonNull(Date d) { return d != null; }","tryCatchPattern":"try {\n    query.planItemInstanceLastDisabledBefore(disabledBefore);\n} catch (FlowableIllegalArgumentException e) {\n    query = cmmnRuntimeService.createPlanItemInstanceQuery();\n}","preventionTips":["Apply date filters only when the bound exists","Make filter mapping code reject or skip nulls explicitly","Document which query filters are mandatory vs optional","Add regression tests for absent filter fields"],"tags":["java","flowable","cmmn","query","null-argument"],"backgroundTag":"null-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"}