{"record":{"id":"5d86d2c9495f37d2","repo":"flowable/flowable-engine","slug":"only-one-of-eventdefinitionid-or-eventdefinitionke","errorCode":null,"errorMessage":"Only one of eventDefinitionId or eventDefinitionKey should be set.","messagePattern":"Only one of eventDefinitionId or eventDefinitionKey should be set\\.","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResource.java","lineNumber":127,"sourceCode":"        if (StringUtils.isNotEmpty(request.getChannelDefinitionId())) {\n            channelModel = repositoryService.getChannelModelById(request.getChannelDefinitionId());\n        } else if (StringUtils.isNotEmpty(request.getTenantId())) {\n            channelModel = repositoryService.getChannelModelByKey(request.getChannelDefinitionKey(), request.getTenantId());\n        } else {\n            channelModel = repositoryService.getChannelModelByKey(request.getChannelDefinitionKey());\n        }\n\n        eventRegistry.eventReceived((InboundChannelModel) channelModel, request.getEventPayload().toString());\n    }\n\n    protected void validateRequestParameters(@RequestBody EventInstanceCreateRequest request) {\n        if (request.getEventDefinitionId() == null && request.getEventDefinitionKey() == null) {\n            throw new FlowableIllegalArgumentException(\"Either eventDefinitionId or eventDefinitionKey is required.\");\n        }\n\n        int paramsSet = ((request.getEventDefinitionId() != null) ? 1 : 0) + ((request.getEventDefinitionKey() != null) ? 1 : 0);\n        if (paramsSet > 1) {\n            throw new FlowableIllegalArgumentException(\"Only one of eventDefinitionId or eventDefinitionKey should be set.\");\n        }\n\n        if (request.getChannelDefinitionId() == null && request.getChannelDefinitionKey() == null) {\n            throw new FlowableIllegalArgumentException(\"Either channelDefinitionId or channelDefinitionKey is required.\");\n        }\n\n        paramsSet = ((request.getChannelDefinitionId() != null) ? 1 : 0) + ((request.getChannelDefinitionKey() != null) ? 1 : 0);\n        if (paramsSet > 1) {\n            throw new FlowableIllegalArgumentException(\"Only one of eventDefinitionId or eventDefinitionKey should be set.\");\n        }\n    }\n}\n","sourceCodeStart":109,"sourceCodeEnd":140,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResource.java#L109-L140","documentation":"REST request validation in EventInstanceCollectionResource.validateRequestParameters: both eventDefinitionId and eventDefinitionKey were supplied simultaneously; the endpoint requires exactly one, and the ambiguity is rejected.","triggerScenarios":"POST body containing both eventDefinitionId and eventDefinitionKey non-null.","commonSituations":"Copying a request template and editing only one field; defaults merged by client frameworks; testing payloads that keep both fields populated.","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."],"exampleFix":"// before\n{ \"eventDefinitionId\": \"42\", \"eventDefinitionKey\": \"myEvent\", ... }\n// after\n{ \"eventDefinitionKey\": \"myEvent\", ... }","handlingStrategy":"validation","validationCode":"int set = (req.getEventDefinitionId() != null ? 1 : 0)\n        + (req.getEventDefinitionKey() != null ? 1 : 0);\nif (set > 1) throw new IllegalArgumentException(\"Set only one of eventDefinitionId/eventDefinitionKey\");","typeGuard":"null","tryCatchPattern":"try {\n    createEventInstance(req);\n} catch (FlowableIllegalArgumentException e) {\n    logger.error(\"Conflicting event definition fields\", e);\n}","preventionTips":["Build requests from templates that keep only one field","Null out defaults merged by client frameworks","Prefer id when known, drop the key"],"tags":["rest","validation","mutually-exclusive"],"backgroundTag":"mutually-exclusive-options","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}