flowable/flowable-engine · error · FlowableException
No start element found for process definition ${processDefin
Error message
No start element found for process definition ${processDefinition.getId()} What it means
After loading the sub-process model in CallActivityBehavior.execute, the engine asks the Process object for its initial flow element (the implicit or explicit start event). If the deployed BPMN XML has no start event at all, a call activity cannot know where to begin the sub process instance, so Flowable throws this FlowableException.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/CallActivityBehavior.java:111
ExecutionEntity executionEntity = (ExecutionEntity) execution;
CallActivity callActivity = (CallActivity) executionEntity.getCurrentFlowElement();
CommandContext commandContext = CommandContextUtil.getCommandContext();
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
ProcessDefinition processDefinition = getProcessDefinition(execution, callActivity, processEngineConfiguration);
// Get model from cache
Process subProcess = ProcessDefinitionUtil.getProcess(processDefinition.getId());
if (subProcess == null) {
throw new FlowableException("Cannot start a sub process instance. Process model " + processDefinition.getName() + " (id = " + processDefinition.getId() + ") could not be found");
}
FlowElement initialFlowElement = subProcess.getInitialFlowElement();
if (initialFlowElement == null) {
throw new FlowableException("No start element found for process definition " + processDefinition.getId());
}
// Do not start a process instance if the process definition is suspended
if (ProcessDefinitionUtil.isProcessDefinitionSuspended(processDefinition.getId())) {
throw new FlowableException("Cannot start process instance. Process definition " + processDefinition.getName() + " (id = " + processDefinition.getId() + ") is suspended");
}
ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager(commandContext);
ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager();
String businessKey = null;
if (!StringUtils.isEmpty(callActivity.getBusinessKey())) {
Expression expression = expressionManager.createExpression(callActivity.getBusinessKey());
businessKey = expression.getValue(execution).toString();
} else if (callActivity.isInheritBusinessKey()) {
ExecutionEntity processInstance = executionEntityManager.findById(execution.getProcessInstanceId());
businessKey = processInstance.getBusinessKey();View on GitHub (pinned to d6d39ce1c6)
Solutions
- Add a start event (e.g. <startEvent id="start"/>) to the sub-process BPMN XML and redeploy.
- Open the process in the Flowable modeler and verify it has exactly one start event connected to the first flow node.
- Validate the deployed model (flowable:validate) before deployment to catch start-event-less processes early.
- Confirm the call activity's calledElement points to the intended process, not a broken fragment deployment.
Example fix
// before: subProcess.bpmn20.xml has no start event <process id="subProcess"><serviceTask id="task1" .../></process> // after <process id="subProcess"><startEvent id="start"/><sequenceFlow sourceRef="start" targetRef="task1"/><serviceTask id="task1" .../></process>
Defensive patterns
Strategy: validation
Validate before calling
boolean hasStartEvent = repositoryService.createProcessDefinitionQuery().processDefinitionKey("subProcess").latestVersion().singleResult() != null;
// plus static check: parse BPMN XML and assert a <startEvent> element exists Try / catch
try { runtimeService.signal(executionId); }
catch (FlowableException e) { if (e.getMessage().startsWith("No start element found")) { fixModelAndRedeploy(); } else { throw e; } } Prevention
- Always include a start event in every process model.
- Run flowable:modeler validation or Schema validation on BPMN XML in CI.
- Reject deployments of models without start events in your deploy pipeline.
- Re-validate models after external-tool edits.
When it happens
Trigger: Calling a sub process (via call activity calledElement) whose BPMN XML contains no start event — neither an implicit none start event nor any explicit startEvent element.
Common situations: Hand-written or generated BPMN XML missing the <startEvent> element; a model edited in an external tool that stripped the start event; copying a process fragment into a new file without a start event and deploying it.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- BPMN XSD could not be found
- The bpmn 2.0 xml is not properly encoded
- The ${task} cannot be deleted because is part of a running p
- ${sequenceFlowId} does not match a sequence flow for ${deleg
- Null execution passed
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/50639043eaac030e.
Report an issue: GitHub.