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
- Format the event as '<type>:<name>' using a registered provider type (e.g. 'sqs:', 'conductor:', 'amqp:').
- Check the event handler's event field in your workflow/event metadata for a missing prefix.
- 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
- Always format event identifiers as '<providerType>:<name>'.
- Validate event-handler definitions at registration time so missing prefixes fail early.
- Ensure ${...} placeholders resolve to values that still contain the ':' prefix.
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
- Unknown queue type %s
- Exchange name is undefined
- Exchange type is undefined
- Queue name is undefined
- Workflow message queue for workflowId={} has reached the max
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/139c6ab443adfa08.
Report an issue: GitHub.