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

  1. Guard the setter call with a null check and skip it when the like-expression is absent
  2. Pass an empty string or a concrete pattern (e.g. "acme-%") instead of null if a filter is genuinely wanted
  3. 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

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


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)