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 ee710a0  RestClient API improvements.
ee710a0 is described below

commit ee710a0d302b783b1b34d7febce24f17cf52149d
Author: JamesBognar <james.bog...@salesforce.com>
AuthorDate: Mon Jun 7 10:12:57 2021 -0400

    RestClient API improvements.
---
 .../33.RestLoggingAndDebugging.html                |   2 +-
 .../org/apache/juneau/rest/client/RestClient.java  |  63 ++--
 .../juneau/rest/client/RestClientBuilder.java      | 368 ++++++++++++---------
 .../apache/juneau/rest/mock/MockRestClient.java    |   2 +-
 .../juneau/rest/mock/MockRestClientBuilder.java    |  93 +++---
 .../juneau/rest/mock/MockServletRequest.java       |   4 +-
 .../java/org/apache/juneau/rest/RestRequest.java   |  12 +-
 .../java/org/apache/juneau/rest/RestResponse.java  |  14 +-
 .../juneau/rest/logging/BasicTestRestLogger.java   |  18 +-
 .../rest/client/RestClient_Headers_Test.java       |  23 +-
 10 files changed, 335 insertions(+), 264 deletions(-)

diff --git 
a/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html 
b/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html
index 0d02030..f626d79 100644
--- 
a/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html
+++ 
b/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html
@@ -273,7 +273,7 @@ Logging / Debugging
 <ul>
        <li><js>"true"</js> - Logging disabled.
        <li><js>"false"</js> (default) - Logging not disabled.
-       <li><js>"per-request"</js> - Logging is disabled only on requests 
containing a <c class='snippet'>X-NoTrace: true</c> header.
+       <li><js>"per-request"</js> - Logging is disabled only on requests 
containing a <c class='snippet'>No-Trace: true</c> header.
 </ul>
 <p>
        Disabled logging is particularly useful when running testcases that are 
expected to throw exceptions or cause
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index e5551fe..f4e5ff0 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -33,6 +33,7 @@ import java.net.*;
 import java.net.URI;
 import java.nio.charset.*;
 import java.text.*;
