{"record":{"id":"25ffeff70e92e0bc","repo":"flowable/flowable-engine","slug":"enabledafter-is-null","errorCode":null,"errorMessage":"enabledAfter is null","messagePattern":"enabledAfter 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":428,"sourceCode":"    }\n\n    @Override\n    public PlanItemInstanceQuery planItemInstanceLastEnabledBefore(Date enabledBefore) {\n        if (enabledBefore == null) {\n            throw new FlowableIllegalArgumentException(\"enabledBefore is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.lastEnabledBefore = enabledBefore;\n        } else {\n            this.lastEnabledBefore = enabledBefore;\n        }\n        return this;\n    }\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;","sourceCodeStart":410,"sourceCodeEnd":446,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/PlanItemInstanceQueryImpl.java#L410-L446","documentation":"planItemInstanceLastEnabledAfter(Date) throws FlowableIllegalArgumentException with message 'enabledAfter is null' when given a null Date. The CMMN query builder validates each date filter eagerly so invalid queries fail at call time rather than at query execution. Null is not a valid filter bound.","triggerScenarios":"Invoking planItemInstanceLastEnabledAfter(null) on a PlanItemInstanceQuery, e.g. when a lookup of the 'enabled after' timestamp returned null or a request field was absent.","commonSituations":"Optional filters wired directly from REST query params; null return from a utility that fetches reference dates; Spring @RequestParam defaults omitted; copy-paste refactors renaming variables but keeping null initializers.","solutions":["Supply a real Date instance to the method.","Conditionally chain the filter only when the value is non-null.","Coalesce to a sensible default date before calling.","Catch FlowableIllegalArgumentException and rebuild the query without the filter if null is acceptable."],"exampleFix":"// before\nquery.planItemInstanceLastEnabledAfter(filter.getEnabledAfter()); // may be null\n// after\nif (filter.getEnabledAfter() != null) {\n    query.planItemInstanceLastEnabledAfter(filter.getEnabledAfter());\n}","handlingStrategy":"validation","validationCode":"if (enabledAfter == null) {\n    throw new IllegalArgumentException(\"enabledAfter must be a non-null Date\");\n}\nquery.planItemInstanceLastEnabledAfter(enabledAfter);","typeGuard":"boolean present(Date d) { return d != null; }","tryCatchPattern":"try {\n    query.planItemInstanceLastEnabledAfter(enabledAfter);\n} catch (FlowableIllegalArgumentException e) {\n    query = cmmnRuntimeService.createPlanItemInstanceQuery();\n}","preventionTips":["Null-check every date filter before applying it","Coalesce absent dates to defaults at the service boundary","Prefer conditional chaining over null arguments","Cover optional-filter paths in integration tests"],"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"}