flowable/flowable-engine · error · FlowableObjectNotFoundException
User " + propertyValue + " does not exist
Error message
User " + propertyValue + " does not exist
What it means
UserFormType converts a form value into a model value by validating that the referenced user exists in the Flowable identity tables. When the given username matches no user in the default process engine's identity service, it throws FlowableObjectNotFoundException with User.class as the entity type.
Solutions
- Confirm the user exists via identityService.createUserQuery().userId(name).count() before using it as a form value.
- Sync your identity data: if users live in LDAP/AD, configure the LDAP identity service integration or import users into ACT_ID_USER.
- Check which ProcessEngine is the default; wire the form type to the engine whose identity store actually contains the user.
- Fix the username spelling/case in the form value or process configuration.
Example fix
// before
String value = userFormType.convertFormValueToModelValue("john.doe");
// after
long count = identityService.createUserQuery().userId("john.doe").count();
if (count == 0) { throw new IllegalArgumentException("Unknown user john.doe"); }
String value = userFormType.convertFormValueToModelValue("john.doe"); Defensive patterns
Strategy: validation
Validate before calling
long count = ProcessEngines.getDefaultProcessEngine().getIdentityService().createUserQuery().userId(userName).count();
if (count > 0) { value = formType.convertFormValueToModelValue(userName); } Type guard
boolean userExists(String id) { return id != null && ProcessEngines.getDefaultProcessEngine().getIdentityService().createUserQuery().userId(id).count() > 0; } Try / catch
try { value = formType.convertFormValueToModelValue(userName); } catch (FlowableObjectNotFoundException e) { /* unknown user in identity store */ } Prevention
- Pre-validate usernames against identityService before form conversion
- Keep ACT_ID_USER in sync with your identity provider (LDAP/AD import)
- Confirm which ProcessEngine is the default in your deployment
When it happens
Trigger: Calling convertFormValueToModelValue with a non-null propertyValue string that does not match any user returned by identityService.createUserQuery().userId(propertyValue) — i.e. count == 0.
Common situations: Typo or wrong casing in the assignee/candidate username in form or process variables, users stored in an external identity provider (LDAP/AD) not synced into Flowable's ACT_ID_USER tables, or pointing at the wrong process engine (getDefaultProcessEngine) whose database lacks the user.
Understand the failure class
Background: "User not found", "Invalid user", and "does not exist": what missing-user lookup errors mean across Rocket.Chat, LiteLLM, Phabricator, rustfs, and pnpm — this error's family across 10 libraries.
Related errors
- form property '" + id + "' is not writable
- form property '" + id + "' is required
- formInfo is null
- invalid date value " + propertyValue
- Invalid value for enum form property: + value
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/846541864dfe8da9.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-rest/src/main/java/org/flowable/rest/form/UserFormType.java:45
private static final long serialVersionUID = 1L;
public static final String TYPE_NAME = "user";
@Override
public String getName() {
return TYPE_NAME;
}
@Override
public Object convertFormValueToModelValue(String propertyValue) {
// Check if user exists
if (propertyValue != null) {
// TODO: perhaps better wiring mechanism for service
long count = ProcessEngines.getDefaultProcessEngine().getIdentityService().createUserQuery().userId(propertyValue).count();
if (count == 0) {
throw new FlowableObjectNotFoundException("User " + propertyValue + " does not exist", User.class);
}
return propertyValue;
}
return null;
}
@Override
public String convertModelValueToFormValue(Object modelValue) {
return (String) modelValue;
}
}
View on GitHub (pinned to d6d39ce1c6)