{"record":{"id":"54184de8d711705b","repo":"flowable/flowable-engine","slug":"resourcenamelike-is-null-54184d","errorCode":null,"errorMessage":"resourceNameLike is null","messagePattern":"resourceNameLike is null","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/DecisionQueryImpl.java","lineNumber":187,"sourceCode":"            throw new FlowableIllegalArgumentException(\"keyLike is null\");\n        }\n        this.keyLike = keyLike;\n        return this;\n    }\n\n    @Override\n    public DecisionQueryImpl decisionResourceName(String resourceName) {\n        if (resourceName == null) {\n            throw new FlowableIllegalArgumentException(\"resourceName is null\");\n        }\n        this.resourceName = resourceName;\n        return this;\n    }\n\n    @Override\n    public DecisionQueryImpl decisionResourceNameLike(String resourceNameLike) {\n        if (resourceNameLike == null) {\n            throw new FlowableIllegalArgumentException(\"resourceNameLike is null\");\n        }\n        this.resourceNameLike = resourceNameLike;\n        return this;\n    }\n\n    @Override\n    public DecisionQueryImpl decisionVersion(Integer version) {\n        checkVersion(version);\n        this.version = version;\n        return this;\n    }\n\n    @Override\n    public DmnDecisionQuery decisionVersionGreaterThan(Integer decisionVersion) {\n        checkVersion(decisionVersion);\n        this.versionGt = decisionVersion;\n        return this;\n    }","sourceCodeStart":169,"sourceCodeEnd":205,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/DecisionQueryImpl.java#L169-L205","documentation":"DecisionQueryImpl.decisionResourceNameLike(String) throws FlowableIllegalArgumentException when resourceNameLike is null. The LIKE pattern must be a concrete string (e.g. '%orders%.dmn') because it is embedded into a SQL LIKE clause; null is rejected at builder time.","triggerScenarios":"Calling decisionResourceNameLike(null) — usually a user-supplied search pattern from a UI or REST query parameter that is absent, or a forwarded optional method parameter.","commonSituations":"Wildcard search endpoints where the pattern field was left empty; config-driven filters where the pattern property is missing; test harnesses constructing queries with uninitialized fields.","solutions":["Skip calling decisionResourceNameLike when the pattern is null/empty instead of passing it through.","Provide a sensible default pattern like \"%\" to match all resources.","Validate user input at the API boundary and return a clean validation message rather than leaking this exception."],"exampleFix":"// before\nquery.decisionResourceNameLike(pattern);\n// after\nif (pattern != null && !pattern.isEmpty()) {\n    query.decisionResourceNameLike(pattern);\n}","handlingStrategy":"validation","validationCode":"if (pattern != null && !pattern.isEmpty()) {\n    query.decisionResourceNameLike(pattern);\n}","typeGuard":"boolean hasPattern(String p) { return p != null && !p.isEmpty(); }","tryCatchPattern":"try {\n    query.decisionResourceNameLike(pattern);\n} catch (FlowableIllegalArgumentException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"resourceName\")) {\n        pattern = \"%\";\n        query.decisionResourceNameLike(pattern);\n    } else { throw e; }\n}","preventionTips":["Sanitize user-supplied search patterns before use","Skip empty filters at the API boundary","Add tests covering null optional query parameters"],"tags":["java","flowable","dmn","null-check","query-builder"],"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"}