flowable/flowable-engine · error · FlowableException
Unexpected activity behavior (" + behavior.getClass() + ") f
Error message
Unexpected activity behavior (" + behavior.getClass() + ") found for " + job + " at " + executionEntity What it means
Thrown by AsyncSendEventJobHandler.execute when the SendEventServiceTask's behavior is not an ActivityBehavior. The handler casts the behavior to ActivityBehavior to execute it; a different behavior implementation indicates a corrupted or incompatible BPMN model.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AsyncSendEventJobHandler.java:49
public static final String TYPE = "async-send-event";
@Override
public String getType() {
return TYPE;
}
@Override
public void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext) {
ExecutionEntity executionEntity = (ExecutionEntity) variableScope;
FlowElement flowElement = executionEntity.getCurrentFlowElement();
if (!(flowElement instanceof SendEventServiceTask)) {
throw new FlowableException("Unexpected activity type found for " + job + " at " + executionEntity);
}
Object behavior = ((SendEventServiceTask) flowElement).getBehavior();
if (!(behavior instanceof ActivityBehavior activityBehavior)) {
throw new FlowableException(
"Unexpected activity behavior (" + behavior.getClass() + ") found for " + job + " at " + executionEntity);
}
try {
commandContext.addAttribute(TYPE, true); // Will be read in the SendEventTaskActivityBehavior
activityBehavior.execute(executionEntity);
} finally {
commandContext.removeAttribute(TYPE);
}
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Check custom BpmnParseHandler implementations for code that replaces SendEventServiceTask behavior
- Ensure the same Flowable version parses and executes the model (no mixed-version cluster)
- Redeploy the process definition so the behavior is regenerated correctly
Defensive patterns
Strategy: try-catch
Try / catch
try { /* job execution */ } catch (FlowableException e) { if (e.getMessage().contains("Unexpected activity behavior")) { /* inspect custom parse handlers, redeploy definition */ } else throw e; } Prevention
- Audit custom BpmnParseHandlers that override built-in task behaviors
- Run a homogeneous Flowable version across the cluster
When it happens
Trigger: Async send-event job running where the flow element's parsed behavior class is not an ActivityBehavior — e.g. model parsed by an incompatible Flowable version or custom BpmnParseHandler replaced the behavior.
Common situations: Custom BPMN parse handlers overriding SendEvent behavior, engine/model version skew, or corrupted deployment metadata after an upgrade.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Unexpected activity type found for " + job + " at " + execut
- Invalid usage of async_activate job handler, variable scope
- No processDefinitionId, processDefinitionKey provided
- Cannot trigger ${execution} : the activityBehavior ${activit
- Invocation result + invocationResult + from invocation + inv
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/1b84beb558709bbd.
Report an issue: GitHub.