flowable/flowable-engine · error · FlowableIllegalArgumentException

Provided display name is null

Error message

Provided display name is null

What it means

FlowableIllegalArgumentException thrown by UserQueryImpl.userDisplayName when the displayName argument is null. The method sets an exact-match criterion on the user's display name and requires a concrete non-null string. The engine throws eagerly so misconfigured queries fail at the call site rather than during execution.

Solutions

  1. Pass a concrete display name: userDisplayName("John Doe")
  2. Apply the criterion conditionally: if (displayName != null) query.userDisplayName(displayName)
  3. Verify the configuration/source actually contains the display-name value before querying
  4. Use userDisplayNameLike("%doe%") with a valid pattern when only a partial match is known

Example fix

// before
User user = identityService.createUserQuery().userDisplayName(config.getDisplayName()).singleResult();

// after
if (config.getDisplayName() == null) {
    throw new IllegalStateException("display-name must be configured");
}
User user = identityService.createUserQuery().userDisplayName(config.getDisplayName()).singleResult();
Defensive patterns

Strategy: validation

Validate before calling

if (displayName == null) { throw new IllegalArgumentException("displayName is required"); }
identityService.createUserQuery().userDisplayName(displayName);

Type guard

boolean isPresent(String v) { return v != null && !v.trim().isEmpty(); }

Try / catch

try {
    query.userDisplayName(displayName);
} catch (FlowableIllegalArgumentException e) {
    log.warn("Missing display-name criterion: {}", e.getMessage());
}

Prevention

When it happens

Trigger: Calling createUserQuery().userDisplayName(null), or chaining it with a value resolved from configuration, a tenant setting, or an entity attribute that was null.

Common situations: Tenant/organization display-name lookups where the configured name is missing; copying display names from users/records that lack the attribute; property files with the key absent yielding null.

Related errors


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

Appendix: source

Thrown at modules/flowable-idm-engine/src/main/java/org/flowable/idm/engine/impl/UserQueryImpl.java:168

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

    @Override
    public UserQuery userFullNameLikeIgnoreCase(String fullNameLikeIgnoreCase) {
        if (fullNameLikeIgnoreCase == null) {
            throw new FlowableIllegalArgumentException("Provided full name is null");
        }
        this.fullNameLikeIgnoreCase = fullNameLikeIgnoreCase.toLowerCase();
        return this;
    }
    
    @Override
    public UserQuery userDisplayName(String displayName) {
        if (displayName == null) {
            throw new FlowableIllegalArgumentException("Provided display name is null");
        }
        this.displayName = displayName;
        return this;
    }

    @Override
    public UserQuery userDisplayNameLike(String displayNameLike) {
        if (displayNameLike == null) {
            throw new FlowableIllegalArgumentException("Provided display name is null");
        }
        this.displayNameLike = displayNameLike;
        return this;
    }

    @Override
    public UserQuery userDisplayNameLikeIgnoreCase(String displayNameLikeIgnoreCase) {
        if (displayNameLikeIgnoreCase == null) {
            throw new FlowableIllegalArgumentException("Provided display name is null");

View on GitHub (pinned to d6d39ce1c6)