This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 7843bba  REST refactoring.
7843bba is described below

commit 7843bba10aed3fc8f2179a9ea74984b0b0462d93
Author: JamesBognar <[email protected]>
AuthorDate: Thu Mar 11 18:17:23 2021 -0500

    REST refactoring.
---
 .../juneau/http/header/HeaderListBuilder.java      | 12 ++++++
 .../apache/juneau/rest/client/RestResponse.java    | 49 ++++++++++++----------
 .../rest/client/RestClient_Response_Test.java      |  2 +-
 3 files changed, 41 insertions(+), 22 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
index 7609560..e1736b8 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderListBuilder.java
@@ -325,6 +325,18 @@ public class HeaderListBuilder {
        /**
         * Replaces the first occurrence of the headers with the same name.
         *
+        * @param name The header name.
+        * @param value The header value.
+        * @return This object (for method chaining).
+        */
+       public HeaderListBuilder update(String name, String value) {
+               Header x = isResolving() ? new BasicHeader(name, 
resolver(value)) : new BasicHeader(name, value);
+               return update(x);
+       }
+
+       /**
+        * Replaces the first occurrence of the headers with the same name.
+        *
         * <p>
         * If no header with the same name is found the given header is added 
to the end of the list.
         *
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
index 3b2328a..94f0d4c 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
@@ -54,6 +54,7 @@ public class RestResponse implements HttpResponse {
        HttpPartParserSession partParser;
        private ResponseBody responseBody;
        private boolean isClosed;
+       private HeaderList headers;
 
        /**
         * Constructor.
@@ -70,6 +71,7 @@ public class RestResponse implements HttpResponse {
                this.response = response == null ? new BasicHttpResponse(null, 
0, null) : response;
                this.responseBody = new ResponseBody(client, request, this, 
parser);
                this.partParser = client.getPartParserSession();
+               this.headers = HeaderList.of(this.response.getAllHeaders());
        }
 
        /**
@@ -638,10 +640,10 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public ResponseHeader[] getHeaders(String name) {
-               Header[] a = response.getHeaders(name);
-               ResponseHeader[] b = new ResponseHeader[a.length];
-               for (int i = 0; i < a.length; i++)
-                       b[i] = new ResponseHeader(request, this, 
a[i]).parser(partParser);
+               List<Header> a = headers.get(name);
+               ResponseHeader[] b = new ResponseHeader[a.size()];
+               for (int i = 0; i < b.length; i++)
+                       b[i] = new ResponseHeader(request, this, 
a.get(i)).parser(partParser);
                return b;
        }
 
@@ -658,7 +660,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public ResponseHeader getFirstHeader(String name) {
-               return new ResponseHeader(request, this, 
response.getFirstHeader(name)).parser(partParser);
+               return new ResponseHeader(request, this, 
headers.getFirst(name)).parser(partParser);
        }
 
        /**
@@ -674,17 +676,22 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public ResponseHeader getLastHeader(String name) {
-               return new ResponseHeader(request, this, 
response.getLastHeader(name)).parser(partParser);
+               return new ResponseHeader(request, this, 
headers.getLast(name)).parser(partParser);
        }
 
        /**
-        * A synonym for {@link #getLastHeader(String)}.
+        * Returns the response header with the specified name.
+        *
+        * <p>
+        * If more than one header with the name exists, it is condensed into a 
comma-delimited list per
+        * <a class='doclink' 
href='https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2'>RFC2616</a>
+        * which governs multiple message header fields.
         *
         * @param name The name of the header to return.
         * @return The header, never <jk>null</jk>.
         */
        public ResponseHeader getHeader(String name) {
-               return getLastHeader(name);
+               return new ResponseHeader(request, this, 
headers.getCondensed(name)).parser(partParser);
        }
 
        /**
@@ -696,10 +703,10 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public ResponseHeader[] getAllHeaders() {
-               Header[] a = response.getAllHeaders();
-               ResponseHeader[] b = new ResponseHeader[a.length];
-               for (int i = 0; i < a.length; i++)
-                       b[i] = new ResponseHeader(request, this, 
a[i]).parser(partParser);
+               List<Header> a = headers.getAll();
+               ResponseHeader[] b = new ResponseHeader[a.size()];
+               for (int i = 0; i < b.length; i++)
+                       b[i] = new ResponseHeader(request, this, 
a.get(i)).parser(partParser);
                return b;
        }
 
@@ -712,7 +719,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void addHeader(Header header) {
-               response.addHeader(header);
+               headers = headers.copy().add(header).build();
        }
 
        /**
@@ -725,7 +732,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void addHeader(String name, String value) {
-               response.addHeader(name, value);
+               headers = headers.copy().add(name, value).build();
        }
 
        /**
@@ -737,7 +744,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void setHeader(Header header) {
-               response.setHeader(header);
+               headers = headers.copy().update(header).build();
        }
 
        /**
@@ -750,7 +757,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void setHeader(String name, String value) {
-               response.setHeader(name, value);
+               headers = headers.copy().update(name, value).build();
        }
 
        /**
@@ -760,7 +767,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void setHeaders(Header[] headers) {
-               response.setHeaders(headers);
+               this.headers = HeaderList.of(headers);
        }
 
        /**
@@ -770,7 +777,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void removeHeader(Header header) {
-               response.removeHeader(header);
+               headers = headers.copy().remove(header).build();
        }
 
        /**
@@ -780,7 +787,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public void removeHeaders(String name) {
-               response.removeHeaders(name);
+               headers = headers.copy().remove(name).build();
        }
 
        /**
@@ -790,7 +797,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public HeaderIterator headerIterator() {
-               return response.headerIterator();
+               return headers.headerIterator();
        }
 
        /**
@@ -801,7 +808,7 @@ public class RestResponse implements HttpResponse {
         */
        @Override /* HttpMessage */
        public HeaderIterator headerIterator(String name) {
-               return response.headerIterator(name);
+               return headers.headerIterator(name);
        }
 
        /**
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
index 4213dd5..94182f1 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
@@ -195,7 +195,7 @@ public class RestClient_Response_Test {
                assertEquals(0, r.getHeaders("Bar").length);
                r.getFirstHeader("Foo").assertValue().is("bar");
                assertFalse(r.getFirstHeader("Bar").isPresent());
-               r.getHeader("Foo").assertValue().is("qux");
+               r.getHeader("Foo").assertValue().is("bar, baz, qux");
                assertFalse(r.getHeader("Bar").isPresent());
 
                r.setHeaders(new Header[]{basicHeader("Foo", "quux")});

Reply via email to