From d59c2748340c9f46ad5db699c1ad5c0be1a2540d Mon Sep 17 00:00:00 2001 From: Luca Tremamunno Date: Thu, 31 Jul 2025 15:38:14 +0200 Subject: [PATCH] Add unified request timeout exception --- .../asyncjacksonhttpclient/exception/TimeoutException.kt | 3 +++ .../io/icure/asyncjacksonhttpclient/net/web/WebClient.kt | 5 +++++ .../icure/asyncjacksonhttpclient/netty/NettyWebClient.kt | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/io/icure/asyncjacksonhttpclient/exception/TimeoutException.kt diff --git a/src/main/kotlin/io/icure/asyncjacksonhttpclient/exception/TimeoutException.kt b/src/main/kotlin/io/icure/asyncjacksonhttpclient/exception/TimeoutException.kt new file mode 100644 index 0000000..65e5d68 --- /dev/null +++ b/src/main/kotlin/io/icure/asyncjacksonhttpclient/exception/TimeoutException.kt @@ -0,0 +1,3 @@ +package io.icure.asyncjacksonhttpclient.exception + +class TimeoutException(cause: Throwable) : Exception(cause) \ No newline at end of file diff --git a/src/main/kotlin/io/icure/asyncjacksonhttpclient/net/web/WebClient.kt b/src/main/kotlin/io/icure/asyncjacksonhttpclient/net/web/WebClient.kt index 7d1d58d..e0d734c 100644 --- a/src/main/kotlin/io/icure/asyncjacksonhttpclient/net/web/WebClient.kt +++ b/src/main/kotlin/io/icure/asyncjacksonhttpclient/net/web/WebClient.kt @@ -47,6 +47,11 @@ interface WebClient { @ExperimentalCoroutinesApi interface Request { + /** + * @duration set a response timeout + * @throws io.icure.asyncjacksonhttpclient.exception.TimeoutException if the [timeoutDuration] is elapsed while + * receiving the response + */ fun method(method: HttpMethod, timeoutDuration: Duration? = null): Request fun basicAuth(username: String, password: String): Request { return header( diff --git a/src/main/kotlin/io/icure/asyncjacksonhttpclient/netty/NettyWebClient.kt b/src/main/kotlin/io/icure/asyncjacksonhttpclient/netty/NettyWebClient.kt index c5b9f19..77175e8 100644 --- a/src/main/kotlin/io/icure/asyncjacksonhttpclient/netty/NettyWebClient.kt +++ b/src/main/kotlin/io/icure/asyncjacksonhttpclient/netty/NettyWebClient.kt @@ -17,6 +17,7 @@ package io.icure.asyncjacksonhttpclient.netty +import io.icure.asyncjacksonhttpclient.exception.TimeoutException import io.icure.asyncjacksonhttpclient.net.web.HttpMethod import io.icure.asyncjacksonhttpclient.net.web.Request import io.icure.asyncjacksonhttpclient.net.web.Response @@ -131,6 +132,8 @@ class NettyResponse( }.doOnTerminate { timingHandler?.let { it(System.currentTimeMillis() - start).contextWrite(ctx).subscribe() } }.single() + }.onErrorMap(io.netty.handler.timeout.ReadTimeoutException::class.java) { + TimeoutException(it) } } @@ -170,7 +173,9 @@ class NettyResponse( }) }.doOnTerminate { timingHandler?.let { it(System.currentTimeMillis() - start).contextWrite(ctx).subscribe() } - } } + } }.onErrorMap(io.netty.handler.timeout.ReadTimeoutException::class.java) { + TimeoutException(it) + } } override fun onStatus(status: Int, handler: (ResponseStatus) -> Mono): Response {