|
31 | 31 | import jakarta.ws.rs.client.Invocation.Builder; |
32 | 32 | import jakarta.ws.rs.core.Response; |
33 | 33 | import jakarta.ws.rs.core.Response.Status.Family; |
| 34 | +import java.net.SocketTimeoutException; |
34 | 35 | import java.net.URI; |
| 36 | +import java.net.http.HttpTimeoutException; |
35 | 37 | import java.util.Optional; |
36 | 38 | import java.util.concurrent.CompletableFuture; |
37 | 39 | import java.util.concurrent.ExecutorService; |
| 40 | +import java.util.concurrent.TimeoutException; |
38 | 41 |
|
39 | 42 | abstract class AbstractRequestExecutor implements RequestExecutor { |
40 | 43 |
|
@@ -79,15 +82,27 @@ private WorkflowModel doRequest( |
79 | 82 | .application() |
80 | 83 | .modelFactory() |
81 | 84 | .fromAny(response.readEntity(converter.responseType())); |
82 | | - } catch (ProcessingException | IllegalStateException ex) { |
| 85 | + } catch (ProcessingException ex) { |
83 | 86 | throw new WorkflowException( |
84 | | - WorkflowError.communication(Errors.DATA.status(), task, ex).build(), ex); |
| 87 | + WorkflowError.communication(errorCodeFromException(ex.getCause()), task, ex).build(), ex); |
85 | 88 | } catch (WebApplicationException ex) { |
86 | 89 | throw new WorkflowException( |
87 | 90 | WorkflowError.communication(ex.getResponse().getStatus(), task, ex).build(), ex); |
88 | 91 | } |
89 | 92 | } |
90 | 93 |
|
| 94 | + protected int errorCodeFromException(Throwable ex) { |
| 95 | + while (ex != null) { |
| 96 | + if (ex instanceof TimeoutException |
| 97 | + || ex instanceof SocketTimeoutException |
| 98 | + || ex instanceof HttpTimeoutException) { |
| 99 | + return Errors.TIMEOUT.status(); |
| 100 | + } |
| 101 | + ex = ex.getCause(); |
| 102 | + } |
| 103 | + return Errors.COMMUNICATION.status(); |
| 104 | + } |
| 105 | + |
91 | 106 | private void validateStatus(TaskContext task, Response response, HttpModelConverter converter) { |
92 | 107 | Family statusFamily = response.getStatusInfo().getFamily(); |
93 | 108 | if (statusFamily != SUCCESSFUL && (!this.redirect || statusFamily != REDIRECTION)) { |
|
0 commit comments