{"record":{"id":"b00ebdc64f6362b7","repo":"flowable/flowable-engine","slug":"category-is-null-b00ebd","errorCode":null,"errorMessage":"category is null","messagePattern":"category is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"warning","filePath":"modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/DecisionQueryImpl.java","lineNumber":88,"sourceCode":"        super(commandExecutor);\n    }\n\n    @Override\n    public DecisionQueryImpl decisionId(String decisionId) {\n        this.id = decisionId;\n        return this;\n    }\n\n    @Override\n    public DmnDecisionQuery decisionIds(Set<String> decisionIds) {\n        this.ids = decisionIds;\n        return this;\n    }\n\n    @Override\n    public DecisionQueryImpl decisionCategory(String category) {\n        if (category == null) {\n            throw new FlowableIllegalArgumentException(\"category is null\");\n        }\n        this.category = category;\n        return this;\n    }\n\n    @Override\n    public DecisionQueryImpl decisionCategoryLike(String categoryLike) {\n        if (categoryLike == null) {\n            throw new FlowableIllegalArgumentException(\"categoryLike is null\");\n        }\n        this.categoryLike = categoryLike;\n        return this;\n    }\n\n    @Override\n    public DecisionQueryImpl decisionCategoryNotEquals(String categoryNotEquals) {\n        if (categoryNotEquals == null) {\n            throw new FlowableIllegalArgumentException(\"categoryNotEquals is null\");","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/DecisionQueryImpl.java#L70-L106","documentation":"DecisionQueryImpl.decisionCategory rejects a null category argument with FlowableIllegalArgumentException. Query criteria setters in Flowable validate non-null inputs up front so the failure surfaces at query construction rather than as a database error at execution time.","triggerScenarios":"Calling decisionRepositoryService.createDecisionQuery().decisionCategory(variableThatIsNull).","commonSituations":"Category value read from a request parameter, config, or upstream record that turned out to be null.","solutions":["Guard the caller: only call decisionCategory when the value is non-null.","If 'any category' is intended, simply omit the decisionCategory call instead of passing null.","Default the value at the source (e.g. Optional.ofNullable(category).orElse(DEFAULT_CATEGORY))."],"exampleFix":"// before\nquery.decisionCategory(request.getCategory()); // may be null\n\n// after\nif (request.getCategory() != null) {\n    query.decisionCategory(request.getCategory());\n}","handlingStrategy":"validation","validationCode":"if (category != null) { query.decisionCategory(category); }","typeGuard":"boolean hasCategory = (category != null && !category.isBlank());","tryCatchPattern":"try {\n    query.decisionCategory(category);\n} catch (FlowableIllegalArgumentException e) {\n    LOGGER.warn(\"decisionCategory called with null; skipping filter\");\n}","preventionTips":["Wrap optional query filters in null checks","Normalize request parameters to empty-string/absent rather than null where possible","Omit filter calls entirely when the value is unknown"],"tags":["null-check","query","validation","java"],"backgroundTag":"null-argument","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}