From cb8148a49385b163b0f2ec284af1a20a4e8be7e2 Mon Sep 17 00:00:00 2001 From: Bjørn Madsen Date: Mon, 28 Aug 2017 22:23:16 +0200 Subject: Close Ok Http bodies --- .../sttp/okhttp/OkHttpClientHandler.scala | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'okhttp-client-handler') diff --git a/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala b/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala index 6bef4fa..b1b1b4c 100644 --- a/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala +++ b/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala @@ -105,14 +105,24 @@ abstract class OkHttpClientHandler[R[_], S](client: OkHttpClient) new EagerResponseHandler[S] { override def handleBasic[T](bra: BasicResponseAs[T, S]): Try[T] = bra match { - case IgnoreResponse => Try(res.body().close()) + case IgnoreResponse => + Try(res.close()) case ResponseAsString(encoding) => - Try(res.body().source().readString(Charset.forName(encoding))) - case ResponseAsByteArray => Try(res.body().bytes()) + val body = Try( + res.body().source().readString(Charset.forName(encoding))) + res.close() + body + case ResponseAsByteArray => + val body = Try(res.body().bytes()) + res.close() + body case ras @ ResponseAsStream() => responseBodyToStream(res).map(ras.responseIsStream) case ResponseAsFile(file, overwrite) => - Try(ResponseAs.saveFile(file, res.body().byteStream(), overwrite)) + val body = Try( + ResponseAs.saveFile(file, res.body().byteStream(), overwrite)) + res.close() + body } } @@ -157,7 +167,7 @@ abstract class OkHttpAsyncClientHandler[R[_], S](client: OkHttpClient, override def onResponse(call: Call, response: OkHttpResponse): Unit = try success(readResponse(response, r.responseAs)) - catch { case e: Exception => error(e) } + catch { case e: Exception => error(e) } finally response.close() }) }) } -- cgit v1.2.3 From 6f878ed7e1bb6e4e8b3a83944b4967839af16a17 Mon Sep 17 00:00:00 2001 From: Bjørn Madsen Date: Tue, 29 Aug 2017 21:56:59 +0200 Subject: Close async Ok Http bodies correctly Closing the body is not done in the async Ok Http handler, and is now the responsibility of the caller. --- .../softwaremill/sttp/okhttp/monix/OkHttpMonixClientHandler.scala | 5 ++++- .../scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'okhttp-client-handler') diff --git a/okhttp-client-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixClientHandler.scala b/okhttp-client-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixClientHandler.scala index 8bce372..e46e0b9 100644 --- a/okhttp-client-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixClientHandler.scala +++ b/okhttp-client-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixClientHandler.scala @@ -32,7 +32,10 @@ class OkHttpMonixClientHandler private (client: OkHttpClient)( override def responseBodyToStream( res: okhttp3.Response): Try[Observable[ByteBuffer]] = Success( - Observable.fromInputStream(res.body().byteStream()).map(ByteBuffer.wrap)) + Observable + .fromInputStream(res.body().byteStream()) + .map(ByteBuffer.wrap) + .doAfterTerminate(_ => res.close())) private def toIterable[T](observable: Observable[T])( implicit s: Scheduler): Iterable[T] = diff --git a/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala b/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala index b1b1b4c..816076e 100644 --- a/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala +++ b/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala @@ -167,7 +167,7 @@ abstract class OkHttpAsyncClientHandler[R[_], S](client: OkHttpClient, override def onResponse(call: Call, response: OkHttpResponse): Unit = try success(readResponse(response, r.responseAs)) - catch { case e: Exception => error(e) } finally response.close() + catch { case e: Exception => error(e) } }) }) } -- cgit v1.2.3