flowable/flowable-engine · warning
start event of event subprocess must be of type 'error', 'me
Error message
start event of event subprocess must be of type 'error', 'message' or 'signal' for start event {} What it means
This is a validation warning emitted during BPMN parsing by Flowable's engine when an event subprocess contains a start event whose event definition is not one of the supported types (error, message, or signal). The parser skips generating a start behavior for it, so the event subprocess will not trigger as modeled. Per the BPMN 2.0 spec, event subprocesses may only be entered via error, message, compensation or signal start events, so other definitions (e.g. timer or none) are rejected at parse time.
Source
Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/StartEventParseHandler.java:129
ScopeImpl scope = bpmnParse.getCurrentScope();
Object triggeredByEvent = scope.getProperty("triggeredByEvent");
boolean isTriggeredByEvent = triggeredByEvent != null && ((Boolean) triggeredByEvent);
if (isTriggeredByEvent) { // event subprocess
// all start events of an event subprocess share common behavior
EventSubProcessStartEventActivityBehavior activityBehavior = bpmnParse.getActivityBehaviorFactory().createEventSubProcessStartEventActivityBehavior(startEvent, startEventActivity.getId());
startEventActivity.setActivityBehavior(activityBehavior);
if (!startEvent.getEventDefinitions().isEmpty()) {
EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0);
if (eventDefinition instanceof org.flowable.bpmn.model.ErrorEventDefinition
|| eventDefinition instanceof MessageEventDefinition
|| eventDefinition instanceof SignalEventDefinition) {
bpmnParse.getBpmnParserHandlers().parseElement(bpmnParse, eventDefinition);
} else {
LOGGER.warn("start event of event subprocess must be of type 'error', 'message' or 'signal' for start event {}", startEvent.getId());
}
}
} else { // "regular" subprocess
if (!startEvent.getEventDefinitions().isEmpty()) {
LOGGER.warn("event definitions only allowed on start event if subprocess is an event subprocess {}", bpmnParse.getCurrentSubProcess().getId());
}
if (scope.getProperty(PROPERTYNAME_INITIAL) == null) {
scope.setProperty(PROPERTYNAME_INITIAL, startEventActivity);
startEventActivity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createNoneStartEventActivityBehavior(startEvent));
} else {
LOGGER.warn("multiple start events not supported for subprocess {}", bpmnParse.getCurrentSubProcess().getId());
}
}
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Change the event subprocess start event's definition to an errorEventDefinition, messageEventDefinition, or signalEventDefinition in the BPMN XML/modeler.
- If a timer-triggered subprocess is needed, use a regular subprocess with an intermediate timer catch event instead of an event subprocess.
- Verify the start event XML contains exactly the intended child event definition element and correct namespace.
- Check the modeled model export: some designers emit empty or wrong event definitions; inspect startEvent.getEventDefinitions() in the deployed BPMN.
Example fix
// before
<subProcess id="evSub" triggeredByEvent="true">
<startEvent id="start1">
<timerEventDefinition><timeDuration>PT1H</timeDuration></timerEventDefinition>
</startEvent>
</subProcess>
// after
<subProcess id="evSub" triggeredByEvent="true">
<startEvent id="start1">
<signalEventDefinition signalRef="mySignal"/>
</startEvent>
</subProcess> Defensive patterns
Strategy: validation
Validate before calling
boolean isValidEventSubprocessStart(StartEvent start) {
if (start.getEventDefinitions().isEmpty()) return false;
EventDefinition d = start.getEventDefinitions().get(0);
return d instanceof ErrorEventDefinition
|| d instanceof MessageEventDefinition
|| d instanceof SignalEventDefinition;
} Prevention
- Validate the BPMN model with Flowable's ProcessValidator before deployment
- Use a modeler template that restricts event subprocess start event types
- Add a unit test parsing all process definitions and asserting no parser warnings
When it happens
Trigger: A <startEvent> inside a <subProcess triggeredByEvent="true"> whose first eventDefinition is not ErrorEventDefinition, MessageEventDefinition, or SignalEventDefinition (e.g. a timerEventDefinition, conditionalEventDefinition, or no definition at all). Thrown from StartEventParseHandler.createScopeStartEvent during executeParse.
Common situations: Modeling an event subprocess in the BPMN designer and dragging in a timer start event; copying a regular subprocess start event into an event subprocess; upgrading models where event definitions were dropped or renamed so the start event ends up with none/unsupported definitions.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- event definitions only allowed on start event if subprocess
- multiple start events not supported for subprocess {}
- Timer needs configuration (either timeDate, timeCycle or tim
- BPMN XSD could not be found
- The bpmn 2.0 xml is not properly encoded
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/c0a0013ca9955375.
Report an issue: GitHub.