flowable/flowable-engine · error · FlowableIllegalArgumentException

nameLikeIgnoreCase is null

Error message

nameLikeIgnoreCase is null

What it means

Flowable throws FlowableIllegalArgumentException when processDefinitionNameLikeIgnoreCase(null) is called. Case-insensitive like filters must receive a concrete pattern string; null cannot be translated into a valid SQL LIKE clause. The check happens immediately in the query builder to fail fast.

Source

Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/ProcessDefinitionQueryImpl.java:148

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

    @Override
    public ProcessDefinitionQueryImpl processDefinitionNameLike(String nameLike) {
        if (nameLike == null) {
            throw new FlowableIllegalArgumentException("nameLike is null");
        }
        this.nameLike = nameLike;
        return this;
    }

    @Override
    public ProcessDefinitionQueryImpl processDefinitionNameLikeIgnoreCase(String nameLikeIgnoreCase) {
        if (nameLikeIgnoreCase == null) {
            throw new FlowableIllegalArgumentException("nameLikeIgnoreCase is null");
        }
        this.nameLikeIgnoreCase = nameLikeIgnoreCase;
        return this;
    }

    @Override
    public ProcessDefinitionQueryImpl deploymentId(String deploymentId) {
        if (deploymentId == null) {
            throw new FlowableIllegalArgumentException("id is null");
        }
        this.deploymentId = deploymentId;
        return this;
    }

    @Override
    public ProcessDefinitionQueryImpl deploymentIds(Set<String> deploymentIds) {
        if (deploymentIds == null) {
            throw new FlowableIllegalArgumentException("ids are null");

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Provide a non-null pattern, e.g. processDefinitionNameLikeIgnoreCase("%report%").
  2. Conditionally apply the filter only when the value is non-null.
  3. Normalize nulls to a sentinel before calling (though skipping the filter is usually better than a catch-all pattern).

Example fix

// before
query.processDefinitionNameLikeIgnoreCase(searchTerm);
// after
if (searchTerm != null && !searchTerm.isEmpty()) {
    query.processDefinitionNameLikeIgnoreCase("%" + searchTerm.toLowerCase() + "%");
}
Defensive patterns

Strategy: validation

Validate before calling

if (nameLikeIgnoreCase != null && !nameLikeIgnoreCase.isEmpty()) {
    query.processDefinitionNameLikeIgnoreCase(nameLikeIgnoreCase.toLowerCase());
}

Type guard

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

Try / catch

try {
    query.processDefinitionNameLikeIgnoreCase(term);
} catch (org.flowable.common.engine.api.FlowableIllegalArgumentException e) {
    log.warn("Ignoring null/invalid nameLikeIgnoreCase filter");
}

Prevention

When it happens

Trigger: Calling repositoryService.createProcessDefinitionQuery().processDefinitionNameLikeIgnoreCase(null), typically when the ignore-case variant was substituted for processDefinitionNameLike and the source variable was never set.

Common situations: Migrating queries to case-insensitive matching and forgetting that the new method has the same null guard; optional search boxes whose value is null rather than empty string; DTOs with unpopulated filter fields.

Related errors


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