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

  1. Confirm the user exists via identityService.createUserQuery().userId(name).count() before using it as a form value.
  2. Sync your identity data: if users live in LDAP/AD, configure the LDAP identity service integration or import users into ACT_ID_USER.
  3. Check which ProcessEngine is the default; wire the form type to the engine whose identity store actually contains the user.
  4. 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

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


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)