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
- Guard with a null check and call caseDefinitionTenantIdLike only when a pattern is present.
- Use an explicit wildcard like "%" if a broad match is intended, instead of null.
- 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
- Null-check 'like' patterns sourced from optional request parameters
- Distinguish empty string (allowed) from null (rejected)
- Build queries with a helper that skips null filters uniformly
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
- caseDefinition tenantId is null
- callback id is null
- callbackId is null
- deploymentTenantId is null
- deploymentTenantIdLike is null
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;
}
@OverrideView on GitHub (pinned to d6d39ce1c6)