flowable/flowable-engine · error · FlowableIllegalArgumentException

case definition tenantId is null

Error message

case definition tenantId is null

What it means

caseDefinitionTenantIdLike in CaseDefinitionQueryImpl throws FlowableIllegalArgumentException with "case definition tenantId is null" when the tenantIdLike argument is null. The 'like' variant accepts SQL-style wildcard patterns (e.g. "acme-%") but never null; omit the call for an unfiltered query.

Solutions

  1. Guard with a null check and call caseDefinitionTenantIdLike only when a pattern is present.
  2. Use an explicit wildcard like "%" if a broad match is intended, instead of null.
  3. Fix the upstream source of the pattern so it produces an empty-absent signal rather than null.

Example fix

// before
query.caseDefinitionTenantIdLike(pattern);

// after
if (pattern != null) {
    query.caseDefinitionTenantIdLike(pattern);
}
Defensive patterns

Strategy: validation

Validate before calling

if (tenantIdLike != null) {
    query.caseDefinitionTenantIdLike(tenantIdLike);
}

Type guard

boolean hasPattern(String p) { return p != null; }

Try / catch

try {
    query.caseDefinitionTenantIdLike(pattern);
} catch (FlowableIllegalArgumentException e) {
    if (!e.getMessage().contains("tenantId is null")) throw e;
    logger.warn("tenantIdLike filter skipped: null pattern");
}

Prevention

When it happens

Trigger: Calling caseDefinitionTenantIdLike(null), usually from a dynamic filter builder that forwards a null pattern variable.

Common situations: REST query params where the tenantLike filter is absent; template-driven queries with unsubstituted placeholders; mixing up an empty string (allowed) with null (rejected).

Related errors


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

Appendix: source

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

    @Override
    public CaseDefinitionQueryImpl latestVersion() {
        this.latest = true;
        return this;
    }

    @Override
    public CaseDefinitionQuery caseDefinitionTenantId(String tenantId) {
        if (tenantId == null) {
            throw new FlowableIllegalArgumentException("caseDefinition tenantId is null");
        }
        this.tenantId = tenantId;
        return this;
    }

    @Override
    public CaseDefinitionQuery caseDefinitionTenantIdLike(String tenantIdLike) {
        if (tenantIdLike == null) {
            throw new FlowableIllegalArgumentException("case definition tenantId is null");
        }
        this.tenantIdLike = tenantIdLike;
        return this;
    }

    @Override
    public CaseDefinitionQuery caseDefinitionWithoutTenantId() {
        this.withoutTenantId = true;
        return this;
    }

    @Override
    public CaseDefinitionQuery locale(String locale) {
        this.locale = locale;
        return this;
    }

    @Override

View on GitHub (pinned to d6d39ce1c6)