flowable/flowable-engine · error · FlowableIllegalArgumentException
deploymentTenantIdLike is null
Error message
deploymentTenantIdLike is null
What it means
AppDeploymentQueryImpl.deploymentTenantIdLike(String) throws FlowableIllegalArgumentException when tenantIdLike is null. Like the exact tenant filter, the like-filter is validated eagerly at setter time; null is not treated as 'no filter'. Omit the call entirely to skip tenant filtering.
Solutions
- Guard the setter call with a null check and skip it when the like-expression is absent
- Pass an empty string or a concrete pattern (e.g. "acme-%") instead of null if a filter is genuinely wanted
- Validate user-supplied filter input before mapping it onto the query
Example fix
// before
query.deploymentTenantIdLike(tenantPrefixPattern);
// after
if (tenantPrefixPattern != null) {
query.deploymentTenantIdLike(tenantPrefixPattern);
} Defensive patterns
Strategy: validation
Validate before calling
if (tenantIdLike != null && !tenantIdLike.isEmpty()) {
query.deploymentTenantIdLike(tenantIdLike);
} Type guard
boolean hasLikeFilter = tenantIdLike != null && !tenantIdLike.isBlank();
Try / catch
try {
query.deploymentTenantIdLike(pattern);
} catch (FlowableIllegalArgumentException e) {
pattern = null; // drop the filter
} Prevention
- Guard optional like-filters with null/empty checks before applying
- Sanitize user input into a valid wildcard pattern, never null
- Centralize query building in one helper that filters out null criteria
When it happens
Trigger: Calling deploymentTenantIdLike(null) on an AppDeploymentQueryImpl, usually when the like-expression is derived from user input or a config value that is absent.
Common situations: Search UIs passing an unset tenant-prefix filter straight through; scripts where a wildcard expression variable was never initialized.
Related errors
- callbackId is null
- Candidate group is null
- Candidate group list is null
- Candidate user is null
- Deployment id is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/ff2c2d146d31f22d.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/repository/AppDeploymentQueryImpl.java:132
throw new FlowableIllegalArgumentException("deploymentKey is null");
}
this.key = deploymentKey;
return this;
}
@Override
public AppDeploymentQueryImpl deploymentTenantId(String tenantId) {
if (tenantId == null) {
throw new FlowableIllegalArgumentException("deploymentTenantId is null");
}
this.tenantId = tenantId;
return this;
}
@Override
public AppDeploymentQueryImpl deploymentTenantIdLike(String tenantIdLike) {
if (tenantIdLike == null) {
throw new FlowableIllegalArgumentException("deploymentTenantIdLike is null");
}
this.tenantIdLike = tenantIdLike;
return this;
}
@Override
public AppDeploymentQueryImpl deploymentWithoutTenantId() {
this.withoutTenantId = true;
return this;
}
@Override
public AppDeploymentQueryImpl latest() {
if (key == null) {
throw new FlowableIllegalArgumentException("latest can only be used together with a deployment key");
}
this.latest = true;View on GitHub (pinned to d6d39ce1c6)