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 33ac3bd  REST refactoring.
33ac3bd is described below

commit 33ac3bd77e755252784ed6a433b89a8c0549e016
Author: JamesBognar <[email protected]>
AuthorDate: Tue Feb 16 11:17:27 2021 -0500

    REST refactoring.
---
 .../apache/juneau/rest/client/ResponseHeader.java  |  89 +++++--
 .../apache/juneau/rest/client/RestResponse.java    | 167 +++----------
 .../assertion/FluentResponseHeaderAssertion.java}  |  39 ++-
 .../assertions/FluentRequestHeaderAssertion.java   |  10 +-
 .../FluentRequestQueryParamAssertion.java          |  19 +-
 .../juneau/http/exception/BadRequest_Test.java     |   2 +-
 .../juneau/http/exception/Conflict_Test.java       |   2 +-
 .../http/exception/ExpectationFailed_Test.java     |   2 +-
 .../http/exception/FailedDependency_Test.java      |   2 +-
 .../juneau/http/exception/Forbidden_Test.java      |   2 +-
 .../apache/juneau/http/exception/Gone_Test.java    |   2 +-
 .../juneau/http/exception/HttpException_Test.java  |   2 +-
 .../exception/HttpVersionNotSupported_Test.java    |   2 +-
 .../http/exception/InsufficentStorage_Test.java    |   2 +-
 .../http/exception/InternalServerError_Test.java   |   2 +-
 .../juneau/http/exception/LengthRequired_Test.java |   2 +-
 .../apache/juneau/http/exception/Locked_Test.java  |   2 +-
 .../juneau/http/exception/LoopDetected_Test.java   |   2 +-
 .../http/exception/MethodNotAllowed_Test.java      |   2 +-
 .../http/exception/MisdirectedRequest_Test.java    |   2 +-
 .../NetworkAuthenticationRequired_Test.java        |   2 +-
 .../juneau/http/exception/NotAcceptable_Test.java  |   2 +-
 .../juneau/http/exception/NotExtended_Test.java    |   2 +-
 .../juneau/http/exception/NotFound_Test.java       |   2 +-
 .../juneau/http/exception/NotImplemented_Test.java |   2 +-
 .../http/exception/PayloadTooLarge_Test.java       |   2 +-
 .../http/exception/PreconditionFailed_Test.java    |   2 +-
 .../http/exception/PreconditionRequired_Test.java  |   2 +-
 .../http/exception/RangeNotSatisfiable_Test.java   |   2 +-
 .../RequestHeaderFieldsTooLarge_Test.java          |   2 +-
 .../http/exception/ServiceUnavailable_Test.java    |   2 +-
 .../http/exception/TooManyRequests_Test.java       |   2 +-
 .../juneau/http/exception/Unauthorized_Test.java   |   2 +-
 .../exception/UnavailableForLegalReasons_Test.java |   2 +-
 .../http/exception/UnprocessableEntity_Test.java   |   2 +-
 .../http/exception/UnsupportedMediaType_Test.java  |   2 +-
 .../http/exception/UpgradeRequired_Test.java       |   2 +-
 .../juneau/http/exception/UriTooLong_Test.java     |   2 +-
 .../http/exception/VariantAlsoNegotiates_Test.java |   2 +-
 .../apache/juneau/http/response/Accepted_Test.java |   2 +-
 .../juneau/http/response/AlreadyReported_Test.java |   2 +-
 .../apache/juneau/http/response/Continue_Test.java |   2 +-
 .../apache/juneau/http/response/Created_Test.java  |   2 +-
 .../juneau/http/response/EarlyHints_Test.java      |   2 +-
 .../apache/juneau/http/response/Found_Test.java    |   4 +-
 .../apache/juneau/http/response/IMUsed_Test.java   |   2 +-
 .../http/response/MovedPermanently_Test.java       |   4 +-
 .../juneau/http/response/MultiStatus_Test.java     |   2 +-
 .../juneau/http/response/MultipleChoices_Test.java |   2 +-
 .../juneau/http/response/NoContent_Test.java       |   2 +-
 .../response/NonAuthoritativeInformation_Test.java |   2 +-
 .../juneau/http/response/NotModified_Test.java     |   2 +-
 .../org/apache/juneau/http/response/Ok_Test.java   |   2 +-
 .../juneau/http/response/PartialContent_Test.java  |   2 +-
 .../http/response/PermanentRedirect_Test.java      |   4 +-
 .../juneau/http/response/Processing_Test.java      |   2 +-
 .../juneau/http/response/ResetContent_Test.java    |   2 +-
 .../apache/juneau/http/response/SeeOther_Test.java |   4 +-
 .../http/response/SwitchingProtocols_Test.java     |   2 +-
 .../http/response/TemporaryRedirect_Test.java      |   4 +-
 .../apache/juneau/http/response/UseProxy_Test.java |   2 +-
 .../juneau/rest/Header_AcceptEncoding_Test.java    |  20 +-
 .../apache/juneau/rest/RestOp_Returns_Test.java    |   4 +-
 .../rest/annotation/ResponseHeader_Test.java       |   6 +-
 .../juneau/rest/annotation/RestHook_Test.java      |   8 +-
 .../juneau/rest/client/RestClient_Body_Test.java   | 116 ++++-----
 .../client/RestClient_Config_BeanContext_Test.java | 264 ++++++++++++++++++---
 .../client/RestClient_Config_RestClient_Test.java  |  12 +-
 .../rest/client/RestClient_Response_Test.java      |  14 +-
 .../apache/juneau/rest/client/RestClient_Test.java |   8 +-
 70 files changed, 523 insertions(+), 375 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
index f8e8291..3d4a079 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.httppart.HttpPartType.*;
 import static java.util.Optional.*;
 
 import java.lang.reflect.*;
+import java.time.*;
 import java.util.*;
 import java.util.regex.*;
 
@@ -62,7 +63,8 @@ public class ResponseHeader implements Header {
                }
        };
 
-       private final Header header;
+       private final String name, value;
+       private final HeaderElement[] elements;
        private final RestRequest request;
        private final RestResponse response;
        private HttpPartParserSession parser;
