conductor-oss/conductor · error · IllegalArgumentException

Illegal event {}

Error message

Illegal event {}

What it means

Thrown by EventQueues.getQueue when the resolved event string contains no ':' separator. Event identifiers in Conductor are structured as '<type>:<queueURI>' (e.g. 'sqs:my-queue', 'conductor:my-event'). After parametersUtils.replace expands any ${...} placeholders, if the result has no colon the code cannot split type from URI and rejects it.

Source

Thrown at core/src/main/java/com/netflix/conductor/core/events/EventQueues.java:57

    public EventQueues(
            @Qualifier(EVENT_QUEUE_PROVIDERS_QUALIFIER) Map<String, EventQueueProvider> providers,
            ParametersUtils parametersUtils) {
        this.providers = providers;
        this.parametersUtils = parametersUtils;
    }

    public List<String> getProviders() {
        return providers.values().stream()
                .map(p -> p.getClass().getName())
                .collect(Collectors.toList());
    }

    @NonNull
    public ObservableQueue getQueue(String eventType) {
        String event = parametersUtils.replace(eventType).toString();
        int index = event.indexOf(':');
        if (index == -1) {
            throw new IllegalArgumentException("Illegal event " + event);
        }

        String type = event.substring(0, index);
        String queueURI = event.substring(index + 1);
        EventQueueProvider provider = providers.get(type);
        if (provider != null) {
            return provider.getQueue(queueURI);
        } else {
            throw new IllegalArgumentException("Unknown queue type " + type);
        }
    }
}

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Format the event as '<type>:<name>' using a registered provider type (e.g. 'sqs:', 'conductor:', 'amqp:').
  2. Check the event handler's event field in your workflow/event metadata for a missing prefix.
  3. If the value comes from a ${...} placeholder, ensure the resolved value still contains the '<type>:' prefix.

Example fix

// before
queue = eventQueues.getQueue("my-queue");
// after
queue = eventQueues.getQueue("sqs:my-queue");
Defensive patterns

Strategy: validation

Validate before calling

// Ensure event string contains a provider prefix
String event = parametersUtils.replace(eventType).toString();
if (event.indexOf(':') == -1) {
    throw new IllegalArgumentException(
        "Event must be '<type>:<name>', got: " + event);
}

Try / catch

try {
    ObservableQueue q = eventQueues.getQueue(eventType);
} catch (IllegalArgumentException e) {
    // missing ':' -> reformat event as '<type>:<name>'
}

Prevention

When it happens

Trigger: Calling getQueue with a string that has no colon, e.g. 'my-event' instead of 'sqs:my-event'. A workflow/event-handler definition whose event field omits the provider prefix. A ${...} placeholder that resolves to a value without a colon.

Common situations: Misconfigured event handler event name (missing provider prefix). Copy-paste of a queue name without its type. A parameter substitution that yields a bare name.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/139c6ab443adfa08. Report an issue: GitHub.