{"record":{"id":"9789abd6a4bfa34a","repo":"flowable/flowable-engine","slug":"unsupported-event-definition-on-start-event","errorCode":null,"errorMessage":"Unsupported event definition on start event {}","messagePattern":"Unsupported event definition on start event (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/StartEventParseHandler.java","lineNumber":105,"sourceCode":"            }\n        }\n    }\n\n    protected void createProcessDefinitionStartEvent(BpmnParse bpmnParse, ActivityImpl startEventActivity, StartEvent startEvent, ProcessDefinitionEntity processDefinition) {\n        if (StringUtils.isNotEmpty(startEvent.getInitiator())) {\n            processDefinition.setProperty(PROPERTYNAME_INITIATOR_VARIABLE_NAME, startEvent.getInitiator());\n        }\n\n        // all start events share the same behavior:\n        startEventActivity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createNoneStartEventActivityBehavior(startEvent));\n        if (!startEvent.getEventDefinitions().isEmpty()) {\n            EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0);\n            if (eventDefinition instanceof TimerEventDefinition\n                    || eventDefinition instanceof MessageEventDefinition\n                    || eventDefinition instanceof SignalEventDefinition) {\n                bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);\n            } else {\n                LOGGER.warn(\"Unsupported event definition on start event {}\", eventDefinition);\n            }\n        }\n    }\n\n    protected void createScopeStartEvent(BpmnParse bpmnParse, ActivityImpl startEventActivity, StartEvent startEvent) {\n\n        ScopeImpl scope = bpmnParse.getCurrentScope();\n        Object triggeredByEvent = scope.getProperty(\"triggeredByEvent\");\n        boolean isTriggeredByEvent = triggeredByEvent != null && ((Boolean) triggeredByEvent);\n\n        if (isTriggeredByEvent) { // event subprocess\n\n            // all start events of an event subprocess share common behavior\n            EventSubProcessStartEventActivityBehavior activityBehavior = bpmnParse.getActivityBehaviorFactory().createEventSubProcessStartEventActivityBehavior(startEvent, startEventActivity.getId());\n            startEventActivity.setActivityBehavior(activityBehavior);\n\n            if (!startEvent.getEventDefinitions().isEmpty()) {\n                EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0);","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/StartEventParseHandler.java#L87-L123","documentation":"A process-level start event (createProcessDefinitionStartEvent path) has exactly one event definition that is not a timer, message, or signal definition — the only supported start-event kinds here. The parser logs this warning and skips parsing the definition, so the start event will not trigger for that event type.","triggerScenarios":"createProcessDefinitionStartEvent (called from executeParse) on a StartEvent with one eventDefinition that is not a TimerEventDefinition, MessageEventDefinition, or SignalEventDefinition — e.g. an error, escalate, or compensate definition on a process start event.","commonSituations":"Importing BPMN from tools that use error/escalate start events on top-level processes; model edits moving event start events from subprocess scopes to the process scope; engine versions not yet supporting the event type.","solutions":["Replace the start event definition with a timer, message, or signal definition","Move the event start event into an event subprocess if error/compensation semantics are needed","Remove the unsupported event definition from the start event"],"exampleFix":"// before\n<startEvent id=\"s1\"><errorEventDefinition errorRef=\"e1\"/></startEvent>\n// after\n<startEvent id=\"s1\"><messageEventDefinition messageRef=\"m1\"/></startEvent>","handlingStrategy":"validation","validationCode":"for (StartEvent e : model.getFlowElementsOfType(StartEvent.class)) {\n    for (EventDefinition ed : e.getEventDefinitions()) {\n        if (!(ed instanceof TimerEventDefinition || ed instanceof MessageEventDefinition || ed instanceof SignalEventDefinition)) {\n            throw new IllegalArgumentException(\"Unsupported start event definition on \" + e.getId());\n        }\n    }\n}","typeGuard":"function isSupportedStartDefinition(ed) { return ed != null && ['timer','message','signal'].includes(ed.type ?? guessType(ed)); }","tryCatchPattern":null,"preventionTips":["Use event subprocesses for error/compensation start triggers","Restrict top-level start events to timer/message/signal definitions","Validate imported BPMN against engine-supported feature set before deploy"],"tags":["bpmn","parsing","start-event","unsupported-type"],"backgroundTag":"unsupported-operation","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"}