@@ -78,7 +80,9 @@ public class ResponseHeader implements Header {
        public ResponseHeader(RestRequest request, RestResponse response, 
Header header) {
                this.request = request;
                this.response = response;
-               this.header = header == null ? NULL_HEADER : header;
+               this.name = header == null ? "" : header.getName();
+               this.value = header == null ? null : header.getValue();
+               this.elements = header == null ? new HeaderElement[0] : 
header.getElements();
                parser(null);
        }
 
@@ -127,16 +131,61 @@ public class ResponseHeader implements Header {
         * @return <jk>true</jk> if this header exists on the response.
         */
        public boolean exists() {
-               return header != NULL_HEADER;
+               return value != null;
        }
 
        /**
         * Returns the value of this header as a string.
         *
-        * @return The value of this header as a string, or <jk>null</jk> if 
header was not present.
+        * @return The value of this header as a string, or {@link 
Optional#empty()} if the header was not present.
         */
        public Optional<String> asString() {
-               return ofNullable(getValue());
+               return asStringHeader().asString();
+       }
+
+       /**
+        * Returns the value of this header as an integer.
+        *
+        * @return The value of this header as an integer, or {@link 
Optional#empty()} if the header was not present.
+        */
+       public Optional<Integer> asInteger() {
+               return asIntegerHeader().asInteger();
+       }
+
+       /**
+        * Returns the value of this header as a boolean.
+        *
+        * @return The value of this header as a boolean, or {@link 
Optional#empty()} if the header was not present.
+        */
+       public Optional<Boolean> asBoolean() {
+               return asBooleanHeader().asBoolean();
+       }
+
+       /**
+        * Returns the value of this header as a long.
+        *
+        * @return The value of this header as a long, or {@link 
Optional#empty()} if the header was not present.
+        */
+       public Optional<Long> asLong() {
+               return asLongHeader().asLong();
+       }
+
+       /**
+        * Returns the value of this header as a date.
+        *
+        * @return The value of this header as a date, or {@link 
Optional#empty()} if the header was not present.
+        */
+       public Optional<ZonedDateTime> asDate() {
+               return asDateHeader().asZonedDateTime();
+       }
+
+       /**
+        * Returns the value of this header as a list from a comma-delimited 
string.
+        *
+        * @return The value of this header as a list from a comma-delimited 
string, or {@link Optional#empty()} if the header was not present.
+        */
+       public Optional<List<String>> asCsvArray() {
+               return asCsvArrayHeader().asList();
        }
 
        /**
@@ -207,6 +256,15 @@ public class ResponseHeader implements Header {
        }
 
        /**
+        * Returns the value of this header as an boolean header.
+        *
+        * @return The value of this header as an boolean header, never 
<jk>null</jk>.
+        */
+       public BasicBooleanHeader asBooleanHeader() {
+               return new BasicBooleanHeader(getName(), getValue());
+       }
+
+       /**
         * Returns the value of this header as a long header.
         *
         * @return The value of this header as a long header, never 
<jk>null</jk>.
@@ -512,9 +570,6 @@ public class ResponseHeader implements Header {
        /**
         * Provides the ability to perform fluent-style assertions on this 
response header.
         *
-        * <p>
-        * This method is called directly from the {@link 
RestResponse#assertStringHeader(String)} method to instantiate a fluent 
assertions object.
-        *
         * <h5 class='section'>Examples:</h5>
         * <p class='bcode w800'>
         *      <jc>// Validates the content type header is provided.</jc>
@@ -575,9 +630,6 @@ public class ResponseHeader implements Header {
        /**
         * Provides the ability to perform fluent-style assertions on an 
integer response header.
         *
-        * <p>
-        * This method is called directly from the {@link 
RestResponse#assertIntegerHeader(String)} method to instantiate a fluent 
assertions object.
-        *
         * <h5 class='section'>Examples:</h5>
         * <p class='bcode w800'>
         *      <jc>// Validates that the response content age is greater than 
1.</jc>
@@ -596,9 +648,6 @@ public class ResponseHeader implements Header {
        /**
         * Provides the ability to perform fluent-style assertions on a long 
response header.
         *
-        * <p>
-        * This method is called directly from the {@link 
RestResponse#assertLongHeader(String)} method to instantiate a fluent 
assertions object.
-        *
         * <h5 class='section'>Examples:</h5>
         * <p class='bcode w800'>
         *      <jc>// Validates that the response body is not too long.</jc>
@@ -617,9 +666,6 @@ public class ResponseHeader implements Header {
        /**
         * Provides the ability to perform fluent-style assertions on a date 
response header.
         *
-        * <p>
-        * This method is called directly from the {@link 
RestResponse#assertDateHeader(String)} method to instantiate a fluent 
assertions object.
-        *
         * <h5 class='section'>Examples:</h5>
         * <p class='bcode w800'>
         *      <jc>// Validates that the response content is not expired.</jc>
@@ -638,9 +684,6 @@ public class ResponseHeader implements Header {
        /**
         * Provides the ability to perform fluent-style assertions on 
comma-separated string headers.
         *
-        * <p>
-        * This method is called directly from the {@link 
RestResponse#assertCsvArrayHeader(String)} method to instantiate a fluent 
assertions object.
-        *
         * <h5 class='section'>Examples:</h5>
         * <p class='bcode w800'>
         *      <jc>// Validates that the response content is not expired.</jc>
@@ -667,7 +710,7 @@ public class ResponseHeader implements Header {
         */
        @Override /* Header */
        public String getName() {
-               return header.getName();
+               return name;
        }
 
        /**
@@ -681,7 +724,7 @@ public class ResponseHeader implements Header {
         */
        @Override /* Header */
        public String getValue() {
-               return header.getValue();
+               return value;
        }
 
        /**
@@ -692,7 +735,7 @@ public class ResponseHeader implements Header {
         */
        @Override /* Header */
        public HeaderElement[] getElements() throws 
org.apache.http.ParseException {
-               return header.getElements();
+               return elements;
        }
 
        @Override /* Object */
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 82305b0..9fc5ad3 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
@@ -13,6 +13,7 @@
 package org.apache.juneau.rest.client;
 
 import org.apache.juneau.parser.*;
+import org.apache.juneau.rest.client.assertion.*;
 
 import static org.apache.juneau.httppart.HttpPartType.*;
 
@@ -255,6 +256,25 @@ public class RestResponse implements HttpResponse {
        }
 
        /**
+        * Provides the ability to perform fluent-style assertions on the 
response character encoding.
+        *
+        * <h5 class='section'>Examples:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Validates that the response content charset is 
UTF-8.</jc>
+        *      <jv>client</jv>
+        *              .get(<jsf>URI</jsf>)
+        *              .run()
+        *              .assertCharset().is(<js>"utf-8"</js>);
+        * </p>
+        *
+        * @return A new fluent assertion object.
+        * @throws RestCallException If REST call failed.
+        */
+       public FluentStringAssertion<RestResponse> assertCharset() throws 
RestCallException {
+               return new FluentStringAssertion<>(getCharacterEncoding(), 
this);
+       }
+
+       /**
         * Provides the ability to perform fluent-style assertions on a 
response header.
         *
         * <h5 class='section'>Examples:</h5>
@@ -311,131 +331,8 @@ public class RestResponse implements HttpResponse {
         * @param name The header name.
         * @return A new fluent assertion object.
         */
-       public FluentStringAssertion<RestResponse> assertStringHeader(String 
name) {
-               return getResponseHeader(name).assertString();
-       }
-
-       /**
-        * Provides the ability to perform fluent-style assertions on an 
integer response header.
-        *
-        * <h5 class='section'>Examples:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response content age is greater than 
1.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              .assertIntegerHeader(<js>"Age"</js>).isGreaterThan(1);
-        * </p>
-        *
-        * @param name The header name.
-        * @return A new fluent assertion object.
-        */
-       public FluentIntegerAssertion<RestResponse> assertIntegerHeader(String 
name) {
-               return getResponseHeader(name).assertInteger();
-       }
-
-       /**
-        * Provides the ability to perform fluent-style assertions on a long 
response header.
-        *
-        * <h5 class='section'>Examples:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response body is not too large.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              .assertLongHeader(<js>"Length"</js>).isLessThan(100000);
-        * </p>
-        *
-        * @param name The header name.
-        * @return A new fluent assertion object.
-        */
-       public FluentLongAssertion<RestResponse> assertLongHeader(String name) {
-               return getResponseHeader(name).assertLong();
-       }
-
-       /**
-        * Provides the ability to perform fluent-style assertions on a date 
response header.
-        *
-        * <h5 class='section'>Examples:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response content is not expired.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              .assertDateHeader(<js>"Expires"</js>).isAfterNow();
-        * </p>
-        *
-        * @param name The header name.
-        * @return A new fluent assertion object.
-        */
-       public FluentZonedDateTimeAssertion<RestResponse> 
assertDateHeader(String name) {
-               return getResponseHeader(name).assertDate();
-       }
-
-       /**
-        * Provides the ability to perform fluent-style assertions on a date 
response header.
-        *
-        * <h5 class='section'>Examples:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response content is not expired.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              
.assertCsvArrayHeader(<js>"Allow"</js>).contains(<js>"GET"</js>);
-        * </p>
-        *
-        * @param name The header name.
-        * @return A new fluent assertion object.
-        */
-       public FluentListAssertion<RestResponse> assertCsvArrayHeader(String 
name) {
-               return getResponseHeader(name).assertCsvArray();
-       }
-
-       /**
-        * Provides the ability to perform fluent-style assertions on the 
response character encoding.
-        *
-        * <h5 class='section'>Examples:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response content charset is 
UTF-8.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              .assertCharset().is(<js>"utf-8"</js>);
-        * </p>
-        *
-        * @return A new fluent assertion object.
-        * @throws RestCallException If REST call failed.
-        */
-       public FluentStringAssertion<RestResponse> assertCharset() throws 
RestCallException {
-               return new FluentStringAssertion<>(getCharacterEncoding(), 
this);
-       }
-
-       /**
-        * Provides the ability to perform fluent-style assertions on the 
response content type.
-        *
-        * <h5 class='section'>Examples:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response content is JSON.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              .assertContentType().is(<js>"application/json"</js>);
-        * </p>
-        *
-        * <p>
-        * Note that this is equivalent to the following code:
-        * <p class='bcode w800'>
-        *      <jc>// Validates that the response content is JSON.</jc>
-        *      <jv>client</jv>
-        *              .get(<jsf>URI</jsf>)
-        *              .run()
-        *              
.assertHeader(<js>"Content-Type"</js>).is(<js>"application/json"</js>);
-        * </p>
-        *
-        * @return A new fluent assertion object.
-        */
-       public FluentStringAssertion<RestResponse> assertContentType() {
-               return getResponseHeader("Content-Type").assertString();
+       public FluentResponseHeaderAssertion<RestResponse> assertHeader(String 
name) {
+               return new FluentResponseHeaderAssertion<>(getLastHeader(name), 
this);
        }
 
        
//------------------------------------------------------------------------------------------------------------------
@@ -830,31 +727,35 @@ public class RestResponse implements HttpResponse {
        /**
         * Returns the first header with a specified name of this message.
         *
-        * Header values are ignored.
-        * <br>If there is more than one matching header in the message the 
first element of {@link #getHeaders(String)} is returned.
+        * <p>
+        * If there is more than one matching header in the message the first 
element of {@link #getHeaders(String)} is returned.
+        * <p>
+        * This method always returns a value so that you can perform 
assertions on the result.
         *
         * @param name The name of the header to return.
-        * @return The header, or <jk>null</jk> if there is no matching header 
in the message.
+        * @return The header, never <jk>null</jk>.
         */
        @Override /* HttpMessage */
        public ResponseHeader getFirstHeader(String name) {
                Header h = response.getFirstHeader(name);
-               return h == null ? null : new ResponseHeader(request, this, 
h).parser(partParser);
+               return new ResponseHeader(request, this, h).parser(partParser);
        }
 
        /**
         * Returns the last header with a specified name of this message.
         *
-        * Header values are ignored.
-        * <br>?If there is more than one matching header in the message the 
last element of {@link #getHeaders(String)} is returned.
+        * <p>
+        * If there is more than one matching header in the message the last 
element of {@link #getHeaders(String)} is returned.
+        * <p>
+        * This method always returns a value so that you can perform 
assertions on the result.
         *
         * @param name The name of the header to return.
-        * @return The header, or <jk>null</jk> if there is no matching header 
in the message.
+        * @return The header, never <jk>null</jk>.
         */
        @Override /* HttpMessage */
        public ResponseHeader getLastHeader(String name) {
                Header h = response.getLastHeader(name);
-               return h == null ? null : new ResponseHeader(request, this, 
h).parser(partParser);
+               return new ResponseHeader(request, this, h).parser(partParser);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseHeaderAssertion.java
similarity index 79%
copy from 
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
copy to 
juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseHeaderAssertion.java
index 3f28c33..35fddcd 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/assertion/FluentResponseHeaderAssertion.java
@@ -10,21 +10,21 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the 
License.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.rest.assertions;
+package org.apache.juneau.rest.client.assertion;
 
 import org.apache.juneau.assertions.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.client.*;
 
 /**
- * Used for fluent assertion calls against {@link RequestHeader} objects.
+ * Used for fluent assertion calls against {@link ResponseHeader} objects.
  *
  * @param <R> The return type.
  */
-@FluentSetters(returns="FluentRequestHeaderAssertion<R>")
-public class FluentRequestHeaderAssertion<R> extends FluentAssertion<R> {
+@FluentSetters(returns="FluentResponseHeaderAssertion<R>")
+public class FluentResponseHeaderAssertion<R> extends FluentStringAssertion<R> 
{
 
-       private final RequestHeader value;
+       private final ResponseHeader value;
 
        /**
         * Constructor.
@@ -32,7 +32,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @param value The object being tested.
         * @param returns The object to return after the test.
         */
-       public FluentRequestHeaderAssertion(RequestHeader value, R returns) {
+       public FluentResponseHeaderAssertion(ResponseHeader value, R returns) {
                this(null, value, returns);
        }
 
@@ -43,27 +43,18 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @param value The object being tested.
         * @param returns The object to return after the test.
         */
-       public FluentRequestHeaderAssertion(Assertion creator, RequestHeader 
value, R returns) {
-               super(creator, returns);
+       public FluentResponseHeaderAssertion(Assertion creator, ResponseHeader 
value, R returns) {
+               super(creator, value.getValue(), returns);
                this.value = value;
        }
 
        /**
-        * Converts this object assertion into a string assertion.
-        *
-        * @return A new assertion.
-        * @throws AssertionError If object is not a string.
-        */
-       public FluentStringAssertion<R> asString() {
-               return new FluentStringAssertion<>(this, 
value.asString().orElse(null), returns());
-       }
-
-       /**
         * Converts this object assertion into a boolean assertion.
         *
         * @return A new assertion.
         * @throws AssertionError If object is not a boolean.
         */
+       @Override
        public FluentBooleanAssertion<R> asBoolean() {
                return new FluentBooleanAssertion<>(this, 
value.asBoolean().orElse(null), returns());
        }
@@ -74,6 +65,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a date.
         */
+       @Override
        public FluentDateAssertion<R> asDate() {
                return new FluentDateAssertion<>(this, 
value.asDateHeader().asDate().orElse(null), returns());
        }
@@ -84,6 +76,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not an integer.
         */
+       @Override
        public FluentIntegerAssertion<R> asInteger() {
                return new FluentIntegerAssertion<>(this, 
value.asInteger().orElse(null), returns());
        }
@@ -94,6 +87,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a long.
         */
+       @Override
        public FluentLongAssertion<R> asLong() {
                return new FluentLongAssertion<>(this, 
value.asLong().orElse(null), returns());
        }
@@ -104,6 +98,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a zoned-datetime.
         */
+       @Override
        public FluentZonedDateTimeAssertion<R> asZonedDateTime() {
                return new FluentZonedDateTimeAssertion<>(this, 
value.asDateHeader().asZonedDateTime().orElse(null), returns());
        }
@@ -111,19 +106,19 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
        // <FluentSetters>
 
        @Override /* GENERATED - Assertion */
-       public FluentRequestHeaderAssertion<R> msg(String msg, Object...args) {
+       public FluentResponseHeaderAssertion<R> msg(String msg, Object...args) {
                super.msg(msg, args);
                return this;
        }
 
        @Override /* GENERATED - Assertion */
-       public FluentRequestHeaderAssertion<R> stderr() {
+       public FluentResponseHeaderAssertion<R> stderr() {
                super.stderr();
                return this;
        }
 
        @Override /* GENERATED - Assertion */
-       public FluentRequestHeaderAssertion<R> stdout() {
+       public FluentResponseHeaderAssertion<R> stdout() {
                super.stdout();
                return this;
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
index 3f28c33..bd9c406 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestHeaderAssertion.java
@@ -22,7 +22,7 @@ import org.apache.juneau.rest.*;
  * @param <R> The return type.
  */
 @FluentSetters(returns="FluentRequestHeaderAssertion<R>")
-public class FluentRequestHeaderAssertion<R> extends FluentAssertion<R> {
+public class FluentRequestHeaderAssertion<R> extends FluentStringAssertion<R> {
 
        private final RequestHeader value;
 
@@ -44,7 +44,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @param returns The object to return after the test.
         */
        public FluentRequestHeaderAssertion(Assertion creator, RequestHeader 
value, R returns) {
-               super(creator, returns);
+               super(creator, value.getValue(), returns);
                this.value = value;
        }
 
@@ -54,6 +54,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a string.
         */
+       @Override
        public FluentStringAssertion<R> asString() {
                return new FluentStringAssertion<>(this, 
value.asString().orElse(null), returns());
        }
@@ -64,6 +65,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a boolean.
         */
+       @Override
        public FluentBooleanAssertion<R> asBoolean() {
                return new FluentBooleanAssertion<>(this, 
value.asBoolean().orElse(null), returns());
        }
@@ -74,6 +76,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a date.
         */
+       @Override
        public FluentDateAssertion<R> asDate() {
                return new FluentDateAssertion<>(this, 
value.asDateHeader().asDate().orElse(null), returns());
        }
@@ -84,6 +87,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not an integer.
         */
+       @Override
        public FluentIntegerAssertion<R> asInteger() {
                return new FluentIntegerAssertion<>(this, 
value.asInteger().orElse(null), returns());
        }
@@ -94,6 +98,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a long.
         */
+       @Override
        public FluentLongAssertion<R> asLong() {
                return new FluentLongAssertion<>(this, 
value.asLong().orElse(null), returns());
        }
@@ -104,6 +109,7 @@ public class FluentRequestHeaderAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a zoned-datetime.
         */
+       @Override
        public FluentZonedDateTimeAssertion<R> asZonedDateTime() {
                return new FluentZonedDateTimeAssertion<>(this, 
value.asDateHeader().asZonedDateTime().orElse(null), returns());
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestQueryParamAssertion.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestQueryParamAssertion.java
index 0a22840..688cabc 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestQueryParamAssertion.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/assertions/FluentRequestQueryParamAssertion.java
@@ -22,7 +22,7 @@ import org.apache.juneau.rest.*;
  * @param <R> The return type.
  */
 @FluentSetters(returns="FluentRequestQueryParamAssertion<R>")
-public class FluentRequestQueryParamAssertion<R> extends FluentAssertion<R> {
+public class FluentRequestQueryParamAssertion<R> extends 
FluentStringAssertion<R> {
 
        private final RequestQueryParam value;
 
@@ -44,26 +44,17 @@ public class FluentRequestQueryParamAssertion<R> extends 
FluentAssertion<R> {
         * @param returns The object to return after the test.
         */
        public FluentRequestQueryParamAssertion(Assertion creator, 
RequestQueryParam value, R returns) {
-               super(creator, returns);
+               super(creator, value.getValue(), returns);
                this.value = value;
        }
 
        /**
-        * Converts this object assertion into a string assertion.
-        *
-        * @return A new assertion.
-        * @throws AssertionError If object is not a string.
-        */
-       public FluentStringAssertion<R> asString() {
-               return new FluentStringAssertion<>(this, 
value.asString().orElse(null), returns());
-       }
-
-       /**
         * Converts this object assertion into a boolean assertion.
         *
         * @return A new assertion.
         * @throws AssertionError If object is not a boolean.
         */
+       @Override
        public FluentBooleanAssertion<R> asBoolean() {
                return new FluentBooleanAssertion<>(this, 
value.asBoolean().orElse(null), returns());
        }
@@ -74,6 +65,7 @@ public class FluentRequestQueryParamAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a date.
         */
+       @Override
        public FluentDateAssertion<R> asDate() {
                return new FluentDateAssertion<>(this, 
value.asNamedDate().asDate().orElse(null), returns());
        }
@@ -84,6 +76,7 @@ public class FluentRequestQueryParamAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not an integer.
         */
+       @Override
        public FluentIntegerAssertion<R> asInteger() {
                return new FluentIntegerAssertion<>(this, 
value.asInteger().orElse(null), returns());
        }
@@ -94,6 +87,7 @@ public class FluentRequestQueryParamAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a long.
         */
+       @Override
        public FluentLongAssertion<R> asLong() {
                return new FluentLongAssertion<>(this, 
value.asLong().orElse(null), returns());
        }
@@ -104,6 +98,7 @@ public class FluentRequestQueryParamAssertion<R> extends 
FluentAssertion<R> {
         * @return A new assertion.
         * @throws AssertionError If object is not a zoned-datetime.
         */
+       @Override
        public FluentZonedDateTimeAssertion<R> asZonedDateTime() {
                return new FluentZonedDateTimeAssertion<>(this, 
value.asNamedDate().asZonedDateTime().orElse(null), returns());
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/BadRequest_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/BadRequest_Test.java
index 7553d2a..a53b81e 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/BadRequest_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/BadRequest_Test.java
@@ -72,7 +72,7 @@ public class BadRequest_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Conflict_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Conflict_Test.java
index b3099cd..16ab813 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Conflict_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Conflict_Test.java
@@ -72,7 +72,7 @@ public class Conflict_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/ExpectationFailed_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/ExpectationFailed_Test.java
index eba648e..fb5f364 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/ExpectationFailed_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/ExpectationFailed_Test.java
@@ -72,7 +72,7 @@ public class ExpectationFailed_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/FailedDependency_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/FailedDependency_Test.java
index 915d1e7..1eb965d 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/FailedDependency_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/FailedDependency_Test.java
@@ -72,7 +72,7 @@ public class FailedDependency_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Forbidden_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Forbidden_Test.java
index 4decff4..cda9c23 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Forbidden_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Forbidden_Test.java
@@ -72,7 +72,7 @@ public class Forbidden_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Gone_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Gone_Test.java
index 172b67b..58c70c2 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Gone_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Gone_Test.java
@@ -72,7 +72,7 @@ public class Gone_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpException_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpException_Test.java
index faeca30..198fe64 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpException_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpException_Test.java
@@ -68,7 +68,7 @@ public class HttpException_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(225)
                        .assertBody().is("")
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 
        @Test
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpVersionNotSupported_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpVersionNotSupported_Test.java
index b266e8d..70aab8b 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpVersionNotSupported_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/HttpVersionNotSupported_Test.java
@@ -72,7 +72,7 @@ public class HttpVersionNotSupported_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/InsufficentStorage_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/InsufficentStorage_Test.java
index d2f133d..1fadc2a 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/InsufficentStorage_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/InsufficentStorage_Test.java
@@ -72,7 +72,7 @@ public class InsufficentStorage_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/InternalServerError_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/InternalServerError_Test.java
index 6350140..f3eaa2d 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/InternalServerError_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/InternalServerError_Test.java
@@ -72,7 +72,7 @@ public class InternalServerError_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/LengthRequired_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/LengthRequired_Test.java
index 566f701..493f5c3 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/LengthRequired_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/LengthRequired_Test.java
@@ -72,7 +72,7 @@ public class LengthRequired_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Locked_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Locked_Test.java
index bf02cd2..f4eb10e 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Locked_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Locked_Test.java
@@ -72,7 +72,7 @@ public class Locked_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/LoopDetected_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/LoopDetected_Test.java
index d0a0f64..29d4e71 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/LoopDetected_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/LoopDetected_Test.java
@@ -72,7 +72,7 @@ public class LoopDetected_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/MethodNotAllowed_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/MethodNotAllowed_Test.java
index 025c424..25e40b4 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/MethodNotAllowed_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/MethodNotAllowed_Test.java
@@ -72,7 +72,7 @@ public class MethodNotAllowed_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/MisdirectedRequest_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/MisdirectedRequest_Test.java
index f598eab..af0a69c 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/MisdirectedRequest_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/MisdirectedRequest_Test.java
@@ -72,7 +72,7 @@ public class MisdirectedRequest_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired_Test.java
index 3940cc4..5bdf1c5 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired_Test.java
@@ -72,7 +72,7 @@ public class NetworkAuthenticationRequired_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotAcceptable_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotAcceptable_Test.java
index e69a764..2aa39b1 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotAcceptable_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotAcceptable_Test.java
@@ -72,7 +72,7 @@ public class NotAcceptable_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotExtended_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotExtended_Test.java
index 8ef2535..c64c27c 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotExtended_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotExtended_Test.java
@@ -72,7 +72,7 @@ public class NotExtended_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotFound_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotFound_Test.java
index 70804bb..4622727 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotFound_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotFound_Test.java
@@ -72,7 +72,7 @@ public class NotFound_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotImplemented_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotImplemented_Test.java
index ff93df0..3f42789 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotImplemented_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/NotImplemented_Test.java
@@ -72,7 +72,7 @@ public class NotImplemented_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/PayloadTooLarge_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/PayloadTooLarge_Test.java
index 6bd9800..3a37b3d 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/PayloadTooLarge_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/PayloadTooLarge_Test.java
@@ -72,7 +72,7 @@ public class PayloadTooLarge_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionFailed_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionFailed_Test.java
index a5ed401..64b952f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionFailed_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionFailed_Test.java
@@ -72,7 +72,7 @@ public class PreconditionFailed_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionRequired_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionRequired_Test.java
index 99ffb58..cc319dc 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionRequired_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/PreconditionRequired_Test.java
@@ -72,7 +72,7 @@ public class PreconditionRequired_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/RangeNotSatisfiable_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/RangeNotSatisfiable_Test.java
index 1feec41..02c0666 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/RangeNotSatisfiable_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/RangeNotSatisfiable_Test.java
@@ -72,7 +72,7 @@ public class RangeNotSatisfiable_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge_Test.java
index b8471e1..3dfb09a 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge_Test.java
@@ -72,7 +72,7 @@ public class RequestHeaderFieldsTooLarge_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/ServiceUnavailable_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/ServiceUnavailable_Test.java
index a0196a4..471abcc 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/ServiceUnavailable_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/ServiceUnavailable_Test.java
@@ -72,7 +72,7 @@ public class ServiceUnavailable_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/TooManyRequests_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/TooManyRequests_Test.java
index a344e9c..489184e 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/TooManyRequests_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/TooManyRequests_Test.java
@@ -72,7 +72,7 @@ public class TooManyRequests_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Unauthorized_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Unauthorized_Test.java
index 98c6254..20675da 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/Unauthorized_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/Unauthorized_Test.java
@@ -72,7 +72,7 @@ public class Unauthorized_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnavailableForLegalReasons_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnavailableForLegalReasons_Test.java
index b6dd084..3016817 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnavailableForLegalReasons_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnavailableForLegalReasons_Test.java
@@ -72,7 +72,7 @@ public class UnavailableForLegalReasons_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnprocessableEntity_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnprocessableEntity_Test.java
index fbb16ac..a76f5aa 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnprocessableEntity_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnprocessableEntity_Test.java
@@ -72,7 +72,7 @@ public class UnprocessableEntity_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnsupportedMediaType_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnsupportedMediaType_Test.java
index 59886ed..98a0951 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnsupportedMediaType_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UnsupportedMediaType_Test.java
@@ -72,7 +72,7 @@ public class UnsupportedMediaType_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UpgradeRequired_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UpgradeRequired_Test.java
index afc3dd2..9d30b66 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UpgradeRequired_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UpgradeRequired_Test.java
@@ -72,7 +72,7 @@ public class UpgradeRequired_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UriTooLong_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UriTooLong_Test.java
index 586e5f0..05797b9 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/UriTooLong_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/UriTooLong_Test.java
@@ -72,7 +72,7 @@ public class UriTooLong_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/VariantAlsoNegotiates_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/VariantAlsoNegotiates_Test.java
index 1f7a5c8..3cf88dd 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/exception/VariantAlsoNegotiates_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/exception/VariantAlsoNegotiates_Test.java
@@ -72,7 +72,7 @@ public class VariantAlsoNegotiates_Test {
                c.get("/f5").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is(MESSAGE)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
                c.get("/f6").run()
                        .assertStatus().code().is(CODE)
                        .assertBody().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Accepted_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Accepted_Test.java
index 2903715..9123874 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Accepted_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Accepted_Test.java
@@ -43,6 +43,6 @@ public class Accepted_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(202)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/AlreadyReported_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/AlreadyReported_Test.java
index 040658a..c91148f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/AlreadyReported_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/AlreadyReported_Test.java
@@ -43,6 +43,6 @@ public class AlreadyReported_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(208)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Continue_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Continue_Test.java
index 1eaaa1c..a0ee208 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Continue_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Continue_Test.java
@@ -43,6 +43,6 @@ public class Continue_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(1100)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Created_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Created_Test.java
index 251b49e..7cf95a5 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Created_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Created_Test.java
@@ -43,6 +43,6 @@ public class Created_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(201)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/EarlyHints_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/EarlyHints_Test.java
index f765346..d8b5848 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/EarlyHints_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/EarlyHints_Test.java
@@ -43,6 +43,6 @@ public class EarlyHints_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(1103)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Found_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Found_Test.java
index f2bc154..b0d7eae 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/response/Found_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/response/Found_Test.java
@@ -47,10 +47,10 @@ public class Found_Test {
                        .run()
                        .assertCode().is(302)
                        .assertBody().is("Found")
-                       .assertStringHeader("Location").is("/foo");
+                       .assertHeader("Location").is("/foo");
                client.get("/a4")
                        .run()
                        .assertCode().is(302)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/IMUsed_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/IMUsed_Test.java
index e7abbb1..270f335 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/IMUsed_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/IMUsed_Test.java
@@ -43,6 +43,6 @@ public class IMUsed_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(226)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/MovedPermanently_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/MovedPermanently_Test.java
index 0d3c671..2ac65b5 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/MovedPermanently_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/MovedPermanently_Test.java
@@ -47,10 +47,10 @@ public class MovedPermanently_Test {
                        .run()
                        .assertCode().is(301)
                        .assertBody().is("Moved Permanently")
-                       .assertStringHeader("Location").is("/foo");
+                       .assertHeader("Location").is("/foo");
                client.get("/a4")
                        .run()
                        .assertCode().is(301)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/MultiStatus_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/MultiStatus_Test.java
index 3c415bb..54a3b91 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/MultiStatus_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/MultiStatus_Test.java
@@ -43,6 +43,6 @@ public class MultiStatus_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(207)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/MultipleChoices_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/MultipleChoices_Test.java
index 726c3f2..a6e5148 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/MultipleChoices_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/MultipleChoices_Test.java
@@ -43,6 +43,6 @@ public class MultipleChoices_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(300)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/NoContent_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/NoContent_Test.java
index 6aa8e75..e3a2ca9 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/NoContent_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/NoContent_Test.java
@@ -41,6 +41,6 @@ public class NoContent_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(204)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/NonAuthoritativeInformation_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/NonAuthoritativeInformation_Test.java
index 248f279..fd2b2a8 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/NonAuthoritativeInformation_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/NonAuthoritativeInformation_Test.java
@@ -43,6 +43,6 @@ public class NonAuthoritativeInformation_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(203)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/NotModified_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/NotModified_Test.java
index 4f4aab9..61e7fd6 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/NotModified_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/NotModified_Test.java
@@ -41,6 +41,6 @@ public class NotModified_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(304)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Ok_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Ok_Test.java
index ca4870e..4880049 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/response/Ok_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/response/Ok_Test.java
@@ -43,6 +43,6 @@ public class Ok_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(200)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/PartialContent_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/PartialContent_Test.java
index 41356bc..88a6c53 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/PartialContent_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/PartialContent_Test.java
@@ -43,6 +43,6 @@ public class PartialContent_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(206)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/PermanentRedirect_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/PermanentRedirect_Test.java
index b268db8..2a140f5 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/PermanentRedirect_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/PermanentRedirect_Test.java
@@ -47,10 +47,10 @@ public class PermanentRedirect_Test {
                        .run()
                        .assertCode().is(308)
                        .assertBody().is("Permanent Redirect")
-                       .assertStringHeader("Location").is("/foo");
+                       .assertHeader("Location").is("/foo");
                client.get("/a4")
                        .run()
                        .assertCode().is(308)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Processing_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Processing_Test.java
index 0ecb71d..3533c2a 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/Processing_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/Processing_Test.java
@@ -43,6 +43,6 @@ public class Processing_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(1102)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/ResetContent_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/ResetContent_Test.java
index b316a8d..ac05284 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/ResetContent_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/ResetContent_Test.java
@@ -41,6 +41,6 @@ public class ResetContent_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(205)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/SeeOther_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/SeeOther_Test.java
index 317a539..fc0dea6 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/SeeOther_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/SeeOther_Test.java
@@ -47,10 +47,10 @@ public class SeeOther_Test {
                        .run()
                        .assertCode().is(303)
                        .assertBody().is("See Other")
-                       .assertStringHeader("Location").is("/foo");
+                       .assertHeader("Location").is("/foo");
                client.get("/a4")
                        .run()
                        .assertCode().is(303)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/SwitchingProtocols_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/SwitchingProtocols_Test.java
index b85a775..a766e75 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/SwitchingProtocols_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/SwitchingProtocols_Test.java
@@ -43,6 +43,6 @@ public class SwitchingProtocols_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(1101)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/TemporaryRedirect_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/TemporaryRedirect_Test.java
index aedb282..8e12dcb 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/TemporaryRedirect_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/TemporaryRedirect_Test.java
@@ -47,10 +47,10 @@ public class TemporaryRedirect_Test {
                        .run()
                        .assertCode().is(307)
                        .assertBody().is("Temporary Redirect")
-                       .assertStringHeader("Location").is("/foo");
+                       .assertHeader("Location").is("/foo");
                client.get("/a4")
                        .run()
                        .assertCode().is(307)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
\ No newline at end of file
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/UseProxy_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/UseProxy_Test.java
index 0aa8113..0d77fcc 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/response/UseProxy_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/response/UseProxy_Test.java
@@ -43,6 +43,6 @@ public class UseProxy_Test {
                client.get("/a3")
                        .run()
                        .assertCode().is(305)
-                       .assertStringHeader("Foo").is("bar");
+                       .assertHeader("Foo").is("bar");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
index aa2422a..3d7acbf 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
@@ -194,50 +194,50 @@ public class Header_AcceptEncoding_Test {
                c.get("/a")
                        .acceptEncoding("mycoding")
                        .run()
-                       .assertStringHeader("Content-Encoding").doesNotExist() 
// Should not be set
-                       .assertStringHeader("Content-Type").is("text/direct")
+                       .assertHeader("Content-Encoding").doesNotExist() // 
Should not be set
+                       .assertHeader("Content-Type").is("text/direct")
                        .assertBody().is("foo");
                c.get("/a")
                        .acceptEncoding("*")
                        .run()
-                       .assertStringHeader("Content-Encoding").doesNotExist() 
// Should not be set
-                       .assertStringHeader("Content-Type").is("text/direct")
+                       .assertHeader("Content-Encoding").doesNotExist() // 
Should not be set
+                       .assertHeader("Content-Type").is("text/direct")
                        .assertBody().is("foo");
 
                c.get("/b")
                        .acceptEncoding("mycoding")
                        .run()
-                       .assertStringHeader("Content-Encoding").doesNotExist() 
// Should not be set
+                       .assertHeader("Content-Encoding").doesNotExist() // 
Should not be set
                        .assertBody().is("foo");
                c.get("/b")
                        .acceptEncoding("*")
                        .run()
-                       .assertStringHeader("Content-Encoding").doesNotExist() 
// Should not be set
+                       .assertHeader("Content-Encoding").doesNotExist() // 
Should not be set
                        .assertBody().is("foo");
 
                byte[] body;
                body = c.get("/c")
                        .acceptEncoding("mycoding")
                        .run()
-                       .assertStringHeader("Content-Encoding").is("mycoding")
+                       .assertHeader("Content-Encoding").is("mycoding")
                        .getBody().asBytes();
                assertEquals("foo", StringUtils.decompress(body));
                body = c.get("/c")
                        .acceptEncoding("*")
                        .run()
-                       .assertStringHeader("Content-Encoding").is("mycoding")
+                       .assertHeader("Content-Encoding").is("mycoding")
                        .getBody().asBytes();
                assertEquals("foo", StringUtils.decompress(body));
 
                c.get("/d")
                        .acceptEncoding("mycoding")
                        .run()
-                       .assertStringHeader("Content-Encoding").doesNotExist() 
// Should not be set
+                       .assertHeader("Content-Encoding").doesNotExist() // 
Should not be set
                        .assertBody().is("foo");
                c.get("/d")
                        .acceptEncoding("*")
                        .run()
-                       .assertStringHeader("Content-Encoding").doesNotExist() 
// Should not be set
+                       .assertHeader("Content-Encoding").doesNotExist() // 
Should not be set
                        .assertBody().is("foo");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Returns_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Returns_Test.java
index 2b569b1..8b5768f 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Returns_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Returns_Test.java
@@ -159,10 +159,10 @@ public class RestOp_Returns_Test {
                        .assertBody().is("foo");
                b.get("/b")
                        .run()
-                       .assertStringHeader("Foo").is("Bar");
+                       .assertHeader("Foo").is("Bar");
                b.get("/c")
                        .run()
-                       
.assertStringHeader("Content-Type").is("application/json");
+                       .assertHeader("Content-Type").is("application/json");
                b.get("/d?foo=bar")
                        .run()
                        .assertBody().is("bar");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/ResponseHeader_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/ResponseHeader_Test.java
index b687341..1bda474 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/ResponseHeader_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/ResponseHeader_Test.java
@@ -58,15 +58,15 @@ public class ResponseHeader_Test {
                a.get("/a")
                        .run()
                        .assertCode().is(200)
-                       .assertStringHeader("Foo").is("foo");
+                       .assertHeader("Foo").is("foo");
                a.get("/b")
                        .run()
                        .assertCode().is(200)
-                       .assertStringHeader("Foo").is("foo");
+                       .assertHeader("Foo").is("foo");
                a.get("/c")
                        .run()
                        .assertCode().is(200)
-                       .assertStringHeader("Bar").is("foo");
+                       .assertHeader("Bar").is("foo");
        }
 
        
//------------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
index 42c0245..30cb8e3 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestHook_Test.java
@@ -605,9 +605,9 @@ public class RestHook_Test {
        public void h01_postCall() throws Exception {
                RestClient h = MockRestClient.build(H.class);
                h.get("/").run()
-                       .assertStringHeader("post1-called").is("true")
-                       .assertStringHeader("post2-called").is("true")
-                       .assertStringHeader("post3-called").is("true")
-                       .assertStringHeader("post4-called").is("true");
+                       .assertHeader("post1-called").is("true")
+                       .assertHeader("post2-called").is("true")
+                       .assertHeader("post3-called").is("true")
+                       .assertHeader("post4-called").is("true");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
index 50e495e..a76f72a 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Body_Test.java
@@ -50,46 +50,46 @@ public class RestClient_Body_Test {
        public void a01_BasicHttpResource() throws Exception {
                BasicHttpResource x1 = httpResource("foo");
                client().build().post("/", x1).run()
-                       .assertIntegerHeader("X-Content-Length").is(3)
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       .assertStringHeader("X-Content-Type").doesNotExist()
-                       
.assertStringHeader("X-Transfer-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Length").asInteger().is(3)
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").doesNotExist()
+                       .assertHeader("X-Transfer-Encoding").doesNotExist()
                ;
 
                BasicHttpResource x2 = 
httpResource("foo").contentType("text/plain").contentEncoding("identity");
                client().build().post("/",x2).run()
-                       .assertIntegerHeader("X-Content-Length").is(3)
-                       .assertStringHeader("X-Content-Encoding").is("identity")
-                       .assertStringHeader("X-Content-Type").is("text/plain")
-                       
.assertStringHeader("X-Transfer-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Length").asInteger().is(3)
+                       .assertHeader("X-Content-Encoding").is("identity")
+                       .assertHeader("X-Content-Type").is("text/plain")
+                       .assertHeader("X-Transfer-Encoding").doesNotExist()
                ;
 
                BasicHttpResource x3 = 
httpResource("foo").contentType(contentType("text/plain")).contentEncoding(contentEncoding("identity")).chunked();
                client().build().post("/",x3).run()
-                       .assertIntegerHeader("X-Content-Length").doesNotExist() 
 // Missing when chunked.
-                       .assertStringHeader("X-Content-Encoding").is("identity")
-                       .assertStringHeader("X-Content-Type").is("text/plain")
-                       .assertStringHeader("X-Transfer-Encoding").is("chunked")
+                       .assertHeader("X-Content-Length").doesNotExist()  // 
Missing when chunked.
+                       .assertHeader("X-Content-Encoding").is("identity")
+                       .assertHeader("X-Content-Type").is("text/plain")
+                       .assertHeader("X-Transfer-Encoding").is("chunked")
                ;
 
                BasicHttpResource x4 = new BasicHttpResource("foo", 
contentType("text/plain"), contentEncoding("identity"));
                client().build().post("/",x4).run()
-                       .assertIntegerHeader("X-Content-Length").is(3)
-                       .assertStringHeader("X-Content-Encoding").is("identity")
-                       .assertStringHeader("X-Content-Type").is("text/plain")
-                       
.assertStringHeader("X-Transfer-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Length").asInteger().is(3)
+                       .assertHeader("X-Content-Encoding").is("identity")
+                       .assertHeader("X-Content-Type").is("text/plain")
+                       .assertHeader("X-Transfer-Encoding").doesNotExist()
                ;
 
                BasicHttpResource x5 = 
httpResource("foo").header("Foo","bar").header(header("Baz","qux"));
                client().build().post("/",x5).run()
-                       .assertStringHeader("X-Foo").is("bar")
-                       .assertStringHeader("X-Baz").is("qux")
+                       .assertHeader("X-Foo").is("bar")
+                       .assertHeader("X-Baz").is("qux")
                ;
 
                BasicHttpResource x6 = 
httpResource("foo").headers(Arrays.asList(header("Foo","bar"),header("Baz","qux")));
                client().build().post("/",x6).run()
-                       .assertStringHeader("X-Foo").is("bar")
-                       .assertStringHeader("X-Baz").is("qux")
+                       .assertHeader("X-Foo").is("bar")
+                       .assertHeader("X-Baz").is("qux")
                ;
 
                BasicHttpResource x7 = httpResource(new StringReader("foo"));
@@ -107,34 +107,34 @@ public class RestClient_Body_Test {
        public void a02_BasicHttpEntity() throws Exception {
                BasicHttpEntity x1 = httpEntity("foo");
                client().build().post("/", x1).run()
-                       .assertIntegerHeader("X-Content-Length").is(3)
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       .assertStringHeader("X-Content-Type").doesNotExist()
-                       
.assertStringHeader("X-Transfer-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Length").asInteger().is(3)
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").doesNotExist()
+                       .assertHeader("X-Transfer-Encoding").doesNotExist()
                ;
 
                BasicHttpEntity x2 = 
httpEntity("foo").contentType("text/plain").contentEncoding("identity");
                client().build().post("/",x2).run()
-                       .assertIntegerHeader("X-Content-Length").is(3)
-                       .assertStringHeader("X-Content-Encoding").is("identity")
-                       .assertStringHeader("X-Content-Type").is("text/plain")
-                       
.assertStringHeader("X-Transfer-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Length").asInteger().is(3)
+                       .assertHeader("X-Content-Encoding").is("identity")
+                       .assertHeader("X-Content-Type").is("text/plain")
+                       .assertHeader("X-Transfer-Encoding").doesNotExist()
                ;
 
                BasicHttpEntity x3 = 
httpEntity("foo").contentType(contentType("text/plain")).contentEncoding(contentEncoding("identity")).chunked();
                client().build().post("/",x3).run()
-                       .assertIntegerHeader("X-Content-Length").doesNotExist() 
 // Missing when chunked.
-                       .assertStringHeader("X-Content-Encoding").is("identity")
-                       .assertStringHeader("X-Content-Type").is("text/plain")
-                       .assertStringHeader("X-Transfer-Encoding").is("chunked")
+                       .assertHeader("X-Content-Length").doesNotExist()  // 
Missing when chunked.
+                       .assertHeader("X-Content-Encoding").is("identity")
+                       .assertHeader("X-Content-Type").is("text/plain")
+                       .assertHeader("X-Transfer-Encoding").is("chunked")
                ;
 
                BasicHttpEntity x4 = new BasicHttpEntity("foo", 
contentType("text/plain"), contentEncoding("identity"));
                client().build().post("/",x4).run()
-                       .assertIntegerHeader("X-Content-Length").is(3)
-                       .assertStringHeader("X-Content-Encoding").is("identity")
-                       .assertStringHeader("X-Content-Type").is("text/plain")
-                       
.assertStringHeader("X-Transfer-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Length").asInteger().is(3)
+                       .assertHeader("X-Content-Encoding").is("identity")
+                       .assertHeader("X-Content-Type").is("text/plain")
+                       .assertHeader("X-Transfer-Encoding").doesNotExist()
                ;
 
                BasicHttpEntity x7 = httpEntity(new StringReader("foo"));
@@ -159,45 +159,45 @@ public class RestClient_Body_Test {
 
                SerializedHttpEntity x1 = 
serializedHttpEntity(ABean.get(),null);
                client().build().post("/",x1).run()
-                       .assertStringHeader("X-Content-Length").doesNotExist()
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       .assertStringHeader("X-Content-Type").doesNotExist()
-                       
.assertStringHeader("X-Transfer-Encoding").is("chunked")  // Because content 
length is -1.
+                       .assertHeader("X-Content-Length").doesNotExist()
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").doesNotExist()
+                       .assertHeader("X-Transfer-Encoding").is("chunked")  // 
Because content length is -1.
                ;
 
                SerializedHttpEntity x2 = serializedHttpEntity(ABean.get(),js);
                client().build().post("/",x2).run()
-                       .assertStringHeader("X-Content-Length").doesNotExist()
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       
.assertStringHeader("X-Content-Type").is("application/json")
+                       .assertHeader("X-Content-Length").doesNotExist()
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").is("application/json")
                        
.getBody().assertObject(ABean.class).asJson().is("{a:1,b:'foo'}");
 
                SerializedHttpEntity x3 = 
SerializedHttpEntity.of(()->ABean.get(),js);
                client().build().post("/",x3).run()
-                       .assertStringHeader("X-Content-Length").doesNotExist()
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       
.assertStringHeader("X-Content-Type").is("application/json")
+                       .assertHeader("X-Content-Length").doesNotExist()
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").is("application/json")
                        
.getBody().assertObject(ABean.class).asJson().is("{a:1,b:'foo'}");
 
                SerializedHttpEntity x4 = serializedHttpEntity(new 
StringReader("{a:1,b:'foo'}"),null);
                client().build().post("/",x4).run()
-                       .assertStringHeader("X-Content-Length").doesNotExist()
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       .assertStringHeader("X-Content-Type").doesNotExist()
+                       .assertHeader("X-Content-Length").doesNotExist()
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").doesNotExist()
                        
.getBody().assertObject(ABean.class).asJson().is("{a:1,b:'foo'}");
 
                SerializedHttpEntity x5 = serializedHttpEntity(new 
ByteArrayInputStream("{a:1,b:'foo'}".getBytes()),null);
                client().build().post("/",x5).run()
-                       .assertStringHeader("X-Content-Length").doesNotExist()
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       .assertStringHeader("X-Content-Type").doesNotExist()
+                       .assertHeader("X-Content-Length").doesNotExist()
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").doesNotExist()
                        
.getBody().assertObject(ABean.class).asJson().is("{a:1,b:'foo'}");
 
                SerializedHttpEntity x6 = serializedHttpEntity(f,null);
                client().build().post("/",x6).run()
-                       .assertStringHeader("X-Content-Length").is("0")
-                       .assertStringHeader("X-Content-Encoding").doesNotExist()
-                       .assertStringHeader("X-Content-Type").doesNotExist()
+                       .assertHeader("X-Content-Length").is("0")
+                       .assertHeader("X-Content-Encoding").doesNotExist()
+                       .assertHeader("X-Content-Type").doesNotExist()
                        
.getBody().assertObject(ABean.class).asJson().is("{a:0}");
 
                InputStream x7 = new ByteArrayInputStream("foo".getBytes()) {
@@ -230,15 +230,15 @@ public class RestClient_Body_Test {
 
                SerializedHttpEntity x13 = serializedHttpEntity(new 
StringReader("foo"), null).chunked();
                client().build().post("/",x13).run()
-                       
.assertStringHeader("X-Transfer-Encoding").is("chunked");
+                       .assertHeader("X-Transfer-Encoding").is("chunked");
 
                SerializedHttpEntity x14 = serializedHttpEntity(new 
StringReader("foo"), null).contentEncoding("identity");
                client().build().post("/",x14).run()
-                       
.assertStringHeader("X-Content-Encoding").is("identity");
+                       .assertHeader("X-Content-Encoding").is("identity");
 
                SerializedHttpEntity x15 = serializedHttpEntity(new 
StringReader("foo"), null).contentLength(3l);
                client().build().post("/",x15).run()
-                       .assertStringHeader("X-Content-Length").is("3");
+                       .assertHeader("X-Content-Length").is("3");
        }
 
        
//------------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
index 6de4b91..9040cf4 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
@@ -97,7 +97,15 @@ public class RestClient_Config_BeanContext_Test {
 
        @Test
        public void a02_beanConstructorVisibility() throws Exception {
-               RestResponse x = 
client(A2b.class).beanConstructorVisibility(Visibility.PROTECTED).build().post("/test",new
 A2a(1)).header("X",new 
A2a(1)).run().cacheBody().assertBody().is("1").assertStringHeader("X").is("1");
+               RestResponse x = client(A2b.class)
+                       .beanConstructorVisibility(Visibility.PROTECTED)
+                       .build()
+                       .post("/test",new A2a(1))
+                       .header("X",new A2a(1))
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("1")
+                       .assertHeader("X").is("1");
                assertEquals(1,x.getBody().as(A2a.class).f);
                assertEquals(1,x.getResponseHeader("X").as(A2a.class).get().f);
        }
@@ -119,7 +127,15 @@ public class RestClient_Config_BeanContext_Test {
 
        @Test
        public void a03_beanFieldVisibility() throws Exception {
-               RestResponse x = 
client(A2b.class).beanFieldVisibility(Visibility.PROTECTED).build().post("/test",A3.get()).header("X",A3.get()).run().cacheBody().assertBody().is("{f1:1,f2:2}").assertStringHeader("X").is("f1=1,f2=2");
+               RestResponse x = client(A2b.class)
+                       .beanFieldVisibility(Visibility.PROTECTED)
+                       .build()
+                       .post("/test",A3.get())
+                       .header("X",A3.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1,f2:2}")
+                       .assertHeader("X").is("f1=1,f2=2");
                assertEquals(2,x.getBody().as(A3.class).f2);
                assertEquals(2,x.getResponseHeader("X").as(A3.class).get().f2);
        }
@@ -155,23 +171,64 @@ public class RestClient_Config_BeanContext_Test {
 
        @Test
        public void a04_beanFilters() throws Exception {
-               RestResponse x = 
client(A2b.class).beanProperties(A4b.class,"f1").build().post("/test",A4b.get()).header("X",A4b.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               RestResponse x = client(A2b.class)
+                       .beanProperties(A4b.class,"f1")
+                       .build()
+                       .post("/test",A4b.get())
+                       .header("X",A4b.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody()
+                       .is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals(0,x.getBody().as(A4b.class).f2);
                assertEquals(0,x.getResponseHeader("X").as(A4b.class).get().f2);
 
-               x = 
client(A2b.class).beanProperties(A4b.class,"f1").build().post("/test",A4b.get()).header("X",A4b.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               x = client(A2b.class)
+                       .beanProperties(A4b.class,"f1")
+                       .build()
+                       .post("/test",A4b.get())
+                       .header("X",A4b.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals(0,x.getBody().as(A4b.class).f2);
                assertEquals(0,x.getResponseHeader("X").as(A4b.class).get().f2);
 
-               x = 
client(A2b.class).beanProperties(A4b.class,"f1").build().post("/test",A4b.get()).header("X",A4b.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               x = client(A2b.class)
+                       .beanProperties(A4b.class,"f1")
+                       .build()
+                       .post("/test",A4b.get())
+                       .header("X",A4b.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals(0,x.getBody().as(A4b.class).f2);
                assertEquals(0,x.getResponseHeader("X").as(A4b.class).get().f2);
 
-               x = 
client(A2b.class).beanProperties(A4b.class,"f1").build().post("/test",A4b.get()).header("X",A4b.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               x = client(A2b.class)
+                       .beanProperties(A4b.class,"f1")
+                       .build()
+                       .post("/test",A4b.get())
+                       .header("X",A4b.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals(0,x.getBody().as(A4b.class).f2);
                assertEquals(0,x.getResponseHeader("X").as(A4b.class).get().f2);
 
-               x = 
client(A2b.class).interfaces(A4a.class).build().post("/test",A4b.get()).header("X",A4b.get()).run().cacheBody().assertBody().is("{f3:3}").assertStringHeader("X").is("f3=3");
+               x = client(A2b.class)
+                       .interfaces(A4a.class)
+                       .build()
+                       .post("/test",A4b.get())
+                       .header("X",A4b.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f3:3}")
+                       .assertHeader("X").is("f3=3");
                assertEquals(3,x.getBody().as(A4b.class).f3);
                assertEquals(3,x.getResponseHeader("X").as(A4b.class).get().f3);
        }
@@ -204,7 +261,15 @@ public class RestClient_Config_BeanContext_Test {
 
        @Test
        public void a05_beanMethodVisibility() throws Exception {
-               RestResponse x = 
client(A2b.class).beanMethodVisibility(Visibility.PROTECTED).build().post("/test",A5.get()).header("X",A5.get()).run().cacheBody().assertBody().is("{f1:1,f2:2}").assertStringHeader("X").is("f1=1,f2=2");
+               RestResponse x = client(A2b.class)
+                       .beanMethodVisibility(Visibility.PROTECTED)
+                       .build()
+                       .post("/test",A5.get())
+                       .header("X",A5.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1,f2:2}")
+                       .assertHeader("X").is("f1=1,f2=2");
                assertEquals(2,x.getBody().as(A5.class).f2);
                assertEquals(2,x.getResponseHeader("X").as(A5.class).get().f2);
        }
@@ -229,14 +294,40 @@ public class RestClient_Config_BeanContext_Test {
 
        @Test
        public void a07_beansRequireDefaultConstructor() throws Exception {
-               client(A2b.class).build().post("/test",new 
A7("1")).header("X",new 
A7("1")).run().assertBody().is("{f1:'1'}").assertStringHeader("X").is("f1=1");
-               
client(A2b.class).beansRequireDefaultConstructor().build().post("/test",new 
A7("1")).header("X",new 
A7("1")).run().assertBody().is("'1'").assertStringHeader("X").is("1");
+               client(A2b.class)
+                       .build()
+                       .post("/test",new A7("1"))
+                       .header("X",new A7("1"))
+                       .run()
+                       .assertBody().is("{f1:'1'}")
+                       .assertHeader("X").is("f1=1");
+               client(A2b.class)
+                       .beansRequireDefaultConstructor()
+                       .build()
+                       .post("/test",new A7("1"))
+                       .header("X",new A7("1"))
+                       .run()
+                       .assertBody().is("'1'")
+                       .assertHeader("X").is("1");
        }
 
        @Test
        public void a08_beansRequireSerializable() throws Exception {
-               client(A2b.class).build().post("/test",new 
A7("1")).header("X",new 
A7("1")).run().assertBody().is("{f1:'1'}").assertStringHeader("X").is("f1=1");
-               
client(A2b.class).beansRequireSerializable().build().post("/test",new 
A7("1")).header("X",new 
A7("1")).run().assertBody().is("'1'").assertStringHeader("X").is("1");
+               client(A2b.class)
+                       .build()
+                       .post("/test",new A7("1"))
+                       .header("X",new A7("1"))
+                       .run()
+                       .assertBody().is("{f1:'1'}")
+                       .assertHeader("X").is("f1=1");
+               client(A2b.class)
+                       .beansRequireSerializable()
+                       .build()
+                       .post("/test",new A7("1"))
+                       .header("X",new A7("1"))
+                       .run()
+                       .assertBody().is("'1'")
+                       .assertHeader("X").is("1");
        }
 
        public static class A9 {
@@ -264,31 +355,96 @@ public class RestClient_Config_BeanContext_Test {
 
        @Test
        public void a09_beansRequireSettersForGetters() throws Exception {
-               
client(A2b.class).build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f1:1,f2:2}").assertStringHeader("X").is("f1=1,f2=2");
-               
client(A2b.class).beansRequireSettersForGetters().build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               client(A2b.class)
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f1:1,f2:2}")
+                       .assertHeader("X").is("f1=1,f2=2");
+               client(A2b.class)
+                       .beansRequireSettersForGetters()
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
        }
 
        @Test
        public void a10_bpi() throws Exception {
-               
client(A2b.class).beanProperties(OMap.of("A9","f2")).build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
-               
client(A2b.class).beanProperties(A9.class,"f2").build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
-               
client(A2b.class).beanProperties("A9","f2").build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
-               
client(A2b.class).beanProperties(A9.class.getName(),"f2").build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanProperties(OMap.of("A9","f2"))
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanProperties(A9.class,"f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanProperties("A9","f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanProperties(A9.class.getName(),"f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
        }
 
        @Test
        public void a11_bpro() throws Exception {
                RestResponse x = null;
 
-               x = 
client(A2b.class).beanPropertiesReadOnly(OMap.of("09","f2")).build().post("/test",A9.get()).header("X",A9.get()).run().cacheBody().assertBody().is("{f1:1,f2:2}").assertStringHeader("X").is("f1=1,f2=2");
+               x = client(A2b.class)
+                       .beanPropertiesReadOnly(OMap.of("09","f2"))
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1,f2:2}")
+                       .assertHeader("X").is("f1=1,f2=2");
                assertEquals("1/0",x.getBody().as(A9.class).toString());
                
assertEquals("1/0",x.getResponseHeader("X").as(A9.class).get().toString());
 
-               x = 
client(A2b.class).beanPropertiesReadOnly(A9.class,"f2").build().post("/test",A9.get()).header("X",A9.get()).run().cacheBody().assertBody().is("{f1:1,f2:2}").assertStringHeader("X").is("f1=1,f2=2");
+               x = client(A2b.class)
+                       .beanPropertiesReadOnly(A9.class,"f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1,f2:2}")
+                       .assertHeader("X").is("f1=1,f2=2");
                assertEquals("1/0",x.getBody().as(A9.class).toString());
                
assertEquals("1/0",x.getResponseHeader("X").as(A9.class).get().toString());
 
-               x = 
client(A2b.class).beanPropertiesReadOnly("O9","f2").build().post("/test",A9.get()).header("X",A9.get()).run().cacheBody().assertBody().is("{f1:1,f2:2}").assertStringHeader("X").is("f1=1,f2=2");
+               x = client(A2b.class)
+                       .beanPropertiesReadOnly("O9","f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1,f2:2}")
+                       .assertHeader("X").is("f1=1,f2=2");
                assertEquals("1/0",x.getBody().as(A9.class).toString());
                
assertEquals("1/0",x.getResponseHeader("X").as(A9.class).get().toString());
        }
@@ -297,25 +453,77 @@ public class RestClient_Config_BeanContext_Test {
        public void a12_bpwo() throws Exception {
                RestResponse x = null;
 
-               x = 
client(A2b.class).beanPropertiesWriteOnly(OMap.of("A9","f2")).build().post("/test",A9.get()).header("X",A9.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               x = client(A2b.class)
+                       .beanPropertiesWriteOnly(OMap.of("A9","f2"))
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals("1/0",x.getBody().as(A9.class).toString());
                
assertEquals("1/0",x.getResponseHeader("X").as(A9.class).get().toString());
 
-               x = 
client(A2b.class).beanPropertiesWriteOnly(A9.class,"f2").build().post("/test",A9.get()).header("X",A9.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               x = client(A2b.class)
+                       .beanPropertiesWriteOnly(A9.class,"f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals("1/0",x.getBody().as(A9.class).toString());
                
assertEquals("1/0",x.getResponseHeader("X").as(A9.class).get().toString());
 
-               x = 
client(A2b.class).beanPropertiesWriteOnly("A9","f2").build().post("/test",A9.get()).header("X",A9.get()).run().cacheBody().assertBody().is("{f1:1}").assertStringHeader("X").is("f1=1");
+               x = client(A2b.class)
+                       .beanPropertiesWriteOnly("A9","f2")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .cacheBody()
+                       .assertBody().is("{f1:1}")
+                       .assertHeader("X").is("f1=1");
                assertEquals("1/0",x.getBody().as(A9.class).toString());
                
assertEquals("1/0",x.getResponseHeader("X").as(A9.class).get().toString());
        }
 
        @Test
        public void a13_bpx() throws Exception {
-               
client(A2b.class).beanPropertiesExcludes(OMap.of("A9","f1")).build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
-               
client(A2b.class).beanPropertiesExcludes(A9.class,"f1").build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
-               
client(A2b.class).beanPropertiesExcludes("A9","f1").build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
-               
client(A2b.class).beanPropertiesExcludes(A9.class.getName(),"f1").build().post("/test",A9.get()).header("X",A9.get()).run().assertBody().is("{f2:2}").assertStringHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanPropertiesExcludes(OMap.of("A9","f1"))
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get()).
+                       run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanPropertiesExcludes(A9.class,"f1")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
+               client(A2b.class)
+               .beanPropertiesExcludes("A9","f1")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
+               client(A2b.class)
+                       .beanPropertiesExcludes(A9.class.getName(),"f1")
+                       .build()
+                       .post("/test",A9.get())
+                       .header("X",A9.get())
+                       .run()
+                       .assertBody().is("{f2:2}")
+                       .assertHeader("X").is("f2=2");
        }
 
        public static class A14 {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
index 9f62c06..84c80af 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
@@ -269,13 +269,13 @@ public class RestClient_Config_RestClient_Test {
 
        @Test
        public void a05_interceptors() throws Exception {
-               
client().header("Foo","f1").interceptors(A5.class).build().get("/checkHeader").header("Check","foo").header("Foo","f3").run().assertBody().is("['f1','f2','f3']").assertStringHeader("Bar").is("b1");
+               
client().header("Foo","f1").interceptors(A5.class).build().get("/checkHeader").header("Check","foo").header("Foo","f3").run().assertBody().is("['f1','f2','f3']").assertHeader("Bar").is("b1");
                assertEquals(111,A5.x);
 
-               client().header("Foo","f1").interceptors(new 
A5()).build().get("/checkHeader").header("Check","foo").header("Foo","f3").run().assertBody().is("['f1','f2','f3']").assertStringHeader("Bar").is("b1");
+               client().header("Foo","f1").interceptors(new 
A5()).build().get("/checkHeader").header("Check","foo").header("Foo","f3").run().assertBody().is("['f1','f2','f3']").assertHeader("Bar").is("b1");
                assertEquals(111,A5.x);
 
-               
client().header("Foo","f1").build().get("/checkHeader").interceptors(new 
A5()).header("Check","foo").header("Foo","f3").run().assertBody().is("['f1','f2','f3']").assertStringHeader("Bar").is("b1");
+               
client().header("Foo","f1").build().get("/checkHeader").interceptors(new 
A5()).header("Check","foo").header("Foo","f3").run().assertBody().is("['f1','f2','f3']").assertHeader("Bar").is("b1");
                assertEquals(111,A5.x);
 
                
assertThrown(()->client().header("Foo","f1").interceptors(A5a.class).build().get("/checkHeader")).isType(RuntimeException.class).is("foo");
@@ -483,13 +483,13 @@ public class RestClient_Config_RestClient_Test {
        @Test
        public void a12_partSerializer_partParser() throws Exception {
                RestClient x = 
client(A12.class).header("Foo",bean).partSerializer(A12a.class).partParser(A12b.class).build();
-               ABean b = 
x.get("/").header("Foo",bean).run().assertStringHeader("Foo").is("x{f:1}").getResponseHeader("Foo").as(ABean.class).get();
+               ABean b = 
x.get("/").header("Foo",bean).run().assertHeader("Foo").is("x{f:1}").getResponseHeader("Foo").as(ABean.class).get();
                assertEquals("{f:1}",b.toString());
-               b = 
x.get().header("Foo",bean).run().assertStringHeader("Foo").is("x{f:1}").getResponseHeader("Foo").as(ABean.class).get();
+               b = 
x.get().header("Foo",bean).run().assertHeader("Foo").is("x{f:1}").getResponseHeader("Foo").as(ABean.class).get();
                assertEquals("{f:1}",b.toString());
 
                x = client(A12.class).header("Foo",bean).partSerializer(new 
A12a()).partParser(new A12b()).build();
-               b = 
x.get("/").header("Foo",bean).run().assertStringHeader("Foo").is("x{f:1}").getResponseHeader("Foo").as(ABean.class).get();
+               b = 
x.get("/").header("Foo",bean).run().assertHeader("Foo").is("x{f:1}").getResponseHeader("Foo").as(ABean.class).get();
                assertEquals("{f:1}",b.toString());
        }
 
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 578e12f..36686b4 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
@@ -172,11 +172,11 @@ public class RestClient_Response_Test {
 
        @Test
        public void c03_response_headerAssertions() throws Exception {
-               
checkFooClient(C.class).build().get().json().header("Foo","123").run().assertIntegerHeader("Foo").is(123);
-               
checkFooClient(C.class).build().get().json().header("Foo","123").run().assertLongHeader("Foo").is(123l);
-               
checkFooClient(C.class).build().get().json().header(BasicDateHeader.of("Foo",CALENDAR)).run().assertDateHeader("Foo").isEqual(((GregorianCalendar)CALENDAR).toZonedDateTime(),
 ChronoUnit.SECONDS);
+               
checkFooClient(C.class).build().get().json().header("Foo","123").run().assertHeader("Foo").asInteger().is(123);
+               
checkFooClient(C.class).build().get().json().header("Foo","123").run().assertHeader("Foo").asLong().is(123l);
+               
checkFooClient(C.class).build().get().json().header(BasicDateHeader.of("Foo",CALENDAR)).run().assertHeader("Foo").asZonedDateTime().isEqual(((GregorianCalendar)CALENDAR).toZonedDateTime(),
 ChronoUnit.SECONDS);
                
checkClient(C.class,"Content-Type").build().get().json().header("Content-Type","application/json;charset=iso-8859-1").run().assertCharset().is("iso-8859-1");
-               
checkClient(C.class,"Content-Type").build().get().json().header("Content-Type","application/json;charset=iso-8859-1").run().assertContentType().is("application/json;charset=iso-8859-1");
+               
checkClient(C.class,"Content-Type").build().get().json().header("Content-Type","application/json;charset=iso-8859-1").run().assertHeader("Content-Type").is("application/json;charset=iso-8859-1");
        }
 
        @Test
@@ -195,9 +195,9 @@ public class RestClient_Response_Test {
                assertEquals(3, r.getHeaders("Foo").length);
                assertEquals(0, r.getHeaders("Bar").length);
                r.getFirstHeader("Foo").assertString().is("bar");
-               assertNull(r.getFirstHeader("Bar"));
+               assertFalse(r.getFirstHeader("Bar").exists());
                r.getLastHeader("Foo").assertString().is("qux");
-               assertNull(r.getLastHeader("Bar"));
+               assertFalse(r.getLastHeader("Bar").exists());
 
                r.setHeaders(new Header[]{BasicHeader.of("Foo", "quux")});
                r.getFirstHeader("Foo").assertString().is("quux");
@@ -214,7 +214,7 @@ public class RestClient_Response_Test {
                assertEquals("quux", i.nextHeader().getValue());
 
                r.removeHeader(BasicHeader.of("Foo","quux"));
-               assertNull(r.getFirstHeader("Foo"));
+               assertFalse(r.getFirstHeader("Foo").exists());
 
                r.setHeader(BasicHeader.of("Foo","quuux"));
                r.getResponseHeader("Foo").assertString().is("quuux");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
index eb28fa0..855af7f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
@@ -198,9 +198,9 @@ public class RestClient_Test {
                };
 
                
client().addInterceptorFirst(x1).addInterceptorLast(x2).addInterceptorFirst(x3).addInterceptorLast(x4)
-                       .build().get("/echo").run().assertBody().contains("A1: 
1","A2: 2").assertStringHeader("B1").is("1").assertStringHeader("B2").is("2");
-               
client().interceptors(C01.class).build().get("/echo").run().assertBody().contains("A1:
 1").assertStringHeader("B1").is("1");
-               client().interceptors(new 
C01()).build().get("/echo").run().assertBody().contains("A1: 
1").assertStringHeader("B1").is("1");
+                       .build().get("/echo").run().assertBody().contains("A1: 
1","A2: 2").assertHeader("B1").is("1").assertHeader("B2").is("2");
+               
client().interceptors(C01.class).build().get("/echo").run().assertBody().contains("A1:
 1").assertHeader("B1").is("1");
+               client().interceptors(new 
C01()).build().get("/echo").run().assertBody().contains("A1: 
1").assertHeader("B1").is("1");
        }
 
        @Test
@@ -215,7 +215,7 @@ public class RestClient_Test {
                                response.setHeader("B1","1");
                        }
                };
-               
client().httpProcessor(x).build().get("/echo").run().assertBody().contains("A1: 
1").assertStringHeader("B1").is("1");
+               
client().httpProcessor(x).build().get("/echo").run().assertBody().contains("A1: 
1").assertHeader("B1").is("1");
        }
 
        @Test

Reply via email to