From 3811a5bef6c3bca8810bfa8c225ae78763951d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Kr=C3=A1l?= Date: Wed, 11 Nov 2020 14:08:45 +0100 Subject: [PATCH] Methods contentLength and transferEncoding added (#2490) Methods contentLength and transferEncoding added to response headers Signed-off-by: David Kral --- .../io/helidon/webclient/NettyClientHandler.java | 7 ++++--- .../webclient/WebClientResponseHeaders.java | 15 +++++++++++++++ .../webclient/WebClientResponseHeadersImpl.java | 12 ++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/webclient/webclient/src/main/java/io/helidon/webclient/NettyClientHandler.java b/webclient/webclient/src/main/java/io/helidon/webclient/NettyClientHandler.java index 848fc116e..5841225a2 100644 --- a/webclient/webclient/src/main/java/io/helidon/webclient/NettyClientHandler.java +++ b/webclient/webclient/src/main/java/io/helidon/webclient/NettyClientHandler.java @@ -197,12 +197,13 @@ class NettyClientHandler extends SimpleChannelInboundHandler { } private boolean noContentLength(WebClientResponseHeaders headers) { - return headers.first(Http.Header.CONTENT_LENGTH).isEmpty() - || headers.first(Http.Header.CONTENT_LENGTH).get().equals("0"); + return headers.contentLength() + .map(value -> value == 0) + .orElse(true); } private boolean notChunked(WebClientResponseHeaders headers) { - return headers.first(Http.Header.TRANSFER_ENCODING).isEmpty(); + return !headers.transferEncoding().contains("chunked"); } @Override diff --git a/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeaders.java b/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeaders.java index 691ae0e9a..6a0e28d12 100644 --- a/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeaders.java +++ b/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeaders.java @@ -79,4 +79,19 @@ public interface WebClientResponseHeaders extends Headers { */ Optional etag(); + /** + * Content length of the response payload. + * + * @return content length + */ + Optional contentLength(); + + /** + * Transfer encoding of the response. + * + * @return transfer encoding + */ + List transferEncoding(); + + } diff --git a/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeadersImpl.java b/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeadersImpl.java index 660fea7bc..a0b5ef1a1 100644 --- a/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeadersImpl.java +++ b/webclient/webclient/src/main/java/io/helidon/webclient/WebClientResponseHeadersImpl.java @@ -95,6 +95,18 @@ class WebClientResponseHeadersImpl extends ReadOnlyParameters implements WebClie return first(Http.Header.ETAG).map(this::unquoteETag); } + @Override + public Optional contentLength() { + return first(Http.Header.CONTENT_LENGTH) + .map(Long::parseLong) + .or(Optional::empty); + } + + @Override + public List transferEncoding() { + return all(Http.Header.TRANSFER_ENCODING); + } + private String unquoteETag(String etag) { if (etag == null || etag.isEmpty()) { return etag;