flowable/flowable-engine · error · FlowableException
execution exception
Error message
execution exception
What it means
Fallback branch of AsyncExecutableHttpRequest.call(): when the async call fails with a cause that is neither a RuntimeException nor an IOException, it is wrapped in a FlowableException with the message "execution exception". It surfaces any unexpected checked failure from the underlying async client.
Solutions
- Read the cause via e.getCause() to identify the actual underlying exception type and fix that root problem.
- If the cause indicates client misconfiguration (TLS, protocol), correct the async client configuration.
- Report/upgrade if a new exception type from the HTTP client should be mapped to a dedicated branch.
Defensive patterns
Strategy: try-catch
Try / catch
try {
HttpResponse response = request.call();
} catch (FlowableException e) {
Throwable cause = e.getCause();
if (cause != null && !(cause instanceof RuntimeException) && !(cause instanceof IOException)) {
logger.error("Unexpected async execution failure", cause);
}
} Prevention
- Always inspect getCause() to find the real underlying exception
- Keep the async HTTP client configuration aligned with documented supported types
- After client upgrades, review newly introduced checked exception types
- Log the full cause chain for diagnostics
When it happens
Trigger: callAsync().get() throws ExecutionException whose cause is neither RuntimeException nor IOException — e.g. a checked client-specific exception (SSL/protocol errors wrapped as custom types, InterruptedException subtypes, custom client errors).
Common situations: Misconfigured async HTTP client throwing a library-specific checked exception; serialization/deserialization layers throwing unexpected checked exceptions; upgrading the HTTP client introduces new exception types not covered by the narrower branches.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- Call was interrupted
- IO exception occurred
- A request body was expected when bulk updating tasks.
- A request body was expected when bulk updating tasks.
- A request body was expected when executing a task action.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/31911b5da6f0d79e.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-http-common/src/main/java/org/flowable/http/common/api/client/AsyncExecutableHttpRequest.java:41
* @author Filip Hrisafov
*/
public interface AsyncExecutableHttpRequest extends ExecutableHttpRequest {
@Override
default HttpResponse call() {
try {
return callAsync().get();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new FlowableException("Call was interrupted", e);
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof RuntimeException) {
throw (RuntimeException) cause;
} else if (cause instanceof IOException) {
throw new FlowableException("IO exception occurred", cause);
} else {
throw new FlowableException("execution exception", cause);
}
}
}
CompletableFuture<HttpResponse> callAsync();
}
View on GitHub (pinned to d6d39ce1c6)