flowable/flowable-engine · error · FlowableIllegalArgumentException
Only one of eventDefinitionId or eventDefinitionKey should…
Error message
Only one of eventDefinitionId or eventDefinitionKey should be set.
What it means
REST request validation in EventInstanceCollectionResource.validateRequestParameters: both eventDefinitionId and eventDefinitionKey were supplied simultaneously; the endpoint requires exactly one, and the ambiguity is rejected.
Solutions
- Remove one of the two fields so exactly one is set.
- Null out the unused field programmatically before sending.
- If id is known, prefer eventDefinitionId and delete the key.
- Catch FlowableIllegalArgumentException and report the conflicting fields.
Example fix
// before
{ "eventDefinitionId": "42", "eventDefinitionKey": "myEvent", ... }
// after
{ "eventDefinitionKey": "myEvent", ... } Defensive patterns
Strategy: validation
Validate before calling
int set = (req.getEventDefinitionId() != null ? 1 : 0)
+ (req.getEventDefinitionKey() != null ? 1 : 0);
if (set > 1) throw new IllegalArgumentException("Set only one of eventDefinitionId/eventDefinitionKey"); Type guard
null
Try / catch
try {
createEventInstance(req);
} catch (FlowableIllegalArgumentException e) {
logger.error("Conflicting event definition fields", e);
} Prevention
- Build requests from templates that keep only one field
- Null out defaults merged by client frameworks
- Prefer id when known, drop the key
When it happens
Trigger: POST body containing both eventDefinitionId and eventDefinitionKey non-null.
Common situations: Copying a request template and editing only one field; defaults merged by client frameworks; testing payloads that keep both fields populated.
Related errors
- A group or a user is required to create an identity link.
- A group or a user is required to create an identity link.
- A group or a user is required to create an identity link.
- A request body was expected when bulk updating tasks.
- Attachment content is required.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/5d86d2c9495f37d2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResource.java:127
if (StringUtils.isNotEmpty(request.getChannelDefinitionId())) {
channelModel = repositoryService.getChannelModelById(request.getChannelDefinitionId());
} else if (StringUtils.isNotEmpty(request.getTenantId())) {
channelModel = repositoryService.getChannelModelByKey(request.getChannelDefinitionKey(), request.getTenantId());
} else {
channelModel = repositoryService.getChannelModelByKey(request.getChannelDefinitionKey());
}
eventRegistry.eventReceived((InboundChannelModel) channelModel, request.getEventPayload().toString());
}
protected void validateRequestParameters(@RequestBody EventInstanceCreateRequest request) {
if (request.getEventDefinitionId() == null && request.getEventDefinitionKey() == null) {
throw new FlowableIllegalArgumentException("Either eventDefinitionId or eventDefinitionKey is required.");
}
int paramsSet = ((request.getEventDefinitionId() != null) ? 1 : 0) + ((request.getEventDefinitionKey() != null) ? 1 : 0);
if (paramsSet > 1) {
throw new FlowableIllegalArgumentException("Only one of eventDefinitionId or eventDefinitionKey should be set.");
}
if (request.getChannelDefinitionId() == null && request.getChannelDefinitionKey() == null) {
throw new FlowableIllegalArgumentException("Either channelDefinitionId or channelDefinitionKey is required.");
}
paramsSet = ((request.getChannelDefinitionId() != null) ? 1 : 0) + ((request.getChannelDefinitionKey() != null) ? 1 : 0);
if (paramsSet > 1) {
throw new FlowableIllegalArgumentException("Only one of eventDefinitionId or eventDefinitionKey should be set.");
}
}
}
View on GitHub (pinned to d6d39ce1c6)