You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2020/03/22 22:40:11 UTC

[juneau] branch master updated: addHeader() method on HTTP beans.

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 6af56c8  addHeader() method on HTTP beans.
6af56c8 is described below

commit 6af56c8c7b1911441388f641bb6ee997c870eb44
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sun Mar 22 18:39:56 2020 -0400

    addHeader() method on HTTP beans.
---
 .../apache/juneau/http/exception/BadRequest.java   |   14 +
 .../org/apache/juneau/http/exception/Conflict.java |   14 +
 .../juneau/http/exception/ExpectationFailed.java   |   14 +
 .../juneau/http/exception/FailedDependency.java    |   14 +
 .../apache/juneau/http/exception/Forbidden.java    |   14 +
 .../org/apache/juneau/http/exception/Gone.java     |   14 +
 .../juneau/http/exception/HttpException.java       |   31 +
 .../http/exception/HttpVersionNotSupported.java    |   14 +
 .../juneau/http/exception/InsufficientStorage.java |   14 +
 .../juneau/http/exception/InternalServerError.java |   14 +
 .../juneau/http/exception/LengthRequired.java      |   14 +
 .../org/apache/juneau/http/exception/Locked.java   |   14 +
 .../apache/juneau/http/exception/LoopDetected.java |   14 +
 .../juneau/http/exception/MethodNotAllowed.java    |   14 +
 .../juneau/http/exception/MisdirectedRequest.java  |   14 +
 .../exception/NetworkAuthenticationRequired.java   |   14 +
 .../juneau/http/exception/NotAcceptable.java       |   14 +
 .../apache/juneau/http/exception/NotExtended.java  |   14 +
 .../org/apache/juneau/http/exception/NotFound.java |   14 +
 .../juneau/http/exception/NotImplemented.java      |   14 +
 .../juneau/http/exception/PayloadTooLarge.java     |   14 +
 .../juneau/http/exception/PreconditionFailed.java  |   14 +
 .../http/exception/PreconditionRequired.java       |   14 +
 .../juneau/http/exception/RangeNotSatisfiable.java |   14 +
 .../exception/RequestHeaderFieldsTooLarge.java     |   14 +
 .../juneau/http/exception/ServiceUnavailable.java  |   14 +
 .../juneau/http/exception/TooManyRequests.java     |   14 +
 .../apache/juneau/http/exception/Unauthorized.java |   14 +
 .../http/exception/UnavailableForLegalReasons.java |   14 +
 .../juneau/http/exception/UnprocessableEntity.java |   14 +
 .../http/exception/UnsupportedMediaType.java       |   14 +
 .../juneau/http/exception/UpgradeRequired.java     |   14 +
 .../apache/juneau/http/exception/UriTooLong.java   |   14 +
 .../http/exception/VariantAlsoNegotiates.java      |   14 +
 .../org/apache/juneau/http/response/Accepted.java  |   14 +
 .../juneau/http/response/AlreadyReported.java      |   14 +
 .../org/apache/juneau/http/response/Continue.java  |   14 +
 .../org/apache/juneau/http/response/Created.java   |   14 +
 .../apache/juneau/http/response/EarlyHints.java    |   14 +
 .../org/apache/juneau/http/response/Found.java     |   14 +
 .../apache/juneau/http/response/HttpResponse.java  |   30 +
 .../org/apache/juneau/http/response/IMUsed.java    |   14 +
 .../juneau/http/response/MovedPermanently.java     |   14 +
 .../apache/juneau/http/response/MultiStatus.java   |   14 +
 .../juneau/http/response/MultipleChoices.java      |   14 +
 .../org/apache/juneau/http/response/NoContent.java |   14 +
 .../http/response/NonAuthoritiveInformation.java   |   14 +
 .../apache/juneau/http/response/NotModified.java   |   14 +
 .../java/org/apache/juneau/http/response/Ok.java   |   14 +
 .../juneau/http/response/PartialContent.java       |   14 +
 .../juneau/http/response/PermanentRedirect.java    |   14 +
 .../apache/juneau/http/response/Processing.java    |   14 +
 .../apache/juneau/http/response/ResetContent.java  |   14 +
 .../org/apache/juneau/http/response/SeeOther.java  |   14 +
 .../juneau/http/response/SwitchingProtocols.java   |   14 +
 .../juneau/http/response/TemporaryRedirect.java    |   14 +
 .../org/apache/juneau/http/response/UseProxy.java  |   14 +
 juneau-doc/docs/ReleaseNotes/8.1.4.html            |   12 +
 .../juneau/rest/test/client/RestClientTest.java    |    4 +-
 .../main/ConfigurablePropertyCodeGenerator.java    |   63 +-
 .../juneau/rest/client2/RestClientBuilderTest.java | 3538 ++++++++++++++++++++
 .../org/apache/juneau/rest/client2/RestClient.java |   18 +-
 .../juneau/rest/client2/RestClientBuilder.java     |   11 +-
 .../juneau/rest/client2/RestResponseBody.java      |   18 +-
 .../juneau/rest/client2/RestResponseHeader.java    |   10 +-
 .../org/apache/juneau/rest/mock2/MockLogger.java   |   96 +
 .../org/apache/juneau/rest/SwaggerGenerator.java   |   28 +-
 67 files changed, 4586 insertions(+), 43 deletions(-)

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/BadRequest.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/BadRequest.java
index 96ddfca..9b83e5a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/BadRequest.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/BadRequest.java
@@ -80,4 +80,18 @@ public class BadRequest extends HttpException {
 	public BadRequest(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public BadRequest header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Conflict.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Conflict.java
index ce2fab8..4b96dca 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Conflict.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Conflict.java
@@ -80,4 +80,18 @@ public class Conflict extends HttpException {
 	public Conflict(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public Conflict header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ExpectationFailed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ExpectationFailed.java
index c98e66b..aa3660c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ExpectationFailed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ExpectationFailed.java
@@ -80,4 +80,18 @@ public class ExpectationFailed extends HttpException {
 	public ExpectationFailed(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public ExpectationFailed header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/FailedDependency.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/FailedDependency.java
index 0d022a9..e7a358a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/FailedDependency.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/FailedDependency.java
@@ -80,4 +80,18 @@ public class FailedDependency extends HttpException {
 	public FailedDependency(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public FailedDependency header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Forbidden.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Forbidden.java
index b189335..3f222af 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Forbidden.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Forbidden.java
@@ -81,4 +81,18 @@ public class Forbidden extends HttpException {
 	public Forbidden(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public Forbidden header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Gone.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Gone.java
index 1b008a4..d839b0e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Gone.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Gone.java
@@ -84,4 +84,18 @@ public class Gone extends HttpException {
 	public Gone(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public Gone header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpException.java
index 7652b52..9f2ae84 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpException.java
@@ -16,6 +16,12 @@ import static org.apache.juneau.internal.StringUtils.*;
 
 import java.lang.reflect.*;
 import java.text.*;
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.collections.*;
+import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.internal.*;
 
 /**
  * Exception thrown to trigger an error HTTP status.
@@ -29,6 +35,7 @@ public class HttpException extends RuntimeException {
 	private static final long serialVersionUID = 1L;
 
 	private int status;
+	private AMap<String,Object> headers = AMap.of();
 
 	/**
 	 * Constructor.
@@ -166,6 +173,30 @@ public class HttpException extends RuntimeException {
 		return status;
 	}
 
+	/**
+	 * Add an HTTP header to this exception.
+	 *
+	 * @param name The header name.
+	 * @param val The header value.
+	 * @return This object (for method chaining).
+	 */
+	@ConfigurationProperty
+	public HttpException header(String name, Object val) {
+		headers.a(name, val);
+		return this;
+	}
+
+	/**
+	 * Returns the headers associated with this exception.
+	 *
+	 * @return The headers associated with this exception.
+	 */
+	@ResponseHeader("*")
+	@BeanIgnore
+	public Map<String,Object> getHeaders() {
+		return headers;
+	}
+
 	// When serialized, just serialize the message itself.
 	@Override /* Object */
 	public String toString() {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpVersionNotSupported.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpVersionNotSupported.java
index a7287ae..2479e1d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpVersionNotSupported.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/HttpVersionNotSupported.java
@@ -80,4 +80,18 @@ public class HttpVersionNotSupported extends HttpException {
 	public HttpVersionNotSupported(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public HttpVersionNotSupported header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InsufficientStorage.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InsufficientStorage.java
index af9ea0f..bb2bb32 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InsufficientStorage.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InsufficientStorage.java
@@ -80,4 +80,18 @@ public class InsufficientStorage extends HttpException {
 	public InsufficientStorage(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public InsufficientStorage header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InternalServerError.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InternalServerError.java
index 6684460..d602bc9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InternalServerError.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/InternalServerError.java
@@ -80,4 +80,18 @@ public class InternalServerError extends HttpException {
 	public InternalServerError(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public InternalServerError header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LengthRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LengthRequired.java
index a4b182a..a8b1908 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LengthRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LengthRequired.java
@@ -80,4 +80,18 @@ public class LengthRequired extends HttpException {
 	public LengthRequired(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public LengthRequired header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Locked.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Locked.java
index 91ed9dc..64510c0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Locked.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Locked.java
@@ -80,4 +80,18 @@ public class Locked extends HttpException {
 	public Locked(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public Locked header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LoopDetected.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LoopDetected.java
index 426d6c3..ad443e6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LoopDetected.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/LoopDetected.java
@@ -80,4 +80,18 @@ public class LoopDetected extends HttpException {
 	public LoopDetected(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public LoopDetected header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MethodNotAllowed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MethodNotAllowed.java
index 6a97f98..92f5660 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MethodNotAllowed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MethodNotAllowed.java
@@ -80,4 +80,18 @@ public class MethodNotAllowed extends HttpException {
 	public MethodNotAllowed(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public MethodNotAllowed header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MisdirectedRequest.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MisdirectedRequest.java
index f0d24a1..6adacd1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MisdirectedRequest.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/MisdirectedRequest.java
@@ -80,4 +80,18 @@ public class MisdirectedRequest extends HttpException {
 	public MisdirectedRequest(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public MisdirectedRequest header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired.java
index ad23748..35e6b7b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NetworkAuthenticationRequired.java
@@ -81,4 +81,18 @@ public class NetworkAuthenticationRequired extends HttpException {
 	public NetworkAuthenticationRequired(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public NetworkAuthenticationRequired header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotAcceptable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotAcceptable.java
index 1f2658c..c229410 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotAcceptable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotAcceptable.java
@@ -80,4 +80,18 @@ public class NotAcceptable extends HttpException {
 	public NotAcceptable(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public NotAcceptable header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotExtended.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotExtended.java
index 292e383..e28941d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotExtended.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotExtended.java
@@ -80,4 +80,18 @@ public class NotExtended extends HttpException {
 	public NotExtended(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public NotExtended header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotFound.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotFound.java
index 25ce070..ac53d10 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotFound.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotFound.java
@@ -81,4 +81,18 @@ public class NotFound extends HttpException {
 	public NotFound(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public NotFound header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotImplemented.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotImplemented.java
index 34b5f2d..24f6dba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotImplemented.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/NotImplemented.java
@@ -81,4 +81,18 @@ public class NotImplemented extends HttpException {
 	public NotImplemented(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public NotImplemented header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PayloadTooLarge.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PayloadTooLarge.java
index eca7287..876957d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PayloadTooLarge.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PayloadTooLarge.java
@@ -80,4 +80,18 @@ public class PayloadTooLarge extends HttpException {
 	public PayloadTooLarge(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public PayloadTooLarge header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionFailed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionFailed.java
index a605423..47418aa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionFailed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionFailed.java
@@ -80,4 +80,18 @@ public class PreconditionFailed extends HttpException {
 	public PreconditionFailed(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public PreconditionFailed header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionRequired.java
index 72b8152..41b3579 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/PreconditionRequired.java
@@ -81,4 +81,18 @@ public class PreconditionRequired extends HttpException {
 	public PreconditionRequired(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public PreconditionRequired header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RangeNotSatisfiable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RangeNotSatisfiable.java
index 41d6936..7d2c861 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RangeNotSatisfiable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RangeNotSatisfiable.java
@@ -81,4 +81,18 @@ public class RangeNotSatisfiable extends HttpException {
 	public RangeNotSatisfiable(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public RangeNotSatisfiable header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge.java
index da8de2a..6a92652 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/RequestHeaderFieldsTooLarge.java
@@ -80,4 +80,18 @@ public class RequestHeaderFieldsTooLarge extends HttpException {
 	public RequestHeaderFieldsTooLarge(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public RequestHeaderFieldsTooLarge header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ServiceUnavailable.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ServiceUnavailable.java
index 3d3e76e..a75f699 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ServiceUnavailable.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/ServiceUnavailable.java
@@ -81,4 +81,18 @@ public class ServiceUnavailable extends HttpException {
 	public ServiceUnavailable(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public ServiceUnavailable header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/TooManyRequests.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/TooManyRequests.java
index f71026a..c002588 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/TooManyRequests.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/TooManyRequests.java
@@ -81,4 +81,18 @@ public class TooManyRequests extends HttpException {
 	public TooManyRequests(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public TooManyRequests header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Unauthorized.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Unauthorized.java
index 1113195..301ad17 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Unauthorized.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/Unauthorized.java
@@ -83,4 +83,18 @@ public class Unauthorized extends HttpException {
 	public Unauthorized(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public Unauthorized header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnavailableForLegalReasons.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnavailableForLegalReasons.java
index cd091af..2389011 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnavailableForLegalReasons.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnavailableForLegalReasons.java
@@ -80,4 +80,18 @@ public class UnavailableForLegalReasons extends HttpException {
 	public UnavailableForLegalReasons(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public UnavailableForLegalReasons header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnprocessableEntity.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnprocessableEntity.java
index 0e0e950..a739292 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnprocessableEntity.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnprocessableEntity.java
@@ -80,4 +80,18 @@ public class UnprocessableEntity extends HttpException {
 	public UnprocessableEntity(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public UnprocessableEntity header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnsupportedMediaType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnsupportedMediaType.java
index d95d1d4..fcc1a8a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnsupportedMediaType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UnsupportedMediaType.java
@@ -81,4 +81,18 @@ public class UnsupportedMediaType extends HttpException {
 	public UnsupportedMediaType(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public UnsupportedMediaType header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UpgradeRequired.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UpgradeRequired.java
index abf0023..cd632ea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UpgradeRequired.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UpgradeRequired.java
@@ -80,4 +80,18 @@ public class UpgradeRequired extends HttpException {
 	public UpgradeRequired(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public UpgradeRequired header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UriTooLong.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UriTooLong.java
index 6938713..633013d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UriTooLong.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/UriTooLong.java
@@ -81,4 +81,18 @@ public class UriTooLong extends HttpException {
 	public UriTooLong(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public UriTooLong header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/VariantAlsoNegotiates.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/VariantAlsoNegotiates.java
index 30fd61a..e6e5ba1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/VariantAlsoNegotiates.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/exception/VariantAlsoNegotiates.java
@@ -80,4 +80,18 @@ public class VariantAlsoNegotiates extends HttpException {
 	public VariantAlsoNegotiates(Throwable cause) {
 		this(cause, null);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpException */
+	public VariantAlsoNegotiates header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java
index 9ef78e8..392e6ae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Accepted.java
@@ -49,4 +49,18 @@ public class Accepted extends HttpResponse {
 	public Accepted(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public Accepted header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java
index 9fe2fd7..5f3c2d8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/AlreadyReported.java
@@ -48,4 +48,18 @@ public class AlreadyReported extends HttpResponse {
 	public AlreadyReported(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public AlreadyReported header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java
index 5e0b917..66632f9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Continue.java
@@ -52,4 +52,18 @@ public class Continue extends HttpResponse {
 	public Continue(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public Continue header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java
index 6e44a20..1adf90c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Created.java
@@ -48,4 +48,18 @@ public class Created extends HttpResponse {
 	public Created(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public Created header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java
index 312a254..70e3ebf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/EarlyHints.java
@@ -48,4 +48,18 @@ public class EarlyHints extends HttpResponse {
 	public EarlyHints(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public EarlyHints header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java
index 60d614d..e342dfe 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Found.java
@@ -88,4 +88,18 @@ public class Found extends HttpResponse {
 	public URI getLocation() {
 		return location;
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public Found header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponse.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponse.java
index b0ae346..652a75e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponse.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/HttpResponse.java
@@ -12,7 +12,12 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.http.response;
 
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.collections.*;
 import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.internal.*;
 
 /**
  * Superclass of all predefined responses in this package.
@@ -24,6 +29,7 @@ import org.apache.juneau.http.annotation.*;
 public abstract class HttpResponse {
 
 	private final String message;
+	private AMap<String,Object> headers = AMap.of();
 
 	/**
 	 * Constructor.
@@ -34,6 +40,30 @@ public abstract class HttpResponse {
 		this.message = message;
 	}
 
+	/**
+	 * Add an HTTP header to this response.
+	 *
+	 * @param name The header name.
+	 * @param val The header value.
+	 * @return This object (for method chaining).
+	 */
+	@ConfigurationProperty
+	public HttpResponse header(String name, Object val) {
+		headers.a(name, val);
+		return this;
+	}
+
+	/**
+	 * Returns the headers associated with this exception.
+	 *
+	 * @return The headers associated with this exception.
+	 */
+	@ResponseHeader("*")
+	@BeanIgnore
+	public Map<String,Object> getHeaders() {
+		return headers;
+	}
+
 	@ResponseBody
 	@Override /* Object */
 	public String toString() {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java
index 46bea59..3b6e65b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/IMUsed.java
@@ -48,4 +48,18 @@ public class IMUsed extends HttpResponse {
 	public IMUsed(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public IMUsed header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java
index 828147f..b660be7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MovedPermanently.java
@@ -84,4 +84,18 @@ public class MovedPermanently extends HttpResponse {
 	public URI getLocation() {
 		return location;
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public MovedPermanently header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java
index 89bf7bb..83bed16 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultiStatus.java
@@ -48,4 +48,18 @@ public class MultiStatus extends HttpResponse {
 	public MultiStatus(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public MultiStatus header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java
index c21c7d0..944f277 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/MultipleChoices.java
@@ -49,4 +49,18 @@ public class MultipleChoices extends HttpResponse {
 	public MultipleChoices(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public MultipleChoices header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java
index fed311f..622bde6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NoContent.java
@@ -48,4 +48,18 @@ public class NoContent extends HttpResponse {
 	public NoContent(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public NoContent header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java
index d5125d6..eb1dc2d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NonAuthoritiveInformation.java
@@ -48,4 +48,18 @@ public class NonAuthoritiveInformation extends HttpResponse {
 	public NonAuthoritiveInformation(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public NonAuthoritiveInformation header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java
index 91a35f6..85f6987 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/NotModified.java
@@ -49,4 +49,18 @@ public class NotModified extends HttpResponse {
 	public NotModified(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public NotModified header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java
index a26a1cd..2c9f3c0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Ok.java
@@ -52,4 +52,18 @@ public class Ok extends HttpResponse {
 	public Ok(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public Ok header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java
index a911800..cffe5ae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PartialContent.java
@@ -49,4 +49,18 @@ public class PartialContent extends HttpResponse {
 	public PartialContent(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public PartialContent header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java
index 7cb998e..e455332 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/PermanentRedirect.java
@@ -85,4 +85,18 @@ public class PermanentRedirect extends HttpResponse {
 	public URI getLocation() {
 		return location;
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public PermanentRedirect header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java
index ccffbeb..3b6ec49 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/Processing.java
@@ -50,4 +50,18 @@ public class Processing extends HttpResponse {
 	public Processing(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public Processing header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java
index 0fffa8d..7a4fd7d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/ResetContent.java
@@ -49,4 +49,18 @@ public class ResetContent extends HttpResponse {
 	public ResetContent(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public ResetContent header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java
index 88b456a..e08de3c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SeeOther.java
@@ -110,4 +110,18 @@ public class SeeOther extends HttpResponse {
 	public URI getLocation() {
 		return location;
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public SeeOther header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java
index cc34d0b..92f76cf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/SwitchingProtocols.java
@@ -48,4 +48,18 @@ public class SwitchingProtocols extends HttpResponse {
 	public SwitchingProtocols(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public SwitchingProtocols header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java
index bc9f363..6975e1f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/TemporaryRedirect.java
@@ -86,4 +86,18 @@ public class TemporaryRedirect extends HttpResponse {
 	public URI getLocation() {
 		return location;
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public TemporaryRedirect header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java
index 9f567a2..9ee81e6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/response/UseProxy.java
@@ -49,4 +49,18 @@ public class UseProxy extends HttpResponse {
 	public UseProxy(String message) {
 		super(message);
 	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Fluent setters.
+	//------------------------------------------------------------------------------------------------------------------
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - HttpResponse */
+	public UseProxy header(String name, Object val) {
+		super.header(name, val);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-doc/docs/ReleaseNotes/8.1.4.html b/juneau-doc/docs/ReleaseNotes/8.1.4.html
index e800089..522a362 100644
--- a/juneau-doc/docs/ReleaseNotes/8.1.4.html
+++ b/juneau-doc/docs/ReleaseNotes/8.1.4.html
@@ -162,6 +162,18 @@
 			<li class='jc'>{@link oaj.collections.OList}
 		</ul>
 	<li>
+		All classes in the {@link oaj.http.response} and {@link oaj.http.exception} now have <c>header(String,Object)</c>
+		methods for adding response headers.
+		<p class='bpcode w800'>
+	<jc>// Method that performs a BASIC Auth handshake.</jc>
+	<ja>@RestMethod</ja>
+	<jk>public</jk> Ok checkBasicAuth(<ja>@Header</ja>(<js>"Authorization"</js>) String auth) <jk>throws</jk> Unauthorized {
+		<jk>if</jk> (auth == <jk>null</jk>) 
+			<jk>throw new</jk> Unauthorized().header(<js>"WWW-Authenticate"</js>, <js>"BASIC realm=\"foo\""</js>);
+		<jk>return</jk> Ok.<jsf>OK</jsf>;
+	}
+		</p>		
+	<li>
 		HTML-Schema support is being deprecated due to low-use and difficulty in maintaining.  It will be removed in 9.0.
 </ul>
 
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java
index 5bd68ff..fe1ca75 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java
@@ -36,12 +36,12 @@ public class RestClientTest extends RestTestcase {
 
 		Mutable<Integer> rc = new Mutable<>();
 		Mutable<String> r = new Mutable<>();
-		c.post(URL, new StringEntity("xxxSUCCESSxxx")).run().getStatusCode(rc).getBody().cache().assertValueContains("SUCCESS").getBody().asString(r);
+		c.post(URL, new StringEntity("xxxSUCCESSxxx")).run().getStatusCode(rc).getBody().cache().assertContains("SUCCESS").getBody().asString(r);
 		assertEquals("xxxSUCCESSxxx", r.get());
 		assertEquals(200, rc.get().intValue());
 
 		try {
-			c.post(URL, new StringEntity("xxxFAILURExxx")).run().getBody().assertValueContains("SUCCESS");
+			c.post(URL, new StringEntity("xxxFAILURExxx")).run().getBody().assertContains("SUCCESS");
 			fail();
 		} catch (RestCallException e) {
 			assertTrue(e.getLocalizedMessage().contains("Response did not have the expected substring for body."));
diff --git a/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java b/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
index 09f3aef..7e9d1ee 100644
--- a/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
+++ b/juneau-releng/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
@@ -21,6 +21,8 @@ import org.apache.juneau.config.*;
 import org.apache.juneau.config.store.*;
 import org.apache.juneau.csv.*;
 import org.apache.juneau.html.*;
+import org.apache.juneau.http.exception.*;
+import org.apache.juneau.http.response.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.jena.*;
 import org.apache.juneau.jso.*;
@@ -92,7 +94,64 @@ public class ConfigurablePropertyCodeGenerator {
 		UrlEncodingSerializerBuilder.class,
 		WriterSerializerBuilder.class,
 		XmlParserBuilder.class,
-		XmlSerializerBuilder.class
+		XmlSerializerBuilder.class,
+		BadRequest.class,
+		Conflict.class,
+		ExpectationFailed.class,
+		FailedDependency.class,
+		Forbidden.class,
+		Gone.class,
+		HttpException.class,
+		HttpVersionNotSupported.class,
+		InsufficientStorage.class,
+		InternalServerError.class,
+		LengthRequired.class,
+		Locked.class,
+		LoopDetected.class,
+		MethodNotAllowed.class,
+		MisdirectedRequest.class,
+		NetworkAuthenticationRequired.class,
+		NotAcceptable.class,
+		NotExtended.class,
+		NotFound.class,
+		NotImplemented.class,
+		PayloadTooLarge.class,
+		PreconditionFailed.class,
+		PreconditionRequired.class,
+		RangeNotSatisfiable.class,
+		RequestHeaderFieldsTooLarge.class,
+		ServiceUnavailable.class,
+		TooManyRequests.class,
+		Unauthorized.class,
+		UnavailableForLegalReasons.class,
+		UnprocessableEntity.class,
+		UnsupportedMediaType.class,
+		UpgradeRequired.class,
+		UriTooLong.class,
+		VariantAlsoNegotiates.class,
+		Accepted.class,
+		AlreadyReported.class,
+		Continue.class,
+		Created.class,
+		EarlyHints.class,
+		Found.class,
+		HttpResponse.class,
+		IMUsed.class,
+		MovedPermanently.class,
+		MultipleChoices.class,
+		MultiStatus.class,
+		NoContent.class,
+		NonAuthoritiveInformation.class,
+		NotModified.class,
+		Ok.class,
+		PartialContent.class,
+		PermanentRedirect.class,
+		Processing.class,
+		ResetContent.class,
+		SeeOther.class,
+		SwitchingProtocols.class,
+		TemporaryRedirect.class,
+		UseProxy.class
 	};
 
 	private static String[] SOURCE_PATHS = {
@@ -151,6 +210,8 @@ public class ConfigurablePropertyCodeGenerator {
 							sb.append("\n\t\treturn this;");
 							sb.append("\n\t}");
 						}
+					} else if (pc.isAny(Throwable.class, RuntimeException.class, Exception.class)) {
+						// Ignore
 					} else {
 						System.err.println(pc.inner().getSimpleName() + " not found.");
 					}
diff --git a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
new file mode 100644
index 0000000..196cc73
--- /dev/null
+++ b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
@@ -0,0 +1,3538 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "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.client2;
+
+import static org.junit.Assert.*;
+
+import java.io.*;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.*;
+import java.util.logging.*;
+
+import org.apache.http.*;
+import org.apache.http.HttpException;
+import org.apache.http.auth.*;
+import org.apache.http.impl.client.*;
+import org.apache.http.protocol.*;
+import org.apache.juneau.collections.*;
+import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.exception.*;
+import org.apache.juneau.marshall.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.mock2.*;
+import org.junit.*;
+
+public class RestClientBuilderTest {
+
+	public static class Bean {
+		public int f;
+
+		public static Bean create() {
+			Bean b = new Bean();
+			b.f = 1;
+			return b;
+		}
+
+		public void check() {
+			assertEquals(f, 1);
+		}
+
+		@Override
+		public String toString() {
+			return SimpleJson.DEFAULT.toString(this);
+		}
+	}
+
+	public static Bean bean = Bean.create();
+
+	@Rest
+	public static class A extends BasicRest {
+		@RestMethod
+		public Bean postBean(@Body Bean b) {
+			return b;
+		}
+		@RestMethod
+		public String getEcho(org.apache.juneau.rest.RestRequest req) {
+			return req.toString();
+		}
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Override client and builder.
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void a01_overrideHttpClient() {
+		HttpClientBuilder cb = HttpClientBuilder.create();
+		CloseableHttpClient hc = HttpClientBuilder.create().build();
+		RestClient.create().httpClientBuilder(cb).build();
+		RestClient.create().httpClient(hc).build();
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Logging
+	//------------------------------------------------------------------------------------------------------------------
+	@Test
+	public void b01_logToConsole() throws Exception {
+		RestClient rc = MockRestClient.create(A.class).simpleJson().logToConsole().build();
+		rc.post("/bean", bean).complete();
+	}
+
+	@Test
+	public void b02_logTo() throws Exception {
+		MockLogger ml = new MockLogger();
+		RestClient rc = MockRestClient.create(A.class).simpleJson().logTo(Level.SEVERE, ml).build();
+		rc.post("/bean", bean).complete();
+		ml.assertLevel(Level.SEVERE);
+		ml.assertMessageContains(
+			"=== HTTP Call (outgoing) ======================================================",
+			"=== REQUEST ===",
+			"POST http://localhost/bean",
+			"---request headers---",
+			"	Accept: application/json+simple",
+			"---request entity---",
+			"Content-Type: application/json+simple",
+			"---request content---",
+			"{f:1}",
+			"=== RESPONSE ===",
+			"HTTP/1.1 200 ",
+			"---response headers---",
+			"	Content-Type: application/json",
+			"---response content---",
+			"{f:1}",
+			"=== END ======================================================================="
+		);
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Passthrough methods for HttpClientBuilder.
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void c01_interceptors() throws RestCallException {
+		RestClient rc = MockRestClient.create(A.class).simpleJson()
+			.addInterceptorFirst(
+				new HttpRequestInterceptor() {
+					@Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
+						request.setHeader("A1", "1");
+					}
+				}
+			)
+			.addInterceptorLast(
+				new HttpRequestInterceptor() {
+					@Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
+						request.setHeader("A2", "2");
+					}
+				}
+			)
+			.addInterceptorFirst(
+				new HttpResponseInterceptor() {
+					@Override public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
+						response.setHeader("B1", "1");
+					}
+				}
+			)
+			.addInterceptorLast(
+				new HttpResponseInterceptor() {
+					@Override public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
+						response.setHeader("B2", "2");
+					}
+				}
+			)
+			.build();
+
+		rc.get("/echo")
+			.run()
+			.getBody().assertContains("A1: 1", "A2: 2")
+			.getHeader("B1").assertValue("1")
+			.getHeader("B2").assertValue("2")
+		;
+	}
+
+	@Test
+	public void c02_httpProcessor() throws RestCallException {
+		RestClient rc = MockRestClient.create(A.class).simpleJson()
+			.httpProcessor(new HttpProcessor() {
+				@Override
+				public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
+					request.setHeader("A1", "1");
+				}
+
+				@Override
+				public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
+					response.setHeader("B1", "1");
+				}
+			})
+			.build();
+
+		rc.get("/echo")
+			.run()
+			.getBody().assertContains("A1: 1")
+			.getHeader("B1").assertValue("1")
+		;
+	}
+
+	@Test
+	public void c03_requestExecutor() throws RestCallException {
+		AtomicBoolean b1 = new AtomicBoolean();
+		RestClient rc = MockRestClient.create(A.class).simpleJson()
+			.requestExecutor(new HttpRequestExecutor() {
+				@Override
+				public HttpResponse execute(HttpRequest request, HttpClientConnection conn, HttpContext context) throws HttpException, IOException {
+					b1.set(true);
+					return super.execute(request, conn, context);
+				}
+			})
+			.build();
+
+		rc.get("/echo")
+			.run()
+			.getBody().assertContains("HTTP GET /echo")
+		;
+		assertTrue(b1.get());
+	}
+
+	@Test
+	public void c04_defaultHeaders() throws RestCallException {
+		RestClient rc = MockRestClient.create(A.class).simpleJson()
+			.defaultHeaders(AList.of(new org.apache.http.message.BasicHeader("Foo", "bar")))
+			.build();
+
+		rc.get("/echo")
+			.run()
+			.getBody().assertContains("HTTP GET /echo","Foo: bar")
+		;
+	}
+
+	@Test
+	public void c05_miscellaneous() {
+		RestClient.create()
+			.disableRedirectHandling()
+			.redirectStrategy(DefaultRedirectStrategy.INSTANCE)
+			.defaultCookieSpecRegistry(null)
+			.sslHostnameVerifier(null)
+			.publicSuffixMatcher(null)
+			.sslContext(null)
+			.sslSocketFactory(null)
+			.maxConnTotal(10)
+			.maxConnPerRoute(10)
+			.defaultSocketConfig(null)
+			.defaultConnectionConfig(null)
+			.connectionTimeToLive(100, TimeUnit.DAYS)
+			.connectionManager(null)
+			.connectionManagerShared(true)
+			.connectionReuseStrategy(null)
+			.keepAliveStrategy(null)
+			.targetAuthenticationStrategy(null)
+			.proxyAuthenticationStrategy(null)
+			.userTokenHandler(null)
+			.disableConnectionState()
+			.schemePortResolver(null)
+			.userAgent("foo")
+			.disableCookieManagement()
+			.disableContentCompression()
+			.disableAuthCaching()
+			.retryHandler(null)
+			.disableAutomaticRetries()
+			.proxy(null)
+			.routePlanner(null)
+			.connectionBackoffStrategy(null)
+			.backoffManager(null)
+			.serviceUnavailableRetryStrategy(null)
+			.defaultCookieStore(null)
+			.defaultCredentialsProvider(null)
+			.defaultAuthSchemeRegistry(null)
+			.contentDecoderRegistry(null)
+			.defaultRequestConfig(null)
+			.useSystemProperties()
+			.evictExpiredConnections()
+			.evictIdleConnections(1, TimeUnit.DAYS);
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Pooled connections
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Test
+	public void d01_pooled() throws RestCallException {
+		RestClient rc = MockRestClient.create(A.class).simpleJson()
+			.pooled()
+			.build();
+
+		rc.get("/echo")
+			.run()
+			.getBody().assertContains("HTTP GET /echo")
+		;
+
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Authentication
+	//------------------------------------------------------------------------------------------------------------------
+
+	@Rest
+	public static class B extends BasicRest {
+		@RestMethod
+		public String getEcho(@org.apache.juneau.http.annotation.Header("Authorization") String auth, org.apache.juneau.rest.RestResponse res) throws IOException {
+			if (auth == null) {
+				throw new Unauthorized().header("WWW-Authenticate", "BASIC realm=\"foo\"");
+			} else {
+				if (! auth.equals("Basic dXNlcjpwdw==")) {
+					throw new BadRequest("Wrong auth header: " + auth);
+				}
+				return "OK";
+			}
+		}
+	}
+
+	@Test
+	public void e01_basicAuth() throws RestCallException {
+		RestClient rc = MockRestClient.create(B.class).simpleJson()
+			.basicAuth(AuthScope.ANY_HOST, AuthScope.ANY_PORT, "user", "pw")
+			.build();
+		rc.get("/echo")
+			.run()
+			.getBody().assertContains("OK")
+		;
+	}
+
+//	/**
+//	 * Sets a header on all requests.
+//	 *
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.header(<js>"Foo"</js>, <js>"bar"</js>, myPartSerializer, headerSchema);
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param name The header name.
+//	 * @param value The header value.
+//	 * 	<ul>
+//	 * 		<li>Can be any POJO.
+//	 * 		<li>Converted to a string using the specified part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @param serializer The serializer to use for serializing the value to a string.
+//	 * 	<ul>
+//	 * 		<li>If <jk>null</jk>, then the {@link HttpPartSerializer} defined on the client is used ({@link OpenApiSerializer} by default).
+//	 * 	</ul>
+//	 * @param schema The schema object that defines the format of the output.
+//	 * 	<ul>
+//	 * 		<li>If <jk>null</jk>, defaults to {@link HttpPartSchema#DEFAULT}.
+//	 * 		<li>Only used if serializer is schema-aware (e.g. {@link OpenApiSerializer}).
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder header(String name, Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
+//		return addTo(RESTCLIENT_headers, name, SerializedNameValuePair.create().name(name).value(value).type(HEADER).serializer(serializer).schema(schema));
+//	}
+//
+//	/**
+//	 * Sets a header on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.header(<js>"Foo"</js>, <js>"bar"</js>);
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_headers}
+//	 * </ul>
+//	 *
+//	 * @param name The header name.
+//	 * @param value The header value.
+//	 * 	<ul>
+//	 * 		<li>Can be any POJO.
+//	 * 		<li>Converted to a string using the specified part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder header(String name, Object value) {
+//		return header(name, value, null, null);
+//	}
+//
+//	/**
+//	 * Sets a header on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.header(<jk>new</jk> BasicHeader(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param header The header to set.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder header(Header header) {
+//		return addTo(RESTCLIENT_headers, header.getName(), header);
+//	}
+//
+//	/**
+//	 * Sets a header on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.header(<jk>new</jk> NameValuePair(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param header The header to set.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder header(NameValuePair header) {
+//		return addTo(RESTCLIENT_headers, header.getName(), header);
+//	}
+//
+//	/**
+//	 * Sets a header on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.header(<jk>new</jk> Accept(<js>"Content-Type"</js>, <js>"application/json"</js>)
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param header The header to set.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder header(HttpHeader header) {
+//		return addTo(RESTCLIENT_headers, header.getName(), header);
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(<jk>new</jk> BasicHeader(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param headers The header to set.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(Header...headers) {
+//		for (Header h : headers)
+//			header(h);
+//		return this;
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(<jk>new</jk> ObjectMap(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param headers The header pairs.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(ObjectMap headers) {
+//		return headers((Map<String,Object>)headers);
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(AMap.<jsm>create</jsm>().append(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param headers The header pairs.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(Map<String,Object> headers) {
+//		for (Map.Entry<String,Object> e : headers.entrySet())
+//			header(e.getKey(), e.getValue(), null, null);
+//		return this;
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(<jk>new</jk> NameValuePairs(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param headers The header pairs.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(NameValuePairs headers) {
+//		for (NameValuePair p : headers)
+//			header(p);
+//		return this;
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(<jk>new</jk> NameValuePair(<js>"Foo"</js>, <js>"bar"</js>))
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param headers The header pairs.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(NameValuePair...headers) {
+//		for (NameValuePair p : headers)
+//			header(p);
+//		return this;
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests using freeform key/value pairs.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(<js>"Header1"</js>,<js>"val1"</js>,<js>"Header2"</js>,<js>"val2"</js>)
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param pairs The header key/value pairs.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(Object...pairs) {
+//		if (pairs.length % 2 != 0)
+//			throw new RuntimeException("Odd number of parameters passed into headers(Object...)");
+//		for (int i = 0; i < pairs.length; i+=2)
+//			header(stringify(pairs[i]), pairs[i+1]);
+//		return this;
+//	}
+//
+//	/**
+//	 * Sets multiple headers on all requests using header beans.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	RestClient c = RestClient
+//	 * 		.<jsm>create</jsm>()
+//	 * 		.headers(
+//	 * 			<jk>new</jk> AcceptEncoding(<js>"gzip"</js>),
+//	 * 			<jk>new</jk> AcceptLanguage(<js>"da, en-gb;q=0.8, en;q=0.7"</js>)
+//	 * 		)
+//	 * 		.build();
+//	 * </p>
+//	 *
+//	 * @param headers
+//	 * 	The headers.
+//	 * 	The header values are converted to strings using the configured {@link HttpPartSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder headers(HttpHeader...headers) {
+//		for (HttpHeader h : headers)
+//			header(h.getName(), h.getValue());
+//		return this;
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Accept</c> request header.
+//	 *
+//	 * <p>
+//	 * This overrides the media type specified on the parser, but is overridden by calling
+//	 * <code>header(<js>"Accept"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder accept(Object value) {
+//		return header("Accept", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Accept-Charset</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Accept-Charset"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder acceptCharset(Object value) {
+//		return header("Accept-Charset", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Accept-Encoding</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Accept-Encoding"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder acceptEncoding(Object value) {
+//		return header("Accept-Encoding", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Accept-Language</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Accept-Language"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder acceptLanguage(Object value) {
+//		return header("Accept-Language", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Authorization</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Authorization"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder authorization(Object value) {
+//		return header("Authorization", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Cache-Control</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Cache-Control"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder cacheControl(Object value) {
+//		return header("Cache-Control", value);
+//	}
+//
+//	/**
+//	 * Sets the client version by setting the value for the <js>"X-Client-Version"</js> header.
+//	 *
+//	 * @param value The version string (e.g. <js>"1.2.3"</js>)
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder clientVersion(Object value) {
+//		return header("X-Client-Version", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Connection</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Connection"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder connection(Object value) {
+//		return header("Connection", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Content-Length</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Content-Length"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder contentLength(Object value) {
+//		return header("Content-Length", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Content-Type</c> request header.
+//	 *
+//	 * <p>
+//	 * This overrides the media type specified on the serializer, but is overridden by calling
+//	 * <code>header(<js>"Content-Type"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder contentType(Object value) {
+//		return header("Content-Type", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Date</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Date"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder date(Object value) {
+//		return header("Date", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Expect</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Expect"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder expect(Object value) {
+//		return header("Expect", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Forwarded</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Forwarded"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder forwarded(Object value) {
+//		return header("Forwarded", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>From</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"From"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder from(Object value) {
+//		return header("From", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Host</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Host"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder host(Object value) {
+//		return header("Host", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>If-Match</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"If-Match"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ifMatch(Object value) {
+//		return header("If-Match", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>If-Modified-Since</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"If-Modified-Since"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ifModifiedSince(Object value) {
+//		return header("If-Modified-Since", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>If-None-Match</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"If-None-Match"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ifNoneMatch(Object value) {
+//		return header("If-None-Match", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>If-Range</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"If-Range"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ifRange(Object value) {
+//		return header("If-Range", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>If-Unmodified-Since</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"If-Unmodified-Since"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ifUnmodifiedSince(Object value) {
+//		return header("If-Unmodified-Since", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Max-Forwards</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Max-Forwards"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder maxForwards(Object value) {
+//		return header("If-Unmodified-Since", value);
+//	}
+//
+//	/**
+//	 * 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.
+//	 * This is useful for testing purposes when you don't want your log file to show lots of errors that are simply the
+//	 * results of testing.
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder noTrace() {
+//		return header("No-Trace", true);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Origin</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Origin"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder origin(Object value) {
+//		return header("If-Unmodified-Since", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Pragma</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Pragma"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder pragma(Object value) {
+//		return header("Pragma", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Proxy-Authorization</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Proxy-Authorization"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder proxyAuthorization(Object value) {
+//		return header("Proxy-Authorization", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Range</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Range"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder range(Object value) {
+//		return header("Range", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Referer</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Referer"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder referer(Object value) {
+//		return header("Referer", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>TE</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"TE"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder te(Object value) {
+//		return header("TE", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>User-Agent</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"User-Agent"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder userAgent(Object value) {
+//		return header("User-Agent", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Upgrade</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Upgrade"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder upgrade(Object value) {
+//		return header("Upgrade", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Via</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Via"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder via(Object value) {
+//		return header("Via", value);
+//	}
+//
+//	/**
+//	 * Sets the value for the <c>Warning</c> request header.
+//	 *
+//	 * <p>
+//	 * This is a shortcut for calling <code>header(<js>"Warning"</js>, value);</code>
+//	 *
+//	 * @param value The new header value.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder warning(Object value) {
+//		return header("Warning", value);
+//	}
+//
+//	//-----------------------------------------------------------------------------------------------------------------
+//	// Query
+//	//-----------------------------------------------------------------------------------------------------------------
+//
+//	/**
+//	 * Adds a query parameter to the URI.
+//	 *
+//	 * @param name The parameter name.
+//	 * @param value The parameter value.
+//	 * 	<ul>
+//	 * 		<li>Can be any POJO.
+//	 * 		<li>Converted to a string using the specified part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @param serializer The serializer to use for serializing the value to a string.
+//	 * 	<ul>
+//	 * 		<li>If <jk>null</jk>, then the {@link HttpPartSerializer} defined on the client is used ({@link OpenApiSerializer} by default).
+//	 * 	</ul>
+//	 * @param schema The schema object that defines the format of the output.
+//	 * 	<ul>
+//	 * 		<li>If <jk>null</jk>, defaults to {@link HttpPartSchema#DEFAULT}.
+//	 * 		<li>Only used if serializer is schema-aware (e.g. {@link OpenApiSerializer}).
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(String name, Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
+//		return addTo(RESTCLIENT_query, name, SerializedNameValuePair.create().name(name).value(value).type(QUERY).serializer(serializer).schema(schema));
+//	}
+//
+//	/**
+//	 * Adds a query parameter to the URI.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(<js>"foo"</js>, <js>"bar"</js>)
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param name The parameter name.
+//	 * @param value The parameter value.
+//	 * 	<ul>
+//	 * 		<li>Can be any POJO.
+//	 * 		<li>Converted to a string using the specified part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(String name, Object value) {
+//		return query(name, value, null, null);
+//	}
+//
+//	/**
+//	 * Adds a query parameter to the URI.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(<jk>new</jk> NameValuePair(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param param The query parameter.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(NameValuePair param) {
+//		return addTo(RESTCLIENT_query, param.getName(), param);
+//	}
+//
+//	/**
+//	 * Adds query parameters to the URI.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(<jk>new</jk> ObjectMap(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The query parameters.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(ObjectMap params) {
+//		return query((Map<String,Object>)params);
+//	}
+//
+//	/**
+//	 * Adds query parameters to the URI.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(AMap.<jsm>create</jsm>().append(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The query parameters.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(Map<String,Object> params) {
+//		for (Map.Entry<String,Object> e : params.entrySet())
+//			query(e.getKey(), e.getValue());
+//		return this;
+//	}
+//
+//	/**
+//	 * Adds query parameters to the URI.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(<jk>new</jk> NameValuePairs(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The query parameters.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(NameValuePairs params) {
+//		for (NameValuePair p : params)
+//			query(p);
+//		return this;
+//	}
+//
+//	/**
+//	 * Adds query parameters to the URI.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(<jk>new</jk> NameValuePair(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The query parameters.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(NameValuePair...params) {
+//		for (NameValuePair p : params)
+//			query(p);
+//		return this;
+//	}
+//
+//	/**
+//	 * Adds query parameters to the URI query using free-form key/value pairs.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.get(<jsf>URL</jsf>)
+//	 * 		.query(<js>"key1"</js>,<js>"val1"</js>,<js>"key2"</js>,<js>"val2"</js>)
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param pairs The query key/value pairs.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder query(Object...pairs) {
+//		if (pairs.length % 2 != 0)
+//			throw new RuntimeException("Odd number of parameters passed into query(Object...)");
+//		for (int i = 0; i < pairs.length; i+=2)
+//			query(stringify(pairs[i]), pairs[i+1]);
+//		return this;
+//	}
+//
+//	//-----------------------------------------------------------------------------------------------------------------
+//	// Form data
+//	//-----------------------------------------------------------------------------------------------------------------
+//
+//	/**
+//	 * Adds a form-data parameter to all request bodies.
+//	 *
+//	 * @param name The parameter name.
+//	 * @param value The parameter value.
+//	 * 	<ul>
+//	 * 		<li>Can be any POJO.
+//	 * 		<li>Converted to a string using the specified part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @param serializer The serializer to use for serializing the value to a string.
+//	 * 	<ul>
+//	 * 		<li>If <jk>null</jk>, then the {@link HttpPartSerializer} defined on the client is used ({@link OpenApiSerializer} by default).
+//	 * 	</ul>
+//	 * @param schema The schema object that defines the format of the output.
+//	 * 	<ul>
+//	 * 		<li>If <jk>null</jk>, defaults to {@link HttpPartSchema#DEFAULT}.
+//	 * 		<li>Only used if serializer is schema-aware (e.g. {@link OpenApiSerializer}).
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(String name, Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
+//		return addTo(RESTCLIENT_formData, name, SerializedNameValuePair.create().name(name).value(value).type(FORMDATA).serializer(serializer).schema(schema));
+//	}
+//
+//	/**
+//	 * Adds a form-data parameter to all request bodies.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(<js>"foo"</js>, <js>"bar"</js>)
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param name The parameter name.
+//	 * @param value The parameter value.
+//	 * 	<ul>
+//	 * 		<li>Can be any POJO.
+//	 * 		<li>Converted to a string using the specified part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(String name, Object value) {
+//		return formData(name, value, null, null);
+//	}
+//
+//	/**
+//	 * Adds a form-data parameter to all request bodies.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(<jk>new</jk> NameValuePair(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param param The form-data parameter.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(NameValuePair param) {
+//		return addTo(RESTCLIENT_formData, param.getName(), param);
+//	}
+//
+//	/**
+//	 * Adds form-data parameters to all request bodies.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(<jk>new</jk> ObjectMap(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The form-data parameters.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(ObjectMap params) {
+//		return formData((Map<String,Object>)params);
+//	}
+//
+//	/**
+//	 * Adds form-data parameters to all request bodies.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(AMap.<jsm>create</jsm>().append(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The form-data parameters.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(Map<String,Object> params) {
+//		for (Map.Entry<String,Object> e : params.entrySet())
+//			formData(e.getKey(), e.getValue());
+//		return this;
+//	}
+//
+//	/**
+//	 * Adds form-data parameters to all request bodies.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(<jk>new</jk> NameValuePairs(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The form-data parameters.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(NameValuePairs params) {
+//		for (NameValuePair p : params)
+//			formData(p);
+//		return this;
+//	}
+//
+//	/**
+//	 * Adds form-data parameters to all request bodies.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(<jk>new</jk> NameValuePair(<js>"foo"</js>, <js>"bar"</js>))
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param params The form-data parameters.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(NameValuePair...params) {
+//		for (NameValuePair p : params)
+//			formData(p);
+//		return this;
+//	}
+//
+//	/**
+//	 * Adds form-data parameters to all request bodies using free-form key/value pairs.
+//	 *
+//	 * <h5 class='section'>Example:</h5>
+//	 * <p class='bcode w800'>
+//	 * 	client
+//	 * 		.formPost(<jsf>URL</jsf>)
+//	 * 		.formData(<js>"key1"</js>,<js>"val1"</js>,<js>"key2"</js>,<js>"val2"</js>)
+//	 * 		.run();
+//	 * </p>
+//	 *
+//	 * @param pairs The form-data key/value pairs.
+//	 * 	<ul>
+//	 * 		<li>Values can be any POJO.
+//	 * 		<li>Values converted to a string using the configured part serializer.
+//	 * 		<li>Values are converted to strings at runtime to allow them to be modified externally.
+//	 * 	</ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder formData(Object...pairs) {
+//		if (pairs.length % 2 != 0)
+//			throw new RuntimeException("Odd number of parameters passed into formData(Object...)");
+//		for (int i = 0; i < pairs.length; i+=2)
+//			formData(stringify(pairs[i]), pairs[i+1]);
+//		return this;
+//	}
+//
+//	//-----------------------------------------------------------------------------------------------------------------
+//	// Properties
+//	//-----------------------------------------------------------------------------------------------------------------
+//
+//	/**
+//	 * Configuration property:  REST call handler.
+//	 *
+//	 * <p>
+//	 * Allows you to provide a custom handler for making HTTP calls.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jic'>{@link RestCallHandler}
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_callHandler}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is <jk>null</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder callHandler(Class<? extends RestCallHandler> value) {
+//		return set(RESTCLIENT_callHandler, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  REST call handler.
+//	 *
+//	 * <p>
+//	 * Allows you to provide a custom handler for making HTTP calls.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jic'>{@link RestCallHandler}
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_callHandler}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is <jk>null</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder callHandler(RestCallHandler value) {
+//		return set(RESTCLIENT_callHandler, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Errors codes predicate.
+//	 *
+//	 * <p>
+//	 * Defines a predicate to test for error codes.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_errorCodes}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is <code>x -&gt; x &gt;= 400</code>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder errorCodes(Predicate<Integer> value) {
+//		return set(RESTCLIENT_errorCodes, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Executor service.
+//	 *
+//	 * <p>
+//	 * Defines the executor service to use when calling future methods on the {@link RestRequest} class.
+//	 *
+//	 * <p>
+//	 * This executor service is used to create {@link Future} objects on the following methods:
+//	 * <ul>
+//	 * 	<li class='jm'>{@link RestRequest#runFuture()}
+//	 * </ul>
+//	 *
+//	 * <p>
+//	 * The default executor service is a single-threaded {@link ThreadPoolExecutor} with a 30 second timeout
+//	 * and a queue size of 10.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_executorService}
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_executorServiceShutdownOnClose}
+//	 * </ul>
+//	 *
+//	 * @param executorService The executor service.
+//	 * @param shutdownOnClose Call {@link ExecutorService#shutdown()} when {@link RestClient#close()} is called.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder executorService(ExecutorService executorService, boolean shutdownOnClose) {
+//		set(RESTCLIENT_executorService, executorService);
+//		set(RESTCLIENT_executorServiceShutdownOnClose, shutdownOnClose);
+//		return this;
+//	}
+//
+//	/**
+//	 * Configuration property:  Keep HttpClient open.
+//	 *
+//	 * <p>
+//	 * Don't close this client when the {@link RestClient#close()} method is called.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_keepHttpClientOpen}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder keepHttpClientOpen(boolean value) {
+//		return set(RESTCLIENT_keepHttpClientOpen, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Keep HttpClient open.
+//	 *
+//	 * <p>
+//	 * Don't close this client when the {@link RestClient#close()} method is called.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_keepHttpClientOpen}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder keepHttpClientOpen() {
+//		return keepHttpClientOpen(true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Call interceptors.
+//	 *
+//	 * <p>
+//	 * Adds an interceptor that gets called immediately after a connection is made.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
+//	 * </ul>
+//	 *
+//	 * @param values The values to add to this setting.
+//	 * @return This object (for method chaining).
+//	 */
+//	@SuppressWarnings("unchecked")
+//	@ConfigurationProperty
+//	public RestClientBuilder interceptors(Class<? extends RestCallInterceptor>...values) {
+//		return addTo(RESTCLIENT_interceptors, values);
+//	}
+//
+//	/**
+//	 * Configuration property:  Call interceptors.
+//	 *
+//	 * <p>
+//	 * Adds an interceptor that gets called immediately after a connection is made.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
+//	 * </ul>
+//	 *
+//	 * @param value The values to add to this setting.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder interceptors(RestCallInterceptor...value) {
+//		return addTo(RESTCLIENT_interceptors, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Enable leak detection.
+//	 *
+//	 * <p>
+//	 * Enable client and request/response leak detection.
+//	 *
+//	 * <p>
+//	 * Causes messages to be logged to the console if clients or request/response objects are not properly closed
+//	 * when the <c>finalize</c> methods are invoked.
+//	 *
+//	 * <p>
+//	 * Automatically enabled with {@link RestClient#RESTCLIENT_debug}.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_leakDetection}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder leakDetection() {
+//		return leakDetection(true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Enable leak detection.
+//	 *
+//	 * <p>
+//	 * Enable client and request/response leak detection.
+//	 *
+//	 * <p>
+//	 * Causes messages to be logged to the console if clients or request/response objects are not properly closed
+//	 * when the <c>finalize</c> methods are invoked.
+//	 *
+//	 * <p>
+//	 * Automatically enabled with {@link RestClient#RESTCLIENT_debug}.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_leakDetection}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder leakDetection(boolean value) {
+//		return set(RESTCLIENT_leakDetection, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Marshall
+//	 *
+//	 * <p>
+//	 * Shortcut for specifying the {@link RestClient#RESTCLIENT_serializers} and {@link RestClient#RESTCLIENT_parsers}
+//	 * using the serializer and parser defined in a marshall.
+//	 *
+//	 * @param value The values to add to this setting.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder marshall(Marshall value) {
+//		if (value != null)
+//			serializer(value.getSerializer()).parser(value.getParser());
+//		return this;
+//	}
+//
+//	/**
+//	 * Configuration property:  Marshalls
+//	 *
+//	 * <p>
+//	 * Shortcut for specifying the {@link RestClient#RESTCLIENT_serializers} and {@link RestClient#RESTCLIENT_parsers}
+//	 * using the serializer and parser defined in a marshall.
+//	 *
+//	 * @param value The values to add to this setting.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder marshalls(Marshall...value) {
+//		for (Marshall m : value) {
+//			if (m != null)
+//				serializer(m.getSerializer()).parser(m.getParser());
+//		}
+//		return this;
+//	}
+//
+//	/**
+//	 * Configuration property:  Parser.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling {@link #parsers(Class...)}.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_parsers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link JsonParser#DEFAULT}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@SuppressWarnings("unchecked")
+//	@ConfigurationProperty
+//	public RestClientBuilder parser(Class<? extends Parser> value) {
+//		return parsers(value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Parser.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling {@link #parsers(Parser...)}.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_parsers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link JsonParser#DEFAULT}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder parser(Parser value) {
+//		return parsers(value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Parsers.
+//	 *
+//	 * <p>
+//	 * Associates the specified {@link Parser Parsers} with the HTTP client.
+//	 *
+//	 * <p>
+//	 * The parser that best matches the <c>Accept</c> header will be used to parse the response body.
+//	 * <br>If no <c>Accept</c> header is specified, the first parser in the list will be used.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_parsers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link JsonParser#DEFAULT}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@SuppressWarnings("unchecked")
+//	@ConfigurationProperty
+//	public RestClientBuilder parsers(Class<? extends Parser>...value) {
+//		return addTo(RESTCLIENT_parsers, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Parsers.
+//	 *
+//	 * <p>
+//	 * Same as {@link #parsers(Class...)} except takes in a parser instance.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_parsers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link JsonParser#DEFAULT}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder parsers(Parser...value) {
+//		return addTo(RESTCLIENT_parsers, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Part parser.
+//	 *
+//	 * <p>
+//	 * The parser to use for parsing POJOs from form data, query parameters, headers, and path variables.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_partParser}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link OpenApiParser}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder partParser(Class<? extends HttpPartParser> value) {
+//		return set(RESTCLIENT_partParser, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Part parser.
+//	 *
+//	 * <p>
+//	 * Same as {@link #partParser(Class)} but takes in a parser instance.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_partParser}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link OpenApiParser}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder partParser(HttpPartParser value) {
+//		return set(RESTCLIENT_partParser, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Part serializer.
+//	 *
+//	 * <p>
+//	 * The serializer to use for serializing POJOs in form data, query parameters, headers, and path variables.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_partSerializer}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link OpenApiSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder partSerializer(Class<? extends HttpPartSerializer> value) {
+//		return set(RESTCLIENT_partSerializer, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Part serializer.
+//	 *
+//	 * <p>
+//	 * Same as {@link #partSerializer(Class)} but takes in a parser instance.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_partSerializer}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default value is {@link OpenApiSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder partSerializer(HttpPartSerializer value) {
+//		return set(RESTCLIENT_partSerializer, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Root URI.
+//	 *
+//	 * <p>
+//	 * When set, relative URL strings passed in through the various rest call methods (e.g. {@link RestClient#get(Object)}
+//	 * will be prefixed with the specified root.
+//	 * <br>This root URL is ignored on those methods if you pass in a {@link URL}, {@link URI}, or an absolute URL string.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_rootUri}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The root URL to prefix to relative URL strings.
+//	 * 	<br>Trailing slashes are trimmed.
+//	 * 	<br>Usually a <c>String</c> but you can also pass in <c>URI</c> and <c>URL</c> objects as well.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder rootUrl(Object value) {
+//		return set(RESTCLIENT_rootUri, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Serializer.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling {@link #serializers(Class...)}.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_serializers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default is {@link JsonSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@SuppressWarnings("unchecked")
+//	@ConfigurationProperty
+//	public RestClientBuilder serializer(Class<? extends Serializer> value) {
+//		return serializers(value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Serializer.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling {@link #serializers(Serializer...)}.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_serializers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default is {@link JsonSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder serializer(Serializer value) {
+//		return serializers(value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Serializers.
+//	 *
+//	 * <p>
+//	 * Associates the specified {@link Serializer Serializers} with the HTTP client.
+//	 *
+//	 * <p>
+//	 * The serializer that best matches the <c>Content-Type</c> header will be used to serialize the request body.
+//	 * <br>If no <c>Content-Type</c> header is specified, the first serializer in the list will be used.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_serializers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default is {@link JsonSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@SuppressWarnings("unchecked")
+//	@ConfigurationProperty
+//	public RestClientBuilder serializers(Class<? extends Serializer>...value) {
+//		return addTo(RESTCLIENT_serializers, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Serializers.
+//	 *
+//	 * <p>
+//	 * Same as {@link #serializers(Class...)} but takes in serializer instances.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_serializers}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this setting.
+//	 * 	<br>The default is {@link JsonSerializer}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder serializers(Serializer...value) {
+//		return addTo(RESTCLIENT_serializers, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Add <js>"_type"</js> properties when needed.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
+//	 * through reflection.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_addBeanTypes}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder addBeanTypes(boolean value) {
+//		return set(SERIALIZER_addBeanTypes, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Add <js>"_type"</js> properties when needed.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>addBeanTypes(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_addBeanTypes}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder addBeanTypes() {
+//		return set(SERIALIZER_addBeanTypes, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Add type attribute to root nodes.
+//	 *
+//	 * <p>
+//	 * When disabled, it is assumed that the parser knows the exact Java POJO type being parsed, and therefore top-level
+//	 * type information that might normally be included to determine the data type will not be serialized.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_addRootType}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder addRootType(boolean value) {
+//		return set(SERIALIZER_addRootType, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Add type attribute to root nodes.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>addRootType(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_addRootType}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder addRootType() {
+//		return set(SERIALIZER_addRootType, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Automatically detect POJO recursions.
+//	 *
+//	 * <p>
+//	 * Specifies that recursions should be checked for during serialization.
+//	 *
+//	 * <ul class='notes'>
+//	 * 	<li>
+//	 * 		Checking for recursion can cause a small performance penalty.
+//	 * </ul>
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_detectRecursions}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder detectRecursions(boolean value) {
+//		return set(BEANTRAVERSE_detectRecursions, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Automatically detect POJO recursions.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>detectRecursions(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_detectRecursions}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder detectRecursions() {
+//		return set(BEANTRAVERSE_detectRecursions, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Ignore recursion errors.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, when we encounter the same object when serializing a tree, we set the value to <jk>null</jk>.
+//	 * Otherwise, an exception is thrown.
+//	 *
+//	 * <ul class='notes'>
+//	 * 	<li>
+//	 * 		Checking for recursion can cause a small performance penalty.
+//	 * </ul>
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_ignoreRecursions}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ignoreRecursions(boolean value) {
+//		return set(BEANTRAVERSE_ignoreRecursions, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Ignore recursion errors.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>ignoreRecursions(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_ignoreRecursions}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ignoreRecursions() {
+//		return set(BEANTRAVERSE_ignoreRecursions, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Initial depth.
+//	 *
+//	 * <p>
+//	 * The initial indentation level at the root.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_initialDepth}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <c>0</c>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder initialDepth(int value) {
+//		return set(BEANTRAVERSE_initialDepth, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Serializer listener.
+//	 *
+//	 * <p>
+//	 * Class used to listen for errors and warnings that occur during serialization.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_listener}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder listenerS(Class<? extends SerializerListener> value) {
+//		return set(SERIALIZER_listener, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Max serialization depth.
+//	 *
+//	 * <p>
+//	 * Abort serialization if specified depth is reached in the POJO tree.
+//	 * <br>If this depth is exceeded, an exception is thrown.
+//	 * <br>This prevents stack overflows from occurring when trying to serialize models with recursive references.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_maxDepth}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <c>100</c>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder maxDepth(int value) {
+//		return set(BEANTRAVERSE_maxDepth, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Sort arrays and collections alphabetically.
+//	 *
+//	 * <p>
+//	 * Copies and sorts the contents of arrays and collections before serializing them.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_sortCollections}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder sortCollections(boolean value) {
+//		return set(SERIALIZER_sortCollections, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Sort arrays and collections alphabetically.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>sortCollections(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_sortCollections}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder sortCollections() {
+//		return set(SERIALIZER_sortCollections, true);
+//	}
+//
+//	/**
+//	 * Sets the {@link Serializer#SERIALIZER_sortMaps} property on all serializers in this group.
+//	 *
+//	 * <p>
+//	 * Copies and sorts the contents of maps before serializing them.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_sortMaps}
+//	 * </ul>
+//	 *
+//	 * @param value The new value for this property.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder sortMaps(boolean value) {
+//		return set(SERIALIZER_sortMaps, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Sort maps alphabetically.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>sortMaps(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_sortMaps}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder sortMaps() {
+//		return set(SERIALIZER_sortMaps, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim empty lists and arrays.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, empty list values will not be serialized to the output.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimEmptyCollections(boolean value) {
+//		return set(SERIALIZER_trimEmptyCollections, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim empty lists and arrays.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>trimEmptyCollections(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimEmptyCollections() {
+//		return set(SERIALIZER_trimEmptyCollections, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim empty maps.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, empty map values will not be serialized to the output.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimEmptyMaps(boolean value) {
+//		return set(SERIALIZER_trimEmptyMaps, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim empty maps.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>trimEmptyMaps(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimEmptyMaps() {
+//		return set(SERIALIZER_trimEmptyMaps, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim null bean property values.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, null bean values will not be serialized to the output.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimNullProperties}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>true</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimNullProperties(boolean value) {
+//		return set(SERIALIZER_trimNullProperties, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim strings.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being serialized.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimStrings}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimStringsS(boolean value) {
+//		return set(SERIALIZER_trimStrings, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim strings.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_trimStrings}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimStringsS() {
+//		return set(SERIALIZER_trimStrings, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  URI context bean.
+//	 *
+//	 * <p>
+//	 * Bean used for resolution of URIs to absolute or root-relative form.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_uriContext}
+//	 * </ul>
+//	 *
+//	 * @param value The new value for this property.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder uriContext(UriContext value) {
+//		return set(SERIALIZER_uriContext, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  URI relativity.
+//	 *
+//	 * <p>
+//	 * Defines what relative URIs are relative to when serializing URI/URL objects.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_uriRelativity}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is {@link UriRelativity#RESOURCE}
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder uriRelativity(UriRelativity value) {
+//		return set(SERIALIZER_uriRelativity, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  URI resolution.
+//	 *
+//	 * <p>
+//	 * Defines the resolution level for URIs when serializing URI/URL objects.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Serializer#SERIALIZER_uriResolution}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is {@link UriResolution#NONE}
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder uriResolution(UriResolution value) {
+//		return set(SERIALIZER_uriResolution, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Maximum indentation.
+//	 *
+//	 * <p>
+//	 * Specifies the maximum indentation level in the serialized document.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link WriterSerializer#WSERIALIZER_maxIndent}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <c>100</c>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder maxIndent(int value) {
+//		return set(WSERIALIZER_maxIndent, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Quote character.
+//	 *
+//	 * <p>
+//	 * This is the character used for quoting attributes and values.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <js>'"'</js>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder quoteChar(char value) {
+//		return set(WSERIALIZER_quoteChar, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Quote character.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>quoteChar(<js>'\''</js>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder sq() {
+//		return set(WSERIALIZER_quoteChar, '\'');
+//	}
+//
+//	/**
+//	 * Configuration property:  Use whitespace.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, newlines and indentation and spaces are added to the output to improve readability.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link WriterSerializer#WSERIALIZER_useWhitespace}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder useWhitespace(boolean value) {
+//		return set(WSERIALIZER_useWhitespace, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Use whitespace.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link WriterSerializer#WSERIALIZER_useWhitespace}
+//	 * </ul>
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder useWhitespace() {
+//		return set(WSERIALIZER_useWhitespace, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Use whitespace.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link WriterSerializer#WSERIALIZER_useWhitespace}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder ws() {
+//		return set(WSERIALIZER_useWhitespace, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Binary string format.
+//	 *
+//	 * <p>
+//	 * When using the {@link Serializer#serializeToString(Object)} method on stream-based serializers, this defines the format to use
+//	 * when converting the resulting byte array to a string.
+//	 *
+//	 * <ul class='javatree'>
+//	 * 	<li class='jf'>{@link OutputStreamSerializer#OSSERIALIZER_binaryFormat}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default is {@link BinaryFormat#HEX}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder binaryOutputFormat(BinaryFormat value) {
+//		return set(OSSERIALIZER_binaryFormat, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Auto-close streams.
+//	 *
+//	 * If <jk>true</jk>, <l>InputStreams</l> and <l>Readers</l> passed into parsers will be closed
+//	 * after parsing is complete.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_autoCloseStreams}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder autoCloseStreams(boolean value) {
+//		return set(PARSER_autoCloseStreams, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Auto-close streams.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>autoCloseStreams(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_autoCloseStreams}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder autoCloseStreams() {
+//		return set(PARSER_autoCloseStreams, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Debug output lines.
+//	 *
+//	 * When parse errors occur, this specifies the number of lines of input before and after the
+//	 * error location to be printed as part of the exception message.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_debugOutputLines}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <c>5</c>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder debugOutputLines(int value) {
+//		set(PARSER_debugOutputLines, value);
+//		return this;
+//	}
+//
+//	/**
+//	 * Configuration property:  Parser listener.
+//	 *
+//	 * <p>
+//	 * Class used to listen for errors and warnings that occur during parsing.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_listener}
+//	 * </ul>
+//	 *
+//	 * @param value The new value for this property.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder listenerP(Class<? extends ParserListener> value) {
+//		return set(PARSER_listener, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Strict mode.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, strict mode for the parser is enabled.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_strict}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder strict(boolean value) {
+//		return set(PARSER_strict, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Strict mode.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>strict(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_strict}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder strict() {
+//		return set(PARSER_strict, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim parsed strings.
+//	 *
+//	 * <p>
+//	 * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to
+//	 * the POJO.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_trimStrings}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimStringsP(boolean value) {
+//		return set(PARSER_trimStrings, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Trim parsed strings.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_trimStrings}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder trimStringsP() {
+//		return set(PARSER_trimStrings, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  Unbuffered.
+//	 *
+//	 * If <jk>true</jk>, don't use internal buffering during parsing.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_unbuffered}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <jk>false</jk>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder unbuffered(boolean value) {
+//		return set(PARSER_unbuffered, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Unbuffered.
+//	 *
+//	 * <p>
+//	 * Shortcut for calling <code>unbuffered(<jk>true</jk>)</code>.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link Parser#PARSER_unbuffered}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder unbuffered() {
+//		return set(PARSER_unbuffered, true);
+//	}
+//
+//	/**
+//	 * Configuration property:  File charset.
+//	 *
+//	 * <p>
+//	 * The character set to use for reading <c>Files</c> from the file system.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link ReaderParser#RPARSER_fileCharset}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <js>"DEFAULT"</js> which causes the system default to be used.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder fileCharset(String value) {
+//		return set(RPARSER_fileCharset, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Input stream charset.
+//	 *
+//	 * <p>
+//	 * The character set to use for converting <c>InputStreams</c> and byte arrays to readers.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link ReaderParser#RPARSER_streamCharset}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is <js>"UTF-8"</js>.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder inputStreamCharset(String value) {
+//		return set(RPARSER_streamCharset, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Binary input format.
+//	 *
+//	 * <p>
+//	 * When using the {@link Parser#parse(Object,Class)} method on stream-based parsers and the input is a string, this defines the format to use
+//	 * when converting the string into a byte array.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link InputStreamParser#ISPARSER_binaryFormat}
+//	 * </ul>
+//	 *
+//	 * @param value
+//	 * 	The new value for this property.
+//	 * 	<br>The default value is {@link BinaryFormat#HEX}.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder binaryInputFormat(BinaryFormat value) {
+//		return set(ISPARSER_binaryFormat, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Parameter format.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link UonSerializer#UON_paramFormat}
+//	 * </ul>
+//	 *
+//	 * @param value The new value for this property.
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder paramFormat(String value) {
+//		return set(UON_paramFormat, value);
+//	}
+//
+//	/**
+//	 * Configuration property:  Parameter format.
+//	 *
+//	 * <ul class='seealso'>
+//	 * 	<li class='jf'>{@link UonSerializer#UON_paramFormat}
+//	 * </ul>
+//	 *
+//	 * @return This object (for method chaining).
+//	 */
+//	@ConfigurationProperty
+//	public RestClientBuilder paramFormatPlain() {
+//		return set(UON_paramFormat, "PLAINTEXT");
+//	}
+//
+//	// <CONFIGURATION-PROPERTIES>
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder add(Map<String,Object> properties) {
+//		super.add(properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder addTo(String name, Object value) {
+//		super.addTo(name, value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder addTo(String name, String key, Object value) {
+//		super.addTo(name, key, value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder apply(PropertyStore copyFrom) {
+//		super.apply(copyFrom);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder applyAnnotations(java.lang.Class<?>...fromClasses) {
+//		super.applyAnnotations(fromClasses);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder applyAnnotations(Method...fromMethods) {
+//		super.applyAnnotations(fromMethods);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder applyAnnotations(AnnotationList al, VarResolverSession r) {
+//		super.applyAnnotations(al, r);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder removeFrom(String name, Object value) {
+//		super.removeFrom(name, value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder set(Map<String,Object> properties) {
+//		super.set(properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - ContextBuilder */
+//	public RestClientBuilder set(String name, Object value) {
+//		super.set(name, value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder annotations(Annotation...values) {
+//		super.annotations(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanClassVisibility(Visibility value) {
+//		super.beanClassVisibility(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanConstructorVisibility(Visibility value) {
+//		super.beanConstructorVisibility(value);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanDictionary(java.lang.Class<?>...values) {
+//		super.beanDictionary(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanDictionary(Object...values) {
+//		super.beanDictionary(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanDictionaryRemove(java.lang.Class<?>...values) {
+//		super.beanDictionaryRemove(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanDictionaryRemove(Object...values) {
+//		super.beanDictionaryRemove(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanDictionaryReplace(java.lang.Class<?>...values) {
+//		super.beanDictionaryReplace(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanDictionaryReplace(Object...values) {
+//		super.beanDictionaryReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFieldVisibility(Visibility value) {
+//		super.beanFieldVisibility(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFilters(java.lang.Class<?>...values) {
+//		super.beanFilters(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFilters(Object...values) {
+//		super.beanFilters(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFiltersRemove(java.lang.Class<?>...values) {
+//		super.beanFiltersRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFiltersRemove(Object...values) {
+//		super.beanFiltersRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFiltersReplace(java.lang.Class<?>...values) {
+//		super.beanFiltersReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanFiltersReplace(Object...values) {
+//		super.beanFiltersReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanMapPutReturnsOldValue() {
+//		super.beanMapPutReturnsOldValue();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanMapPutReturnsOldValue(boolean value) {
+//		super.beanMapPutReturnsOldValue(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanMethodVisibility(Visibility value) {
+//		super.beanMethodVisibility(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beanTypePropertyName(String value) {
+//		super.beanTypePropertyName(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansDontRequireSomeProperties() {
+//		super.beansDontRequireSomeProperties();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireDefaultConstructor() {
+//		super.beansRequireDefaultConstructor();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireDefaultConstructor(boolean value) {
+//		super.beansRequireDefaultConstructor(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireSerializable() {
+//		super.beansRequireSerializable();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireSerializable(boolean value) {
+//		super.beansRequireSerializable(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireSettersForGetters() {
+//		super.beansRequireSettersForGetters();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireSettersForGetters(boolean value) {
+//		super.beansRequireSettersForGetters(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder beansRequireSomeProperties(boolean value) {
+//		super.beansRequireSomeProperties(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpi(Map<String,String> values) {
+//		super.bpi(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpi(Class<?> beanClass, String properties) {
+//		super.bpi(beanClass, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpi(String beanClassName, String properties) {
+//		super.bpi(beanClassName, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpro(Map<String,String> values) {
+//		super.bpro(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpro(Class<?> beanClass, String properties) {
+//		super.bpro(beanClass, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpro(String beanClassName, String properties) {
+//		super.bpro(beanClassName, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpwo(Map<String,String> values) {
+//		super.bpwo(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpwo(Class<?> beanClass, String properties) {
+//		super.bpwo(beanClass, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpwo(String beanClassName, String properties) {
+//		super.bpwo(beanClassName, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpx(Map<String,String> values) {
+//		super.bpx(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpx(Class<?> beanClass, String properties) {
+//		super.bpx(beanClass, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder bpx(String beanClassName, String properties) {
+//		super.bpx(beanClassName, properties);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder debug() {
+//		super.debug();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder debug(boolean value) {
+//		super.debug(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dictionary(java.lang.Class<?>...values) {
+//		super.dictionary(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dictionary(Object...values) {
+//		super.dictionary(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dictionaryRemove(java.lang.Class<?>...values) {
+//		super.dictionaryRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dictionaryRemove(Object...values) {
+//		super.dictionaryRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dictionaryReplace(java.lang.Class<?>...values) {
+//		super.dictionaryReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dictionaryReplace(Object...values) {
+//		super.dictionaryReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dontIgnorePropertiesWithoutSetters() {
+//		super.dontIgnorePropertiesWithoutSetters();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dontIgnoreTransientFields() {
+//		super.dontIgnoreTransientFields();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dontIgnoreUnknownNullBeanProperties() {
+//		super.dontIgnoreUnknownNullBeanProperties();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder dontUseInterfaceProxies() {
+//		super.dontUseInterfaceProxies();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public <T> RestClientBuilder example(Class<T> pojoClass, T o) {
+//		super.example(pojoClass, o);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public <T> RestClientBuilder exampleJson(Class<T> pojoClass, String json) {
+//		super.exampleJson(pojoClass, json);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder examples(String json) {
+//		super.examples(json);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder excludeProperties(Map<String,String> values) {
+//		super.excludeProperties(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder excludeProperties(Class<?> beanClass, String properties) {
+//		super.excludeProperties(beanClass, properties);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder excludeProperties(String beanClassName, String value) {
+//		super.excludeProperties(beanClassName, value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder fluentSetters() {
+//		super.fluentSetters();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder fluentSetters(boolean value) {
+//		super.fluentSetters(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreInvocationExceptionsOnGetters() {
+//		super.ignoreInvocationExceptionsOnGetters();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+//		super.ignoreInvocationExceptionsOnGetters(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreInvocationExceptionsOnSetters() {
+//		super.ignoreInvocationExceptionsOnSetters();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+//		super.ignoreInvocationExceptionsOnSetters(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignorePropertiesWithoutSetters(boolean value) {
+//		super.ignorePropertiesWithoutSetters(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreTransientFields(boolean value) {
+//		super.ignoreTransientFields(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreUnknownBeanProperties() {
+//		super.ignoreUnknownBeanProperties();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreUnknownBeanProperties(boolean value) {
+//		super.ignoreUnknownBeanProperties(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder ignoreUnknownNullBeanProperties(boolean value) {
+//		super.ignoreUnknownNullBeanProperties(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder implClass(Class<?> interfaceClass, Class<?> implClass) {
+//		super.implClass(interfaceClass, implClass);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder implClasses(Map<String,Class<?>> values) {
+//		super.implClasses(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder includeProperties(Map<String,String> values) {
+//		super.includeProperties(values);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder includeProperties(Class<?> beanClass, String value) {
+//		super.includeProperties(beanClass, value);
+//		return this;
+//	}
+//
+//	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder includeProperties(String beanClassName, String value) {
+//		super.includeProperties(beanClassName, value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder locale(Locale value) {
+//		super.locale(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder mediaType(MediaType value) {
+//		super.mediaType(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanClasses(java.lang.Class<?>...values) {
+//		super.notBeanClasses(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanClasses(Object...values) {
+//		super.notBeanClasses(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanClassesRemove(java.lang.Class<?>...values) {
+//		super.notBeanClassesRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanClassesRemove(Object...values) {
+//		super.notBeanClassesRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanClassesReplace(java.lang.Class<?>...values) {
+//		super.notBeanClassesReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanClassesReplace(Object...values) {
+//		super.notBeanClassesReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanPackages(Object...values) {
+//		super.notBeanPackages(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanPackages(String...values) {
+//		super.notBeanPackages(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanPackagesRemove(Object...values) {
+//		super.notBeanPackagesRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanPackagesRemove(String...values) {
+//		super.notBeanPackagesRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanPackagesReplace(Object...values) {
+//		super.notBeanPackagesReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder notBeanPackagesReplace(String...values) {
+//		super.notBeanPackagesReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder pojoSwaps(java.lang.Class<?>...values) {
+//		super.pojoSwaps(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder pojoSwaps(Object...values) {
+//		super.pojoSwaps(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder pojoSwapsRemove(java.lang.Class<?>...values) {
+//		super.pojoSwapsRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder pojoSwapsRemove(Object...values) {
+//		super.pojoSwapsRemove(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder pojoSwapsReplace(java.lang.Class<?>...values) {
+//		super.pojoSwapsReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder pojoSwapsReplace(Object...values) {
+//		super.pojoSwapsReplace(values);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder propertyNamer(Class<? extends org.apache.juneau.PropertyNamer> value) {
+//		super.propertyNamer(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder sortProperties() {
+//		super.sortProperties();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder sortProperties(boolean value) {
+//		super.sortProperties(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder timeZone(TimeZone value) {
+//		super.timeZone(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder useEnumNames() {
+//		super.useEnumNames();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder useEnumNames(boolean value) {
+//		super.useEnumNames(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder useInterfaceProxies(boolean value) {
+//		super.useInterfaceProxies(value);
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder useJavaBeanIntrospector() {
+//		super.useJavaBeanIntrospector();
+//		return this;
+//	}
+//
+//	@Override /* GENERATED - BeanContextBuilder */
+//	public RestClientBuilder useJavaBeanIntrospector(boolean value) {
+//		super.useJavaBeanIntrospector(value);
+//		return this;
+//	}
+//
+
+
+}
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
index 3be13ca..2498b06 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
@@ -651,10 +651,10 @@ import org.apache.http.client.CookieStore;
  * 		<li class='jm'><c>{@link RestResponseHeader#assertExists() assertExists()} <jk>returns</jk> {@link RestResponse}</c>
  * 		<li class='jm'><c>{@link RestResponseHeader#assertValue(String) assertValue(String)} <jk>returns</jk> {@link RestResponse}</c>
  * 		<li class='jm'><c>{@link RestResponseHeader#assertValue(Predicate) assertValue(Predicate&lt;String&gt;)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseHeader#assertValueContains(String...) assertValueContains(String...)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseHeader#assertValueMatches(String) assertValueMatches(String)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseHeader#assertValueMatches(String,int) assertValueMatches(String,int)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseHeader#assertValueMatches(Pattern) assertValueMatches(Pattern)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseHeader#assertContains(String...) assertContains(String...)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseHeader#assertMatches(String) assertMatches(String)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseHeader#assertMatches(String,int) assertMatches(String,int)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseHeader#assertMatches(Pattern) assertMatches(Pattern)} <jk>returns</jk> {@link RestResponse}</c>
  * 	</ul>
  * </ul>
  *
@@ -715,11 +715,11 @@ import org.apache.http.client.CookieStore;
  * 		<li class='jm'><c>{@link RestResponseBody#asMatcher(String,int) asMatcher(String,int)} <jk>returns</jk> {@link Matcher}</c>
  * 		<li class='jm'><c>{@link RestResponseBody#asMatcher(Mutable,String,int) asMatcher(Mutable&lt;Matcher&gt;,String,int)} <jk>returns</jk> {@link RestResponse}</c>
  * 		<li class='jm'><c>{@link RestResponseBody#assertValue(String) assertValue(String)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseBody#assertValueContains(String...) assertValueContains(String...)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseBody#assertContains(String...) assertContains(String...)} <jk>returns</jk> {@link RestResponse}</c>
  * 		<li class='jm'><c>{@link RestResponseBody#assertValue(Predicate) assertValue(Predicate&lt;String&gt;)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseBody#assertValueMatches(String) assertValueMatches(String)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseBody#assertValueMatches(String,int) assertValueMatches(String,int)} <jk>returns</jk> {@link RestResponse}</c>
- * 		<li class='jm'><c>{@link RestResponseBody#assertValueMatches(Pattern) assertValueMatches(Pattern)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseBody#assertMatches(String) assertMatches(String)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseBody#assertMatches(String,int) assertMatches(String,int)} <jk>returns</jk> {@link RestResponse}</c>
+ * 		<li class='jm'><c>{@link RestResponseBody#assertMatches(Pattern) assertMatches(Pattern)} <jk>returns</jk> {@link RestResponse}</c>
  * 	</ul>
  * </ul>
  *
@@ -1316,7 +1316,7 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 	 * <p>
 	 * Interceptors that get called immediately after a connection is made.
 	 */
-	public static final String RESTCLIENT_interceptors = PREFIX + "interceptors.so";
+	public static final String RESTCLIENT_interceptors = PREFIX + "interceptors.lo";
 
 	/**
 	 * Add to the Call interceptors property.
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
index 7966e94..542fae3 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java
@@ -105,7 +105,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 */
 	protected RestClientBuilder(PropertyStore ps, HttpClientBuilder httpClientBuilder) {
 		super(ps);
-		this.httpClientBuilder = httpClientBuilder != null ? httpClientBuilder : createHttpClientBuilder();
+		this.httpClientBuilder = httpClientBuilder != null ? httpClientBuilder : getHttpClientBuilder();
 	}
 
 	@Override /* ContextBuilder */
@@ -345,9 +345,8 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * {@link #createHttpClientBuilder()}.
 	 *
 	 * @return The HTTP client to use.
-	 * @throws Exception Error occurred.
 	 */
-	protected CloseableHttpClient createHttpClient() throws Exception {
+	protected CloseableHttpClient createHttpClient() {
 		// Don't call createConnectionManager() if RestClient.setConnectionManager() was called.
 		if (httpClientConnectionManager == null)
 			httpClientBuilder.setConnectionManager(createConnectionManager());
@@ -362,11 +361,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * @return The {@link HttpClient} to be used to handle all HTTP communications with the target server.
 	 */
 	public CloseableHttpClient getHttpClient() {
-		try {
-			return httpClient != null ? httpClient : createHttpClient();
-		} catch (Exception e) {
-			throw new RuntimeException(e);
-		}
+		return httpClient != null ? httpClient : createHttpClient();
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java
index 6917d3a..00a254c 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java
@@ -177,9 +177,9 @@ public class RestResponseBody implements HttpEntity {
 	 * 	<li class='jm'>{@link #asPojoRest(Mutable,Class) asPojoRest(Mutable,Class)}
 	 * 	<li class='jm'>{@link #assertValue(Predicate) assertValue(Predicate)}
 	 * 	<li class='jm'>{@link #assertValue(String) assertValue(String)}
-	 * 	<li class='jm'>{@link #assertValueContains(String...) assertValueContains(String...)}
-	 * 	<li class='jm'>{@link #assertValueMatches(Pattern) assertValueMatches(Pattern)}
-	 * 	<li class='jm'>{@link #assertValueMatches(String) assertValueMatches(String)}
+	 * 	<li class='jm'>{@link #assertContains(String...) assertContains(String...)}
+	 * 	<li class='jm'>{@link #assertMatches(Pattern) assertMatches(Pattern)}
+	 * 	<li class='jm'>{@link #assertMatches(String) assertMatches(String)}
 	 * 	<li class='jm'>{@link #asString() asString()}
 	 * 	<li class='jm'>{@link #asString(Mutable) asString(Mutable)}
 	 * 	<li class='jm'>{@link #asStringFuture() asStringFuture()}
@@ -1579,11 +1579,11 @@ public class RestResponseBody implements HttpEntity {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion fails.
 	 */
-	public RestResponse assertValueContains(String...values) throws RestCallException {
+	public RestResponse assertContains(String...values) throws RestCallException {
 		String text = asString();
 		for (String substring : values)
 			if (! StringUtils.contains(text, substring))
-				throw new RestCallException("Response did not have the expected substring for body.\n\tExpected=[{0}]\n\tHeader=[{1}]", substring, text);
+				throw new RestCallException("Response did not have the expected substring for body.\n\tExpected=[{0}]\n\tBody=[{1}]", substring, text);
 		return response;
 	}
 
@@ -1648,8 +1648,8 @@ public class RestResponseBody implements HttpEntity {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion fails.
 	 */
-	public RestResponse assertValueMatches(String regex) throws RestCallException {
-		return assertValueMatches(regex, 0);
+	public RestResponse assertMatches(String regex) throws RestCallException {
+		return assertMatches(regex, 0);
 	}
 
 	/**
@@ -1680,7 +1680,7 @@ public class RestResponseBody implements HttpEntity {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion fails.
 	 */
-	public RestResponse assertValueMatches(String regex, int flags) throws RestCallException {
+	public RestResponse assertMatches(String regex, int flags) throws RestCallException {
 		String text = asString();
 		Pattern p = Pattern.compile(regex, flags);
 		if (! p.matcher(text).matches())
@@ -1716,7 +1716,7 @@ public class RestResponseBody implements HttpEntity {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion fails.
 	 */
-	public RestResponse assertValueMatches(Pattern pattern) throws RestCallException {
+	public RestResponse assertMatches(Pattern pattern) throws RestCallException {
 		String text = asString();
 		if (! pattern.matcher(text).matches())
 			throw new RestCallException("Response did not match expected pattern.\n\tpattern=[{0}]\n\tBody=[{1}]", pattern.pattern(), text);
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
index a5bbaaa..b7a0389 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
@@ -589,7 +589,7 @@ public class RestResponseHeader implements Header {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion failed.
 	 */
-	public RestResponse assertValueContains(String...values) throws RestCallException {
+	public RestResponse assertContains(String...values) throws RestCallException {
 		String text = asString();
 		for (String substring : values)
 			if (! StringUtils.contains(text, substring))
@@ -613,8 +613,8 @@ public class RestResponseHeader implements Header {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion failed.
 	 */
-	public RestResponse assertValueMatches(String regex) throws RestCallException {
-		return assertValueMatches(regex, 0);
+	public RestResponse assertMatches(String regex) throws RestCallException {
+		return assertMatches(regex, 0);
 	}
 
 	/**
@@ -634,7 +634,7 @@ public class RestResponseHeader implements Header {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion failed.
 	 */
-	public RestResponse assertValueMatches(String regex, int flags) throws RestCallException {
+	public RestResponse assertMatches(String regex, int flags) throws RestCallException {
 		String text = asString();
 		if (! Pattern.compile(regex, flags).matcher(text).matches())
 			throw new RestCallException("Response did not match expected pattern in header {0}.\n\tpattern=[{1}]\n\tHeader=[{2}]", getName(), regex, text);
@@ -661,7 +661,7 @@ public class RestResponseHeader implements Header {
 	 * @return The response object (for method chaining).
 	 * @throws RestCallException If assertion failed.
 	 */
-	public RestResponse assertValueMatches(Pattern pattern) throws RestCallException {
+	public RestResponse assertMatches(Pattern pattern) throws RestCallException {
 		String text = asString();
 		if (! pattern.matcher(text).matches())
 			throw new RestCallException("Response did not match expected pattern in header {0}.\n\tpattern=[{1}]\n\tHeader=[{2}]", getName(), pattern.pattern(), text);
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockLogger.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockLogger.java
new file mode 100644
index 0000000..4958a4e
--- /dev/null
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockLogger.java
@@ -0,0 +1,96 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              *
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "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.mock2;
+
+import java.util.logging.*;
+
+/**
+ * Simplified logger for intercepting and asserting logging messages.
+ */
+public class MockLogger extends Logger {
+
+	private volatile LogRecord logRecord;
+
+	/**
+	 * Constructor.
+	 */
+	public MockLogger() {
+		super("Mock", null);
+	}
+
+	@Override /* Logger */
+	public synchronized void log(LogRecord record) {
+		this.logRecord = record;
+	}
+
+	/**
+	 * Resets this logger.
+	 *
+	 * @return This object (for method chaining).
+	 */
+	public synchronized MockLogger reset() {
+		this.logRecord = null;
+		return this;
+	}
+
+	/**
+	 * Asserts that this logger was called.
+	 *
+	 * @return This object (for method chaining).
+	 */
+	public synchronized MockLogger assertLogged() {
+		if (logRecord == null)
+			throw new AssertionError("Message not logged");
+		return this;
+	}
+
+	/**
+	 * Asserts that the last message was logged at the specified level.
+	 *
+	 * @param level The level to match against.
+	 * @return This object (for method chaining).
+	 */
+	public synchronized MockLogger assertLevel(Level level) {
+		assertLogged();
+		if (logRecord.getLevel() != level)
+			throw new AssertionError("Message logged at [" + logRecord.getLevel() + "] instead of [" + level + "]");
+		return this;
+	}
+
+	/**
+	 * Asserts that the last message matched the specified message.
+	 *
+	 * @param message The message to search for.
+	 * @return This object (for method chaining).
+	 */
+	public synchronized MockLogger assertMessage(String message) {
+		assertLogged();
+		if (! logRecord.getMessage().equals(message))
+			throw new AssertionError("Message was not [" + message + "].  Message=[" + logRecord.getMessage() + "]");
+		return this;
+	}
+
+	/**
+	 * Asserts that the last message contained the specified text.
+	 *
+	 * @param messages The messages to search for.
+	 * @return This object (for method chaining).
+	 */
+	public synchronized MockLogger assertMessageContains(String...messages) {
+		assertLogged();
+		for (String m : messages)
+			if (! logRecord.getMessage().contains(m))
+				throw new AssertionError("Message did not contain [" + m + "].  Message=[" + logRecord.getMessage() + "]");
+		return this;
+	}
+}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
index 84de204..1e841d4 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
@@ -448,7 +448,7 @@ final class SwaggerGenerator {
 						ResponseHeader a = ecmi.getLastAnnotation(ResponseHeader.class);
 						if (a == null)
 							a = ecmi.getResolvedReturnType().getLastAnnotation(ResponseHeader.class);
-						if (a != null) {
+						if (a != null && ! isMulti(a)) {
 							String ha = a.name();
 							for (Integer code : codes) {
 								ObjectMap header = responses.getObjectMap(String.valueOf(code), true).getObjectMap("headers", true).getObjectMap(ha, true);
@@ -477,10 +477,12 @@ final class SwaggerGenerator {
 						if (ecmi.hasAnnotation(ResponseHeader.class)) {
 							ResponseHeader a = ecmi.getLastAnnotation(ResponseHeader.class);
 							String ha = a.name();
-							for (Integer code : codes) {
-								ObjectMap header = responses.getObjectMap(String.valueOf(code), true).getObjectMap("headers", true).getObjectMap(ha, true);
-								merge(header, a);
-								mergePartSchema(header, getSchema(header, ecmi.getReturnType().innerType(), bs));
+							if (! isMulti(a)) {
+								for (Integer code : codes) {
+									ObjectMap header = responses.getObjectMap(String.valueOf(code), true).getObjectMap("headers", true).getObjectMap(ha, true);
+									merge(header, a);
+									mergePartSchema(header, getSchema(header, ecmi.getReturnType().innerType(), bs));
+								}
 							}
 						}
 					}
@@ -502,10 +504,12 @@ final class SwaggerGenerator {
 					List<ResponseHeader> la = mpi.getAnnotations(ResponseHeader.class);
 					Set<Integer> codes = getCodes2(la, 200);
 					for (ResponseHeader a : la) {
-						for (Integer code : codes) {
-							ObjectMap header = responses.getObjectMap(String.valueOf(code), true).getObjectMap("headers", true).getObjectMap(mp.name, true);
-							merge(header, a);
-							mergePartSchema(header, getSchema(header, Value.getParameterType(mp.type), bs));
+						if (! isMulti(a)) {
+							for (Integer code : codes) {
+								ObjectMap header = responses.getObjectMap(String.valueOf(code), true).getObjectMap("headers", true).getObjectMap(mp.name, true);
+								merge(header, a);
+								mergePartSchema(header, getSchema(header, Value.getParameterType(mp.type), bs));
+							}
 						}
 					}
 
@@ -590,6 +594,12 @@ final class SwaggerGenerator {
 	// Utility methods
 	//=================================================================================================================
 
+	private boolean isMulti(ResponseHeader h) {
+		if ("*".equals(h.name()) || "*".equals(h.value()))
+			return true;
+		return false;
+	}
+
 	private ObjectMap resolve(ObjectMap om) throws ParseException {
 		ObjectMap om2 = null;
 		if (om.containsKey("_value")) {