{"record":{"id":"afc3efc394552a6c","repo":"flowable/flowable-engine","slug":"callbacktype-is-null","errorCode":null,"errorMessage":"callbackType is null","messagePattern":"callbackType is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceQueryImpl.java","lineNumber":661,"sourceCode":"    }\n\n    @Override\n    public CaseInstanceQuery caseInstanceCallbackIds(Set<String> callbackIds) {\n        if (callbackIds == null || callbackIds.isEmpty()) {\n            throw new FlowableIllegalArgumentException(\"callbackIds is null or empty\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.callbackIds = callbackIds;\n        } else {\n            this.callbackIds = callbackIds;\n        }\n        return this;\n    }\n\n    @Override\n    public CaseInstanceQuery caseInstanceCallbackType(String callbackType) {\n        if (callbackType == null) {\n            throw new FlowableIllegalArgumentException(\"callbackType is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.callbackType = callbackType;\n        } else {\n            this.callbackType = callbackType;\n        }\n        return this;\n    }\n    \n    @Override\n    public CaseInstanceQuery parentCaseInstanceId(String parentCaseInstanceId) {\n        if (parentCaseInstanceId == null) {\n            throw new FlowableIllegalArgumentException(\"parentCaseInstanceId is null\");\n        }\n        if (inOrStatement) {\n            this.currentOrQueryObject.parentCaseInstanceId = parentCaseInstanceId;\n        } else {\n            this.parentCaseInstanceId = parentCaseInstanceId;","sourceCodeStart":643,"sourceCodeEnd":679,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceQueryImpl.java#L643-L679","documentation":"FlowableIllegalArgumentException thrown by CaseInstanceQueryImpl.caseInstanceCallbackType(String) when callbackType is null. The query API treats callback type as a required value when filtering; null is not a valid filter. Supply a non-null callback type string.","triggerScenarios":"Calling caseInstanceCallbackType(null) on a CaseInstanceQuery, directly or via an or() statement where a variable resolved to null.","commonSituations":"Mapping an optional DTO field straight into the query; null callback type in a case instance model; typos in getter chains returning null.","solutions":["Pass a non-null callbackType string.","Skip the filter call when the value is absent.","Default to a known callback type constant if one applies.","Verify where the value originates (config/DTO) and why it is null."],"exampleFix":"// before\nquery.caseInstanceCallbackType(dto.getCallbackType()); // null\n// after\nif (dto.getCallbackType() != null) {\n    query.caseInstanceCallbackType(dto.getCallbackType());\n}","handlingStrategy":"validation","validationCode":"if (callbackType != null) { query.caseInstanceCallbackType(callbackType); }","typeGuard":"boolean hasText(String s) { return s != null && !s.trim().isEmpty(); }","tryCatchPattern":"try { query.caseInstanceCallbackType(type); } catch (FlowableIllegalArgumentException e) { log.warn(\"callbackType filter rejected: {}\", e.getMessage()); }","preventionTips":["Never pass nullable DTO fields directly into required filter setters.","Wrap optional filters in if-present checks.","Define constants for valid callback types."],"tags":["flowable","cmmn","query","null-check"],"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"}