flowable/flowable-engine · error · FlowableIllegalArgumentException

resourceNameLike is null

Error message

resourceNameLike is null

What it means

Flowable's CaseDefinitionQueryImpl throws FlowableIllegalArgumentException when caseDefinitionResourceNameLike(null) is called. The query builder validates each filter argument eagerly so that malformed queries fail at construction time rather than producing broken SQL or silent empty results at execution. Passing null here is never meaningful because a null 'like' filter is simply omitted.

Solutions

  1. Check the resourceNameLike value for null and only call caseDefinitionResourceNameLike when it is non-null.
  2. If an empty/absent filter should match everything, skip the method call entirely (do not pass null or empty string).
  3. If null indicates a bug, fix the upstream producer of the value (missing config key, unbound request parameter).

Example fix

// before
query.caseDefinitionResourceNameLike(request.getResourceNameLike());

// after
if (request.getResourceNameLike() != null) {
    query.caseDefinitionResourceNameLike(request.getResourceNameLike());
}
Defensive patterns

Strategy: validation

Validate before calling

if (resourceNameLike != null) {
    query.caseDefinitionResourceNameLike(resourceNameLike);
}

Type guard

boolean hasFilter(String s) { return s != null && !s.isEmpty(); }

Try / catch

try {
    query.caseDefinitionResourceNameLike(value);
} catch (FlowableIllegalArgumentException e) {
    if (!e.getMessage().contains("resourceNameLike")) throw e;
    // fall back to unfiltered query
    query = repositoryService.createCaseDefinitionQuery();
}

Prevention

When it happens

Trigger: Calling caseDefinitionResourceNameLike(null) on a CaseDefinitionQuery (or CaseDefinitionQueryImpl), typically when the filter value comes from a variable, request parameter, or map lookup that is missing.

Common situations: Building dynamic queries from optional REST query parameters where the caller does not check for null before forwarding the value; configuration maps with missing keys; refactors that change the default of a local variable to null instead of skipping the filter call.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/9f63800510132d0d. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/repository/CaseDefinitionQueryImpl.java:206

            throw new FlowableIllegalArgumentException("keyLike is null");
        }
        this.keyLike = keyLike;
        return this;
    }

    @Override
    public CaseDefinitionQueryImpl caseDefinitionResourceName(String resourceName) {
        if (resourceName == null) {
            throw new FlowableIllegalArgumentException("resourceName is null");
        }
        this.resourceName = resourceName;
        return this;
    }

    @Override
    public CaseDefinitionQueryImpl caseDefinitionResourceNameLike(String resourceNameLike) {
        if (resourceNameLike == null) {
            throw new FlowableIllegalArgumentException("resourceNameLike is null");
        }
        this.resourceNameLike = resourceNameLike;
        return this;
    }

    @Override
    public CaseDefinitionQueryImpl caseDefinitionVersion(Integer version) {
        checkVersion(version);
        this.version = version;
        return this;
    }

    @Override
    public CaseDefinitionQuery caseDefinitionVersionGreaterThan(Integer caseDefinitionVersion) {
        checkVersion(caseDefinitionVersion);
        this.versionGt = caseDefinitionVersion;
        return this;
    }

View on GitHub (pinned to d6d39ce1c6)