flowable/flowable-engine · warning

multiple start events not supported for subprocess

Error message

multiple start events not supported for subprocess {}

What it means

This warning is emitted during BPMN parsing when a regular subprocess contains more than one start event. Flowable supports only a single start event per subprocess; the first one becomes the initial activity (PROPERTYNAME_INITIAL) and any additional start events are ignored with this warning. The process will deploy but the extra start events will not function.

Solutions

  1. Keep exactly one start event in the subprocess and remove or merge the others.
  2. If alternative entry paths are needed, restructure: split into multiple subprocesses or use an exclusive gateway right after the single start event.
  3. For multiple triggers, use an event subprocess (triggeredByEvent="true"), which does support multiple typed start events.

Example fix

// before
<subProcess id="sub1">
  <startEvent id="startA"/>
  <startEvent id="startB"/>
</subProcess>
// after
<subProcess id="sub1">
  <startEvent id="startA"/>
  <sequenceFlow id="f1" sourceRef="startA" targetRef="gw1"/>
  <exclusiveGateway id="gw1"/>
</subProcess>
Defensive patterns

Strategy: validation

Validate before calling

boolean hasMultipleStartEvents(SubProcess sub) {
  long n = sub.getFlowElements().stream()
      .filter(StartEvent.class::isInstance).count();
  return n > 1;
}

Prevention

When it happens

Trigger: Two or more <startEvent> elements inside the same <subProcess> (without triggeredByEvent). The second and later ones hit the branch where scope.getProperty(PROPERTYNAME_INITIAL) is already set, in StartEventParseHandler.createScopeStartEvent during executeParse.

Common situations: Modelers adding alternative entry points to a subprocess; copy-paste duplication of a start event in the diagram; importing BPMN from tools that permit multiple subprocess start events.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/ab4370f012a37d20. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/StartEventParseHandler.java:143

                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)