flowable/flowable-engine · error · FlowableException
this activity isn't waiting for a trigger for
Error message
this activity isn't waiting for a trigger for ${execution} What it means
A trigger() was invoked on an execution whose current activity is not in a waiting state; signaling only applies to activities paused for a trigger (e.g. receive task, intermediate catch event), so this indicates a signaling protocol violation.
Solutions
- Only signal executions actually waiting at the activity
- Query signal/event subscriptions to find valid targets instead of guessing execution ids
- Check execution state before calling runtimeService.trigger
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/FlowNodeActivityBehavior.java:56 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/46d007136de14645.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/FlowNodeActivityBehavior.java:56
public void execute(DelegateExecution execution) {
leave(execution);
}
/**
* Default way of leaving a BPMN 2.0 activity: evaluate the conditions on the outgoing sequence flow and take those that evaluate to true.
*/
public void leave(DelegateExecution execution) {
bpmnActivityBehavior.performDefaultOutgoingBehavior((ExecutionEntity) execution);
}
public void leaveIgnoreConditions(DelegateExecution execution) {
bpmnActivityBehavior.performIgnoreConditionsOutgoingBehavior((ExecutionEntity) execution);
}
@Override
public void trigger(DelegateExecution execution, String signalName, Object signalData) {
// concrete activity behaviours that do accept signals should override this method;
throw new FlowableException("this activity isn't waiting for a trigger for " + execution);
}
protected String parseActivityType(FlowNode flowNode) {
String elementType = flowNode.getClass().getSimpleName();
elementType = elementType.substring(0, 1).toLowerCase() + elementType.substring(1);
return elementType;
}
}
View on GitHub (pinned to d6d39ce1c6)