flowable/flowable-engine · error · FlowableIllegalArgumentException

configuration is null

Error message

configuration is null

What it means

EventSubscriptionQueryImpl.configuration() validates that the configuration value (typically the correlation/configuration column of an event subscription, e.g. a signal or message key) is non-null. Flowable throws FlowableIllegalArgumentException because null configuration cannot be matched in the generated SQL predicate.

Solutions

  1. Validate the configuration string before calling configuration(), and reject or default at the caller boundary
  2. Skip the configuration() call when filtering by configuration is not intended
  3. Fix the upstream source (variable, request field) to always carry the expected value

Example fix

// before
query.configuration(signalName);

// after
Objects.requireNonNull(signalName, "signalName required");
query.configuration(signalName);
Defensive patterns

Strategy: validation

Validate before calling

Objects.requireNonNull(configuration, "configuration must not be null");

Type guard

boolean hasConfiguration(String c) { return c != null && !c.isBlank(); }

Try / catch

try {
    query.configuration(configuration);
} catch (FlowableIllegalArgumentException e) {
    throw new BadRequestException("configuration is required", e);
}

Prevention

When it happens

Trigger: Calling eventSubscriptionQuery.configuration(null), usually when the configuration value originates from an unset variable, a message/signal name that was not provided, or a lookup miss.

Common situations: Filtering event subscriptions by signal/message name where the name is supplied by a caller, a process variable, or an API payload that omitted it.

Related errors


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

Appendix: source

Thrown at modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/impl/EventSubscriptionQueryImpl.java:434

        }

        return this;
    }

    @Override
    public EventSubscriptionQuery withoutTenantId() {
        if (inOrStatement) {
            this.currentOrQueryObject.withoutTenantId = true;
        } else {
            this.withoutTenantId = true;
        }
        return this;
    }

    @Override
    public EventSubscriptionQueryImpl configuration(String configuration) {
        if (configuration == null) {
            throw new FlowableIllegalArgumentException("configuration is null");
        }

        if (inOrStatement) {
            this.currentOrQueryObject.configuration = configuration;
        } else {
            this.configuration = configuration;
        }

        return this;
    }

    @Override
    public EventSubscriptionQueryImpl configurations(Collection<String> configurations) {
        if (configurations == null) {
            throw new FlowableIllegalArgumentException("configurations are null");
        }

        if (inOrStatement) {

View on GitHub (pinned to d6d39ce1c6)