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.

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)

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.