+import java.time.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
@@ -1289,37 +1290,37 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#header(Header) header(Header)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#headers(Object...) 
headers(Object...)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#headerPairs(Object...) 
headerPairs(Object...)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#accept(Object) accept(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#acceptCharset(Object) 
acceptCharset(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#acceptEncoding(Object) 
acceptEncoding(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#acceptLanguage(Object) 
acceptLanguage(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#authorization(Object) 
authorization(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#cacheControl(Object) 
cacheControl(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#clientVersion(Object) 
clientVersion(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#connection(Object) 
connection(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#contentLength(Object) 
contentLength(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#contentType(Object) 
contentType(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#date(Object) date(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#expect(Object) expect(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#forwarded(Object) 
forwarded(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#from(Object) from(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#host(Object) host(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifMatch(Object) ifMatch(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifModifiedSince(Object) 
ifModifiedSince(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifNoneMatch(Object) 
ifNoneMatch(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifRange(Object) ifRange(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifUnmodifiedSince(Object) 
ifUnmodifiedSince(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#maxForwards(Object) 
maxForwards(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#origin(Object) origin(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#pragma(Object) pragma(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#proxyAuthorization(Object) 
proxyAuthorization(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#range(Object) 
proxyAuthorization(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#referer(Object) referer(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#te(Object) te(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#userAgent(Object) 
userAgent(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#upgrade(Object) upgrade(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#via(Object) via(Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#warning(Object) warning(Object)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#accept(String) accept(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#acceptCharset(String) 
acceptCharset(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#acceptEncoding(String) 
acceptEncoding(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#acceptLanguage(String) 
acceptLanguage(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#authorization(String) 
authorization(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#cacheControl(String) 
cacheControl(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#clientVersion(String) 
clientVersion(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#connection(String) 
connection(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#contentLength(Long) 
contentLength(Long)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#contentType(String) 
contentType(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#date(ZonedDateTime) 
date(ZonedDateTime)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#expect(String) expect(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#forwarded(String) 
forwarded(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#from(String) from(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#host(String) host(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifMatch(String) ifMatch(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifModifiedSince(String) 
ifModifiedSince(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifNoneMatch(String) 
ifNoneMatch(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifRange(String) ifRange(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ifUnmodifiedSince(String) 
ifUnmodifiedSince(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#maxForwards(Integer) 
maxForwards(Integer)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#origin(String) origin(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#pragma(String) pragma(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#proxyAuthorization(String) 
proxyAuthorization(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#range(String) 
proxyAuthorization(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#referer(String) referer(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#te(String) te(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#userAgent(String) 
userAgent(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#upgrade(String) upgrade(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#via(String) via(String)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#warning(String) warning(String)}
         *                      </ul>
         *                      <li class='jc'>{@link 
org.apache.juneau.rest.client.RestRequest}
         *                      <ul>
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index 3e20ccf..a3cbfa0 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -28,6 +28,7 @@ import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.net.*;
 import java.net.URI;
+import java.time.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
@@ -55,6 +56,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.http.HttpHeaders;
 import org.apache.juneau.http.header.*;
+import org.apache.juneau.http.header.Date;
 import org.apache.juneau.http.part.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
@@ -155,10 +157,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"application/json"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"application/json"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#xml()} to provide support for multiple languages.
         *      <ul>
@@ -202,10 +204,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"application/json"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"application/json+simple"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#xml()} to provide support for multiple languages.
         *      <ul>
@@ -245,10 +247,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to <js>"text/xml"</js> 
unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/xml"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -291,10 +293,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"text/html"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/html"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -337,10 +339,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"text/html"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/html"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -383,10 +385,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"text/html+stripped"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/html+stripped"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -430,10 +432,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"text/plain"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/plain"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -476,10 +478,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"octal/msgpack"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"octal/msgpack"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -523,10 +525,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to <js>"text/uon"</js> 
unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/uon"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -568,10 +570,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"application/x-www-form-urlencoded"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"application/x-www-form-urlencoded"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -617,10 +619,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *      </ul>
         * <p>
         *      <c>Accept</c> request header will be set to 
<js>"text/openapi"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#accept(String)}, or per-request via {@link RestRequest#header(String,Object)} 
or {@link RestRequest#accept(Object)}.
         * <p>
         *      <c>Content-Type</c> request header will be set to 
<js>"text/openapi"</js> unless overridden
-        *              by {@link #header(String,Object)} or {@link 
#contentType(Object)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+        *              by {@link #header(String,Object)} or {@link 
#contentType(String)}, or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
         * <p>
         *      Can be combined with other marshaller setters such as {@link 
#json()} to provide support for multiple languages.
         *      <ul>
@@ -659,10 +661,10 @@ public class RestClientBuilder extends BeanContextBuilder 
{
         *                      bean context property setters (e.g. {@link 
#swaps(Object...)}), or generic property setters (e.g. {@link #set(String, 
Object)}) defined on this builder class.
         *      </ul>
         * <p>
-        *      <c>Accept</c> request header must be set by {@link 
#header(String,Object)} or {@link #accept(Object)}, or per-request
+        *      <c>Accept</c> request header must be set by {@link 
#header(String,Object)} or {@link #accept(String)}, or per-request
         *              via {@link RestRequest#header(String,Object)} or {@link 
RestRequest#accept(Object)} in order for the correct parser to be selected.
         * <p>
-        *      <c>Content-Type</c> request header must be set by {@link 
#header(String,Object)} or {@link #contentType(Object)},
+        *      <c>Content-Type</c> request header must be set by {@link 
#header(String,Object)} or {@link #contentType(String)},
         *              or per-request via {@link 
RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)} 
in order for the correct serializer to be selected.
         * <p>
         *      Similar to calling 
<c>json().simpleJson().html().xml().uon().urlEnc().openApi().msgPack().plainText()</c>.
@@ -1340,315 +1342,395 @@ public class RestClientBuilder extends 
BeanContextBuilder {
                return this;
        }
 
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Standard headers.
+       
//-----------------------------------------------------------------------------------------------------------------
+
        /**
-        * Sets the value for the <c>Accept</c> request header on all requests.
+        * Appends the <c>Accept</c> and <c>Content-Type</c> headers on all 
requests made by this client.
         *
         * <p>
-        * This overrides the media type specified on the parser, but is 
overridden by calling
-        * <code>header(<js>"Accept"</js>, value);</code>
+        * Headers are appended to the end of the current header list.
         *
-        * @param value The new header value.
+        * @param value The new header values.
+        * @return This object (for method chaining).
+        */
+       @FluentSetter
+       public RestClientBuilder mediaType(String value) {
+               super.mediaType(MediaType.of(value));
+               return headers(Accept.of(value), ContentType.of(value));
+       }
+
+       /**
+        * Appends an <c>Accept</c> header on this request.
+        *
+        * <p>
+        * Header is appended to the end of the current header list.
+        *
+        * <p>
+        * This is equivalent to calling <code>header(<js>"Accept"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Accept.<jsm>of</jsm>(<jv>value</jv>));</code>
+        *
+        * @param value
+        *      The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder accept(Object value) {
-               return header("Accept", value);
+       public RestClientBuilder accept(String value) {
+               return header(Accept.of(value));
        }
 
        /**
         * Sets the value for the <c>Accept-Charset</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Accept-Charset"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"Accept-Charset"</js>, <jv>value</jv>);</code>
+        * or <code>header(AcceptCharset.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder acceptCharset(Object value) {
-               return header("Accept-Charset", value);
+       public RestClientBuilder acceptCharset(String value) {
+               return header(AcceptCharset.of(value));
        }
 
        /**
         * Sets the value for the <c>Accept-Encoding</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Accept-Encoding"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"Accept-Encoding"</js>, <jv>value</jv>);</code>
+        * or <code>header(AcceptEncoding.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder acceptEncoding(Object value) {
-               return header("Accept-Encoding", value);
+       public RestClientBuilder acceptEncoding(String value) {
+               return header(AcceptEncoding.of(value));
        }
 
        /**
         * Sets the value for the <c>Accept-Language</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Accept-Language"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"Accept-Language"</js>, <jv>value</jv>);</code>
+        * or <code>header(AcceptLanguage.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder acceptLanguage(Object value) {
-               return header("Accept-Language", value);
+       public RestClientBuilder acceptLanguage(String value) {
+               return header(AcceptLanguage.of(value));
        }
 
        /**
         * Sets the value for the <c>Authorization</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Authorization"</js>, value);</code>
+        * This is equivalent to calling <code>header(<js>"Authorization"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Authorization.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder authorization(Object value) {
-               return header("Authorization", value);
+       public RestClientBuilder authorization(String value) {
+               return header(Authorization.of(value));
        }
 
        /**
         * Sets the value for the <c>Cache-Control</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Cache-Control"</js>, value);</code>
+        * This is equivalent to calling <code>header(<js>"Cache-Control"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(CacheControl.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder cacheControl(Object value) {
-               return header("Cache-Control", value);
+       public RestClientBuilder cacheControl(String value) {
+               return header(CacheControl.of(value));
        }
 
        /**
-        * Sets the client version by setting the value for the 
<js>"X-Client-Version"</js> header.
+        * Sets the client version by setting the value for the 
<js>"Client-Version"</js> header.
+        *
+        * <p>
+        * This is equivalent to calling 
<code>header(<js>"Client-Version"</js>, <jv>value</jv>);</code>
+        * or <code>header(ClientVersion.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The version string (e.g. <js>"1.2.3"</js>)
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder clientVersion(Object value) {
-               return header("X-Client-Version", value);
+       public RestClientBuilder clientVersion(String value) {
+               return header(ClientVersion.of(value));
        }
 
        /**
         * Sets the value for the <c>Connection</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Connection"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Connection"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Connection.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder connection(Object value) {
-               return header("Connection", value);
+       public RestClientBuilder connection(String value) {
+               return header(Connection.of(value));
        }
 
        /**
         * Sets the value for the <c>Content-Length</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Content-Length"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"Content-Length"</js>, <jv>value</jv>);</code>
+        * or <code>header(ContentLength.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder contentLength(Object value) {
-               return header("Content-Length", value);
+       public RestClientBuilder contentLength(Long value) {
+               return header(ContentLength.of(value));
        }
 
        /**
         * Sets the value for the <c>Content-Type</c> request header on all 
requests.
         *
         * <p>
-        * This overrides the media type specified on the serializer, but is 
overridden by calling
-        * <code>header(<js>"Content-Type"</js>, value);</code>
+        * This is equivalent to calling <code>header(<js>"Content-Type"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(ContentType.<jsm>of</jsm>(<jv>value</jv>));</code>
+        *
+        * <p>
+        * This overrides the media type specified on the serializer.
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder contentType(Object value) {
-               return header("Content-Type", value);
+       public RestClientBuilder contentType(String value) {
+               return header(ContentType.of(value));
        }
 
        /**
         * Sets the value for the <c>Content-Encoding</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Content-Encoding"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"Content-Encoding"</js>, <jv>value</jv>);</code>
+        * or 
<code>header(ContentEncoding.<jsm>of</jsm>(<jv>value</jv>));</code>
+        *
+        * @param value The new header value.
+        * @return This object (for method chaining).
+        */
+       @FluentSetter
+       public RestClientBuilder contentEncoding(String value) {
+               return header(ContentEncoding.of(value));
+       }
+
+       /**
+        * Sets the value for the <c>Date</c> request header on all requests.
+        *
+        * <p>
+        * This is equivalent to calling <code>header(<js>"Date"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Date.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder contentEncoding(Object value) {
-               return header("Content-Encoding", value);
+       public RestClientBuilder date(ZonedDateTime value) {
+               return header(Date.of(value));
        }
 
        /**
         * Sets the value for the <c>Date</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Date"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Date"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Date.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder date(Object value) {
-               return header("Date", value);
+       public RestClientBuilder date(Date value) {
+               return header(value);
+       }
+
+       /**
+        * Sets the value for the <c>Debug</c> request header on all requests.
+        *
+        * <p>
+        * This is equivalent to calling <code>header(<js>"Debug"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Debug.<jsm>of</jsm>(<jv>value</jv>));</code>
+        *
+        * @return This object (for method chaining).
+        */
+       @Override
+       @FluentSetter
+       public RestClientBuilder debug() {
+               super.debug();
+               return header(Debug.TRUE);
        }
 
        /**
         * Sets the value for the <c>Expect</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Expect"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Expect"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Expect.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder expect(Object value) {
-               return header("Expect", value);
+       public RestClientBuilder expect(String value) {
+               return header(Expect.of(value));
        }
 
        /**
         * Sets the value for the <c>Forwarded</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Forwarded"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Forwarded"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Forwarded.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder forwarded(Object value) {
-               return header("Forwarded", value);
+       public RestClientBuilder forwarded(String value) {
+               return header(Forwarded.of(value));
        }
 
        /**
         * Sets the value for the <c>From</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"From"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"From"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(From.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder from(Object value) {
-               return header("From", value);
+       public RestClientBuilder from(String value) {
+               return header(From.of(value));
        }
 
        /**
         * Sets the value for the <c>Host</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Host"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Host"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Host.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder host(Object value) {
-               return header("Host", value);
+       public RestClientBuilder host(String value) {
+               return header(Host.of(value));
        }
 
        /**
         * Sets the value for the <c>If-Match</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"If-Match"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"If-Match"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(IfMatch.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder ifMatch(Object value) {
-               return header("If-Match", value);
+       public RestClientBuilder ifMatch(String value) {
+               return header(IfMatch.of(value));
        }
 
        /**
         * Sets the value for the <c>If-Modified-Since</c> request header on 
all requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"If-Modified-Since"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"If-Modified-Since"</js>, <jv>value</jv>);</code>
+        * or 
<code>header(IfModifiedSince.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder ifModifiedSince(Object value) {
-               return header("If-Modified-Since", value);
+       public RestClientBuilder ifModifiedSince(String value) {
+               return header(IfModifiedSince.of(value));
        }
 
        /**
         * Sets the value for the <c>If-None-Match</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"If-None-Match"</js>, value);</code>
+        * This is equivalent to calling <code>header(<js>"If-None-Match"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(IfNoneMatch.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder ifNoneMatch(Object value) {
-               return header("If-None-Match", value);
+       public RestClientBuilder ifNoneMatch(String value) {
+               return header(IfNoneMatch.of(value));
        }
 
        /**
         * Sets the value for the <c>If-Range</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"If-Range"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"If-Range"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(IfRange.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder ifRange(Object value) {
-               return header("If-Range", value);
+       public RestClientBuilder ifRange(String value) {
+               return header(IfRange.of(value));
        }
 
        /**
         * Sets the value for the <c>If-Unmodified-Since</c> request header on 
all requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"If-Unmodified-Since"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"If-Unmodified-Since"</js>, <jv>value</jv>);</code>
+        * or 
<code>header(IfUnmodifiedSince.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder ifUnmodifiedSince(Object value) {
-               return header("If-Unmodified-Since", value);
+       public RestClientBuilder ifUnmodifiedSince(String value) {
+               return header(IfUnmodifiedSince.of(value));
        }
 
        /**
         * Sets the value for the <c>Max-Forwards</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Max-Forwards"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"MaxForwards"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(MaxForwards.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder maxForwards(Object value) {
-               return header("Max-Forwards", value);
+       public RestClientBuilder maxForwards(Integer value) {
+               return header(MaxForwards.of(value));
        }
 
        /**
-        * When called, <c>X-No-Log: true</c> is added to requests.
+        * When called, <c>No-Trace: true</c> is added to requests.
         *
         * <p>
         * This gives the opportunity for the servlet to not log errors on 
invalid requests.
@@ -1664,147 +1746,157 @@ public class RestClientBuilder extends 
BeanContextBuilder {
         */
        @FluentSetter
        public RestClientBuilder noTrace() {
-               return header("X-No-Log", true);
+               return header(NoTrace.of(true));
        }
 
        /**
         * Sets the value for the <c>Origin</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Origin"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Origin"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Origin.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder origin(Object value) {
-               return header("Origin", value);
+       public RestClientBuilder origin(String value) {
+               return header(Origin.of(value));
        }
 
        /**
         * Sets the value for the <c>Pragma</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Pragma"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Pragma"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Pragma.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder pragma(Object value) {
-               return header("Pragma", value);
+       public RestClientBuilder pragma(String value) {
+               return header(Pragma.of(value));
        }
 
        /**
         * Sets the value for the <c>Proxy-Authorization</c> request header on 
all requests.
         *
         * <p>
-        * This is a shortcut for calling 
<code>header(<js>"Proxy-Authorization"</js>, value);</code>
+        * This is equivalent to calling 
<code>header(<js>"ProxyAuthorization"</js>, <jv>value</jv>);</code>
+        * or 
<code>header(ProxyAuthorization.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder proxyAuthorization(Object value) {
-               return header("Proxy-Authorization", value);
+       public RestClientBuilder proxyAuthorization(String value) {
+               return header(ProxyAuthorization.of(value));
        }
 
        /**
         * Sets the value for the <c>Range</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Range"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Range"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Range.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder range(Object value) {
-               return header("Range", value);
+       public RestClientBuilder range(String value) {
+               return header(Range.of(value));
        }
 
        /**
         * Sets the value for the <c>Referer</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Referer"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Referer"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Referer.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder referer(Object value) {
-               return header("Referer", value);
+       public RestClientBuilder referer(String value) {
+               return header(Referer.of(value));
        }
 
        /**
         * Sets the value for the <c>TE</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"TE"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"TE"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(TE.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder te(Object value) {
-               return header("TE", value);
+       public RestClientBuilder te(String value) {
+               return header(TE.of(value));
        }
 
        /**
         * Sets the value for the <c>User-Agent</c> request header on all 
requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"User-Agent"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"User-Agent"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(UserAgent.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder userAgent(Object value) {
-               return header("User-Agent", value);
+       public RestClientBuilder userAgent(String value) {
+               return header(UserAgent.of(value));
        }
 
        /**
         * Sets the value for the <c>Upgrade</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Upgrade"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Upgrade"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Upgrade.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder upgrade(Object value) {
-               return header("Upgrade", value);
+       public RestClientBuilder upgrade(String value) {
+               return header(Upgrade.of(value));
        }
 
        /**
         * Sets the value for the <c>Via</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Via"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Via"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Via.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder via(Object value) {
-               return header("Via", value);
+       public RestClientBuilder via(String value) {
+               return header(Via.of(value));
        }
 
        /**
         * Sets the value for the <c>Warning</c> request header on all requests.
         *
         * <p>
-        * This is a shortcut for calling <code>header(<js>"Warning"</js>, 
value);</code>
+        * This is equivalent to calling <code>header(<js>"Warning"</js>, 
<jv>value</jv>);</code>
+        * or <code>header(Warning.<jsm>of</jsm>(<jv>value</jv>));</code>
         *
         * @param value The new header value.
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder warning(Object value) {
-               return header("Warning", value);
+       public RestClientBuilder warning(String value) {
+               return header(Warning.of(value));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -4695,12 +4787,6 @@ public class RestClientBuilder extends 
BeanContextBuilder {
        }
 
        @Override /* GENERATED - ContextBuilder */
-       public RestClientBuilder debug() {
-               super.debug();
-               return this;
-       }
-
-       @Override /* GENERATED - ContextBuilder */
        public RestClientBuilder locale(Locale value) {
                super.locale(value);
                return this;
@@ -5409,24 +5495,6 @@ public class RestClientBuilder extends 
BeanContextBuilder {
        }
 
        /**
-        * Assigns <c>User-Agent</c> value.
-        *
-        * <ul class='notes'>
-        *      <li>This value can be overridden by the {@link 
#httpProcessor(HttpProcessor)} method.
-        *      <li>{@link #userAgent(Object)} is an equivalent method.
-        * </ul>
-        *
-        * @param userAgent New property value.
-        * @return This object (for method chaining).
-        * @see HttpClientBuilder#setUserAgent(String)
-        */
-       @FluentSetter
-       public RestClientBuilder userAgent(String userAgent) {
-               httpClientBuilder.setUserAgent(userAgent);
-               return this;
-       }
-
-       /**
         * Assigns default request header values.
         *
         * <ul class='notes'>
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index c14c67c..f178b70 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -359,7 +359,7 @@ public class MockRestClient extends RestClient implements 
HttpClientConnection {
         * <p>
         * Equivalent to calling:
         * <p class='bcode w800'>
-        *      
MockRestClient.<jsm>create</jsm>(<jv>impl</jv>).ignoreErrors().noLog().build();
+        *      
MockRestClient.<jsm>create</jsm>(<jv>impl</jv>).ignoreErrors().noTrace().build();
         * </p>
         *
         * @param impl
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
index 895acec..34a00dc 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
@@ -23,6 +23,7 @@ import static org.apache.juneau.rest.util.RestUtils.*;
 import java.io.*;
 import java.lang.annotation.*;
 import java.lang.reflect.Method;
+import java.time.*;
 
 import org.apache.http.*;
 import org.apache.http.client.*;
@@ -277,12 +278,6 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - ContextBuilder */
-       public MockRestClientBuilder mediaType(MediaType value) {
-               super.mediaType(value);
-               return this;
-       }
-
-       @Override /* GENERATED - ContextBuilder */
        public MockRestClientBuilder prependTo(String name, Object value) {
                super.prependTo(name, value);
                return this;
@@ -637,25 +632,25 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder accept(Object value) {
+       public MockRestClientBuilder accept(String value) {
                super.accept(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder acceptCharset(Object value) {
+       public MockRestClientBuilder acceptCharset(String value) {
                super.acceptCharset(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder acceptEncoding(Object value) {
+       public MockRestClientBuilder acceptEncoding(String value) {
                super.acceptEncoding(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder acceptLanguage(Object value) {
+       public MockRestClientBuilder acceptLanguage(String value) {
                super.acceptLanguage(value);
                return this;
        }
@@ -697,7 +692,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder authorization(Object value) {
+       public MockRestClientBuilder authorization(String value) {
                super.authorization(value);
                return this;
        }
@@ -715,7 +710,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder cacheControl(Object value) {
+       public MockRestClientBuilder cacheControl(String value) {
                super.cacheControl(value);
                return this;
        }
@@ -733,13 +728,13 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder clientVersion(Object value) {
+       public MockRestClientBuilder clientVersion(String value) {
                super.clientVersion(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder connection(Object value) {
+       public MockRestClientBuilder connection(String value) {
                super.connection(value);
                return this;
        }
@@ -793,25 +788,25 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder contentEncoding(Object value) {
+       public MockRestClientBuilder contentEncoding(String value) {
                super.contentEncoding(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder contentLength(Object value) {
+       public MockRestClientBuilder contentLength(Long value) {
                super.contentLength(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder contentType(Object value) {
+       public MockRestClientBuilder contentType(String value) {
                super.contentType(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder date(Object value) {
+       public MockRestClientBuilder date(ZonedDateTime value) {
                super.date(value);
                return this;
        }
@@ -937,7 +932,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder expect(Object value) {
+       public MockRestClientBuilder expect(String value) {
                super.expect(value);
                return this;
        }
@@ -997,20 +992,20 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder forwarded(Object value) {
+       public MockRestClientBuilder forwarded(String value) {
                super.forwarded(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder from(Object value) {
+       public MockRestClientBuilder from(String value) {
                super.from(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder header(Header header) {
-               super.header(header);
+       public MockRestClientBuilder header(Header value) {
+               super.header(value);
                return this;
        }
 
@@ -1063,7 +1058,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder host(Object value) {
+       public MockRestClientBuilder host(String value) {
                super.host(value);
                return this;
        }
@@ -1105,31 +1100,31 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder ifMatch(Object value) {
+       public MockRestClientBuilder ifMatch(String value) {
                super.ifMatch(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder ifModifiedSince(Object value) {
+       public MockRestClientBuilder ifModifiedSince(String value) {
                super.ifModifiedSince(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder ifNoneMatch(Object value) {
+       public MockRestClientBuilder ifNoneMatch(String value) {
                super.ifNoneMatch(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder ifRange(Object value) {
+       public MockRestClientBuilder ifRange(String value) {
                super.ifRange(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder ifUnmodifiedSince(Object value) {
+       public MockRestClientBuilder ifUnmodifiedSince(String value) {
                super.ifUnmodifiedSince(value);
                return this;
        }
@@ -1249,7 +1244,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder maxForwards(Object value) {
+       public MockRestClientBuilder maxForwards(Integer value) {
                super.maxForwards(value);
                return this;
        }
@@ -1261,6 +1256,18 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
+       public MockRestClientBuilder mediaType(String value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* GENERATED - RestClientBuilder */
+       public MockRestClientBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* GENERATED - RestClientBuilder */
        public MockRestClientBuilder msgPack() {
                super.msgPack();
                return this;
@@ -1291,7 +1298,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder origin(Object value) {
+       public MockRestClientBuilder origin(String value) {
                super.origin(value);
                return this;
        }
@@ -1370,7 +1377,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder pragma(Object value) {
+       public MockRestClientBuilder pragma(String value) {
                super.pragma(value);
                return this;
        }
@@ -1388,7 +1395,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder proxyAuthorization(Object value) {
+       public MockRestClientBuilder proxyAuthorization(String value) {
                super.proxyAuthorization(value);
                return this;
        }
@@ -1460,7 +1467,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder range(Object value) {
+       public MockRestClientBuilder range(String value) {
                super.range(value);
                return this;
        }
@@ -1472,7 +1479,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder referer(Object value) {
+       public MockRestClientBuilder referer(String value) {
                super.referer(value);
                return this;
        }
@@ -1593,7 +1600,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder te(Object value) {
+       public MockRestClientBuilder te(String value) {
                super.te(value);
                return this;
        }
@@ -1629,7 +1636,7 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder upgrade(Object value) {
+       public MockRestClientBuilder upgrade(String value) {
                super.upgrade(value);
                return this;
        }
@@ -1671,31 +1678,25 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder userAgent(Object value) {
+       public MockRestClientBuilder userAgent(String value) {
                super.userAgent(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder userAgent(String userAgent) {
-               super.userAgent(userAgent);
-               return this;
-       }
-
-       @Override /* GENERATED - RestClientBuilder */
        public MockRestClientBuilder userTokenHandler(UserTokenHandler 
userTokenHandler) {
                super.userTokenHandler(userTokenHandler);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder via(Object value) {
+       public MockRestClientBuilder via(String value) {
                super.via(value);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder warning(Object value) {
+       public MockRestClientBuilder warning(String value) {
                super.warning(value);
                return this;
        }
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
index f8e9793..4d0ca3a 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
@@ -958,7 +958,7 @@ public class MockServletRequest implements 
HttpServletRequest {
         */
        protected MockServletRequest debug(boolean value) {
                if (value)
-                       header("X-Debug", true);
+                       header("Debug", true);
                return this;
        }
 
@@ -973,7 +973,7 @@ public class MockServletRequest implements 
HttpServletRequest {
         */
        public MockServletRequest noTrace(boolean value) {
                if (value)
-                       header("X-NoTrace", true);
+                       header("No-Trace", true);
                return this;
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index 7df7af3..b842a27 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -1698,7 +1698,7 @@ public final class RestRequest {
        }
 
        /**
-        * Sets the <js>"NoLog"</js> attribute to the specified boolean.
+        * Sets the <js>"NoTrace"</js> attribute to the specified boolean.
         *
         * <p>
         * This flag is used by {@link BasicRestLogger} and tells it not to log 
the current request.
@@ -1706,18 +1706,18 @@ public final class RestRequest {
         * @param b The attribute value.
         * @return This object (for method chaining).
         */
-       public RestRequest setNoLog(Boolean b) {
-               setAttribute("NoLog", b);
+       public RestRequest setNoTrace(Boolean b) {
+               setAttribute("NoTrace", b);
                return this;
        }
 
        /**
-        * Shortcut for calling <c>setNoLog(<jk>true</jk>)</c>.
+        * Shortcut for calling <c>setNoTrace(<jk>true</jk>)</c>.
         *
         * @return This object (for method chaining).
         */
-       public RestRequest setNoLog() {
-               return setNoLog(true);
+       public RestRequest setNoTrace() {
+               return setNoTrace(true);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index 4f4bee4..191f4a6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -118,7 +118,7 @@ public final class RestResponse {
                }
 
                
request.getContext().getDefaultResponseHeaders().forEach(x->addHeader(x.getValue(),
 resolveUris(x.getValue())));  // Done this way to avoid list/array copy.
-               
+
                
opContext.getDefaultResponseHeaders().forEach(x->addHeader(x.getName(), 
resolveUris(x.getValue())));
 
                if (charset == null)
@@ -646,7 +646,7 @@ public final class RestResponse {
        }
 
        /**
-        * Sets the <js>"NoLog"</js> attribute to the specified boolean.
+        * Sets the <js>"NoTrace"</js> attribute to the specified boolean.
         *
         * <p>
         * This flag is used by {@link BasicRestLogger} and tells it not to log 
the current request.
@@ -654,18 +654,18 @@ public final class RestResponse {
         * @param b The attribute value.
         * @return This object (for method chaining).
         */
-       public RestResponse setNoLog(Boolean b) {
-               request.setNoLog(b);
+       public RestResponse setNoTrace(Boolean b) {
+               request.setNoTrace(b);
                return this;
        }
 
        /**
-        * Shortcut for calling <c>setNoLog(<jk>true</jk>)</c>.
+        * Shortcut for calling <c>setNoTrace(<jk>true</jk>)</c>.
         *
         * @return This object (for method chaining).
         */
-       public RestResponse setNoLog() {
-               return setNoLog(true);
+       public RestResponse setNoTrace() {
+               return setNoTrace(true);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java
index 31f4d27..e4836d2 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java
@@ -31,9 +31,9 @@ import org.apache.juneau.rest.*;
  * <p>
  * Requests can be tagged as no-log (meaning don't log if there's an error) in 
any of the following ways:
  * <ul>
- *     <li>A <js>"X-No-Log: true"</js> header.
- *     <li>A <js>"noLog=true"</js> query parameter.
- *     <li>A <js>"NoLog"</js> request attribute with a string value of 
<js>"true"</js>.
+ *     <li>A <js>"No-Trace: true"</js> header.
+ *     <li>A <js>"noTrace=true"</js> query parameter.
+ *     <li>A <js>"NoTrace"</js> request attribute with a string value of 
<js>"true"</js>.
  * </ul>
  *
  * <h5 class='section'>Configured Settings:</h5>
@@ -67,7 +67,7 @@ public class BasicTestRestLogger extends BasicRestLogger {
                                        .requestDetail(HEADER)
                                        .responseDetail(HEADER)
                                        .enabled(CONDITIONAL)
-                                       .enabledTest(x -> ! isNoLog(x))  // 
Only log if it's not a no-trace request.
+                                       .enabledTest(x -> ! isNoTrace(x))  // 
Only log if it's not a no-trace request.
                                        .logStackTrace()
                                        .build(),
                                RestLoggerRule.create()  // Log 400-500 errors 
with just status-line information.
@@ -76,7 +76,7 @@ public class BasicTestRestLogger extends BasicRestLogger {
                                        .requestDetail(STATUS_LINE)
                                        .responseDetail(STATUS_LINE)
                                        .enabled(CONDITIONAL)
-                                       .enabledTest(x -> ! isNoLog(x))  // 
Only log if it's not a no-trace request.
+                                       .enabledTest(x -> ! isNoTrace(x))  // 
Only log if it's not a no-trace request.
                                        .logStackTrace()
                                        .build()
                        )
@@ -91,13 +91,13 @@ public class BasicTestRestLogger extends BasicRestLogger {
                ;
        }
 
-       private static boolean isNoLog(HttpServletRequest req) {
-               Object o = req.getAttribute("NoLog");
+       private static boolean isNoTrace(HttpServletRequest req) {
+               Object o = req.getAttribute("NoTrace");
                if (o != null)
                        return "true".equalsIgnoreCase(o.toString());
-               String s = req.getHeader("X-No-Log");
+               String s = req.getHeader("No-Trace");
                if (s != null)
                        return "true".equalsIgnoreCase(s);
-               return emptyIfNull(req.getQueryString()).contains("noLog=true");
+               return 
emptyIfNull(req.getQueryString()).contains("noTrace=true");
        }
 }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
index fabe096..742df2c 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
@@ -27,6 +27,7 @@ import java.util.*;
 import org.apache.http.Header;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.header.*;
+import org.apache.juneau.http.header.Date;
 import org.apache.juneau.http.part.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.marshall.*;
@@ -217,30 +218,30 @@ public class RestClient_Headers_Test {
                
checkClient("Accept-Language").acceptLanguage("en").build().get("/headers").run().assertBody().is("['en']");
                
checkClient("Authorization").authorization("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Cache-Control").cacheControl("none").build().get("/headers").run().assertBody().is("['none']");
-               
checkClient("X-Client-Version").clientVersion("1").build().get("/headers").run().assertBody().is("['1']");
+               
checkClient("Client-Version").clientVersion("1").build().get("/headers").run().assertBody().is("['1']");
                
checkClient("Connection").connection("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("Content-Length").contentLength("123").build().get("/headers").run().assertBody().is("['123']");
+               
checkClient("Content-Length").contentLength(123l).build().get("/headers").run().assertBody().is("['123']");
                
checkClient("Content-Type").contentType("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Content-Encoding").contentEncoding("identity").build().get("/headers").run().assertBody().is("['identity']");
-               
checkClient("Date").date("123").build().get("/headers").run().assertBody().is("['123']");
+               checkClient("Date").date(Date.of("Sat, 29 Oct 1994 19:43:31 
GMT")).build().get("/headers").run().assertBody().is("['Sat, 29 Oct 1994 
19:43:31 GMT']");
                
checkClient("Expect").expect("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Forwarded").forwarded("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("From").from("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Host").host("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("If-Match").ifMatch("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("If-Modified-Since").ifModifiedSince("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("If-None-Match").ifNoneMatch("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("If-Range").ifRange("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("If-Unmodified-Since").ifUnmodifiedSince("foo").build().get("/headers").run().assertBody().is("['foo']");
-               
checkClient("Max-Forwards").maxForwards("10").build().get("/headers").run().assertBody().is("['10']");
-               
checkClient("X-No-Log").noTrace().build().get("/headers").run().assertBody().is("['true']");
+               
checkClient("If-Match").ifMatch("\"foo\"").build().get("/headers").run().assertBody().is("['\"foo\"']");
+               checkClient("If-Modified-Since").ifModifiedSince("Sat, 29 Oct 
1994 19:43:31 GMT").build().get("/headers").run().assertBody().is("['Sat, 29 
Oct 1994 19:43:31 GMT']");
+               
checkClient("If-None-Match").ifNoneMatch("\"foo\"").build().get("/headers").run().assertBody().is("['\"foo\"']");
+               
checkClient("If-Range").ifRange("\"foo\"").build().get("/headers").run().assertBody().is("['\"foo\"']");
+               checkClient("If-Unmodified-Since").ifUnmodifiedSince("Sat, 29 
Oct 1994 19:43:31 GMT").build().get("/headers").run().assertBody().is("['Sat, 
29 Oct 1994 19:43:31 GMT']");
+               
checkClient("Max-Forwards").maxForwards(10).build().get("/headers").run().assertBody().is("['10']");
+               
checkClient("No-Trace").noTrace().build().get("/headers").run().assertBody().is("['true']");
                
checkClient("Origin").origin("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Pragma").pragma("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Proxy-Authorization").proxyAuthorization("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Range").range("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Referer").referer("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("TE").te("foo").build().get("/headers").run().assertBody().is("['foo']");
-               checkClient("User-Agent").userAgent(new 
StringBuilder("foo")).build().get("/headers").run().assertBody().is("['foo']");
+               
checkClient("User-Agent").userAgent("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Upgrade").upgrade("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Via").via("foo").build().get("/headers").run().assertBody().is("['foo']");
                
checkClient("Warning").warning("foo").build().get("/headers").run().assertBody().is("['foo']");

Reply via email to