flowable/flowable-engine · error · ActivitiException
No outgoing sequence flow of the inclusive gateway '${activi
Error message
No outgoing sequence flow of the inclusive gateway '${activityId}' could be selected for continuing the process What it means
An inclusive (OR) gateway finished evaluating all its outgoing sequence flows and none of their conditions evaluated to true, and there is no valid default flow to fall back on. The engine refuses to continue the process because it has nowhere to route execution, so it throws this ActivitiException from InclusiveGatewayActivityBehavior.execute.
Source
Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/InclusiveGatewayActivityBehavior.java:93
}
}
if (!transitionsToTake.isEmpty()) {
activityExecution.takeAll(transitionsToTake, joinedExecutions);
} else {
if (defaultSequenceFlow != null) {
PvmTransition defaultTransition = activityExecution.getActivity().findOutgoingTransition(defaultSequenceFlow);
if (defaultTransition != null) {
activityExecution.take(defaultTransition);
} else {
throw new ActivitiException("Default sequence flow '"
+ defaultSequenceFlow + "' could not be not found");
}
} else {
// No sequence flow could be found, not even a default one
throw new ActivitiException(
"No outgoing sequence flow of the inclusive gateway '"
+ activityExecution.getActivity().getId()
+ "' could be selected for continuing the process");
}
}
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Inclusive gateway '{}' does not activate", activity.getId());
}
}
}
List<? extends ActivityExecution> getLeaveExecutions(ActivityExecution parent) {
List<ActivityExecution> executionlist = new ArrayList<>();
List<? extends ActivityExecution> subExecutions = parent.getExecutions();
if (subExecutions.isEmpty()) {
executionlist.add(parent);View on GitHub (pinned to d6d39ce1c6)
Solutions
- Add a default sequence flow to the inclusive gateway (no condition) so there is always a route when all conditions are false.
- Audit the gateway's outgoing flow conditions so their branches cover all possible variable combinations.
- Verify the gateway's 'default' attribute references an existing outgoing sequence flow id in the BPMN XML (else the earlier 'Default sequence flow ... could not be found' variant fires).
- Ensure the variables used in the conditions are actually set before the gateway is reached (e.g. via input mapping or service tasks).
Example fix
<!-- before -->
<inclusiveGateway id="gw1">
<sequenceFlow id="f1" sourceRef="gw1" targetRef="a">
<conditionExpression xsi:type="tFormalExpression">${amount > 100}</conditionExpression>
</sequenceFlow>
</inclusiveGateway>
<!-- after: default flow guarantees a route -->
<inclusiveGateway id="gw1" default="fDefault">
<sequenceFlow id="f1" sourceRef="gw1" targetRef="a">
<conditionExpression xsi:type="tFormalExpression">${amount > 100}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="fDefault" sourceRef="gw1" targetRef="fallback"/>
</inclusiveGateway> Defensive patterns
Strategy: validation
Validate before calling
// Validate at deploy/design time: every inclusive gateway either has a default flow or conditions covering all cases.
// BPMN parse-time check example:
boolean hasDefault = gateway.getAttributeValue("default") != null
&& gateway.getOutgoingFlows().stream().anyMatch(f -> f.getId().equals(gateway.getAttributeValue("default")));
boolean conditionsAlwaysTrue = variablesSatisfyAtLeastOneCondition(allRuntimeVariableCombinations, gateway.getConditionedFlows());
if (!hasDefault && !conditionsAlwaysTrue) {
throw new IllegalStateException("Inclusive gateway '" + gateway.getId() + "' can dead-end");
} Try / catch
try {
runtimeService.startProcessInstanceByKey(key, vars);
} catch (org.activiti.engine.ActivitiException e) {
if (e.getMessage() != null && e.getMessage().contains("No outgoing sequence flow of the inclusive gateway")) {
// log gateway id, fix model (add default flow) and re-run
} else {
throw e;
}
} Prevention
- Always give inclusive gateways a default sequence flow with no condition.
- Model condition branches so all realistic variable combinations hit at least one branch.
- Test the gateway with boundary/minimal variable values before deploying.
- Validate process models with unit tests that execute every gateway branch.
When it happens
Trigger: Executing a BPMN inclusive gateway where every outgoing sequence flow's condition evaluates false and either no default sequence flow is defined or the configured default flow id does not exist on the gateway element.
Common situations: Modelling exclusive-style condition sets (${amount > 100}) that never cover all cases; data-dependent conditions where runtime variables fall outside all expected ranges; refactoring flow ids so the gateway's 'default' attribute points to a deleted/renamed flow; migrating from exclusive gateways without adding a default flow.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Not supported to signal this execution
- Variable ${collectionVariable} was not found
- Error while handling compensation event ${eventSubscription}
- ${sequenceFlowId} does not match a sequence flow for ${deleg
- Cannot trigger ${execution} : no current flow element found.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/5694d2d60fdded78.
Report an issue: GitHub.