{"record":{"id":"31911b5da6f0d79e","repo":"flowable/flowable-engine","slug":"execution-exception","errorCode":null,"errorMessage":"execution exception","messagePattern":"execution exception","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-http-common/src/main/java/org/flowable/http/common/api/client/AsyncExecutableHttpRequest.java","lineNumber":41,"sourceCode":" * @author Filip Hrisafov\n */\npublic interface AsyncExecutableHttpRequest extends ExecutableHttpRequest {\n\n    @Override\n    default HttpResponse call() {\n        try {\n            return callAsync().get();\n        } catch (InterruptedException e) {\n            Thread.currentThread().interrupt();\n            throw new FlowableException(\"Call was interrupted\", e);\n        } catch (ExecutionException e) {\n            Throwable cause = e.getCause();\n            if (cause instanceof RuntimeException) {\n                throw (RuntimeException) cause;\n            } else if (cause instanceof IOException) {\n                throw new FlowableException(\"IO exception occurred\", cause);\n            } else {\n                throw new FlowableException(\"execution exception\", cause);\n            }\n        }\n    }\n\n    CompletableFuture<HttpResponse> callAsync();\n}\n","sourceCodeStart":23,"sourceCodeEnd":48,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-http-common/src/main/java/org/flowable/http/common/api/client/AsyncExecutableHttpRequest.java#L23-L48","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    HttpResponse response = request.call();\n} catch (FlowableException e) {\n    Throwable cause = e.getCause();\n    if (cause != null && !(cause instanceof RuntimeException) && !(cause instanceof IOException)) {\n        logger.error(\"Unexpected async execution failure\", cause);\n    }\n}","preventionTips":["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"],"tags":["http","async","execution-exception","unexpected-exception"],"backgroundTag":"http-request-failed","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}