{"record":{"id":"349b007f067543a4","repo":"flowable/flowable-engine","slug":"event-definitions-only-allowed-on-start-event-if-s","errorCode":null,"errorMessage":"event definitions only allowed on start event if subprocess is an event subprocess {}","messagePattern":"event definitions only allowed on start event if subprocess is an event subprocess (.+?)","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":137,"sourceCode":"            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);\n\n                if (eventDefinition instanceof org.flowable.bpmn.model.ErrorEventDefinition\n                        || eventDefinition instanceof MessageEventDefinition\n                        || eventDefinition instanceof SignalEventDefinition) {\n                    bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);\n                } else {\n                    LOGGER.warn(\"start event of event subprocess must be of type 'error', 'message' or 'signal' for start event {}\", startEvent.getId());\n                }\n            }\n\n        } else { // \"regular\" subprocess\n\n            if (!startEvent.getEventDefinitions().isEmpty()) {\n                LOGGER.warn(\"event definitions only allowed on start event if subprocess is an event subprocess {}\", bpmnParse.getCurrentSubProcess().getId());\n            }\n            if (scope.getProperty(PROPERTYNAME_INITIAL) == null) {\n                scope.setProperty(PROPERTYNAME_INITIAL, startEventActivity);\n                startEventActivity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createNoneStartEventActivityBehavior(startEvent));\n            } else {\n                LOGGER.warn(\"multiple start events not supported for subprocess {}\", bpmnParse.getCurrentSubProcess().getId());\n            }\n        }\n\n    }\n\n}\n","sourceCodeStart":119,"sourceCodeEnd":150,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/StartEventParseHandler.java#L119-L150","documentation":"This warning is raised during BPMN parsing when a start event inside a regular (non-event) subprocess carries event definitions. Per BPMN semantics, event definitions on start events are only meaningful for event subprocesses; the engine ignores them here and treats the start as a none start event. It indicates the process model is likely invalid or the author intended an event subprocess.","triggerScenarios":"A <subProcess> without triggeredByEvent=\"true\" contains a <startEvent> with a child event definition (e.g. timerEventDefinition, errorEventDefinition). Thrown from StartEventParseHandler.createScopeStartEvent in the else branch handling regular subprocesses during executeParse.","commonSituations":"Author forgot to set triggeredByEvent=\"true\" on the subprocess while modeling an event subprocess; a designer exported the subprocess incorrectly; copy-pasting an event start event from a process level into a subprocess.","solutions":["Add triggeredByEvent=\"true\" to the subprocess element if an event subprocess was intended.","Remove the event definition from the start event if a plain subprocess was intended (start events in regular subprocesses must be none/empty).","Validate the BPMN XML with the Flowable model validator before deployment to catch this earlier."],"exampleFix":"// before\n<subProcess id=\"sub1\">\n  <startEvent id=\"start1\">\n    <errorEventDefinition errorRef=\"myError\"/>\n  </startEvent>\n</subProcess>\n// after\n<subProcess id=\"sub1\" triggeredByEvent=\"true\">\n  <startEvent id=\"start1\">\n    <errorEventDefinition errorRef=\"myError\"/>\n  </startEvent>\n</subProcess>","handlingStrategy":"validation","validationCode":"boolean isEventDefinitionsOnRegularSubprocessStart(SubProcess sub, StartEvent start) {\n  return !Boolean.TRUE.equals(sub.isTriggeredByEvent())\n      && !start.getEventDefinitions().isEmpty();\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set triggeredByEvent=\"true\" whenever start events carry event definitions inside subprocesses","Run BPMN XSD/semantic validation in CI before deploying","Keep regular subprocess start events empty (none start events)"],"tags":["bpmn","parser","subprocess","flowable"],"backgroundTag":"invalid-argument-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}