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
- Pass a concrete display name: userDisplayName("John Doe")
- Apply the criterion conditionally: if (displayName != null) query.userDisplayName(displayName)
- Verify the configuration/source actually contains the display-name value before querying
- 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
- Fail fast on missing configuration values (e.g. tenant display name) before querying
- Null-check entity/attribute sources of the display name
- Use conditional chaining when the criterion is optional
- Prefer exact-match userDisplayName only with verified non-null values; use the Like variants for partial input
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
- Provided full name is null
- Provided last name is null
- activatedBefore is null
- activity tenant id is null
- after time is null
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)