flowable/flowable-engine · error · FlowableIllegalArgumentException
Event cannot be null.
Error message
Event cannot be null.
What it means
Argument guard in FlowableEventSupport.dispatchEvent: an event with no payload (null FlowableEvent) was submitted to the dispatcher. Dispatching nothing is a programming error, so it is rejected before listener iteration.
Solutions
- Dispatch only constructed, non-null FlowableEvent instances
- Guard event-producing code paths that may pass null in edge cases
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/event/FlowableEventSupport.java:89 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/a1c0b5b1e4114593.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/event/FlowableEventSupport.java:89
} else {
for (FlowableEventType type : types) {
addTypedEventListener(listenerToAdd, type);
}
}
}
public void removeEventListener(FlowableEventListener listenerToRemove) {
eventListeners.remove(listenerToRemove);
for (List<FlowableEventListener> listeners : typedListeners.values()) {
listeners.remove(listenerToRemove);
}
}
public void dispatchEvent(FlowableEvent event) {
if (event == null) {
throw new FlowableIllegalArgumentException("Event cannot be null.");
}
if (event.getType() == null) {
throw new FlowableIllegalArgumentException("Event type cannot be null.");
}
// Call global listeners
if (!eventListeners.isEmpty()) {
for (FlowableEventListener listener : eventListeners) {
dispatchEvent(event, listener);
}
}
// Call typed listeners, if any
List<FlowableEventListener> typed = typedListeners.get(event.getType());
if (typed != null && !typed.isEmpty()) {
for (FlowableEventListener listener : typed) {
dispatchEvent(event, listener);View on GitHub (pinned to d6d39ce1c6)