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/05/14 18:13:25 UTC

[juneau] branch master updated: RestClient improvements.

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

commit b6401446d6d304b979210070d4534f8c8372f9b8
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Thu May 14 14:12:59 2020 -0400

    RestClient improvements.
---
 .../org/apache/juneau/jena/RdfParserBuilder.java   |    8 +-
 .../apache/juneau/jena/RdfSerializerBuilder.java   |    8 +-
 .../src/main/java/org/apache/juneau}/AddFlag.java  |    2 +-
 .../java/org/apache/juneau/BeanContextBuilder.java |   24 +-
 .../org/apache/juneau/BeanTraverseBuilder.java     |    8 +-
 .../java/org/apache/juneau/ContextBuilder.java     |    4 +
 .../main/java/org/apache/juneau/DetailLevel.java   |   77 +-
 .../org/apache/juneau/csv/CsvParserBuilder.java    |    8 +-
 .../apache/juneau/csv/CsvSerializerBuilder.java    |    8 +-
 .../juneau/html/HtmlDocSerializerBuilder.java      |    8 +-
 .../org/apache/juneau/html/HtmlParserBuilder.java  |    8 +-
 .../juneau/html/HtmlSchemaSerializerBuilder.java   |    8 +-
 .../apache/juneau/html/HtmlSerializerBuilder.java  |    8 +-
 .../html/HtmlStrippedDocSerializerBuilder.java     |    8 +-
 .../juneau/http/exception/HttpException.java       |    4 +
 .../apache/juneau/http/response/HttpResponse.java  |    4 +
 .../juneau/internal/ConfigurationProperty.java     |    3 +
 .../org/apache/juneau/jso/JsoParserBuilder.java    |    8 +-
 .../apache/juneau/jso/JsoSerializerBuilder.java    |    8 +-
 .../org/apache/juneau/json/JsonParserBuilder.java  |    8 +-
 .../juneau/json/JsonSchemaSerializerBuilder.java   |  954 ++++++++-------
 .../apache/juneau/json/JsonSerializerBuilder.java  |    8 +-
 .../juneau/json/SimpleJsonParserBuilder.java       |    8 +-
 .../juneau/json/SimpleJsonSerializerBuilder.java   |    8 +-
 .../jsonschema/JsonSchemaGeneratorBuilder.java     |    8 +-
 .../juneau/msgpack/MsgPackParserBuilder.java       |    8 +-
 .../juneau/msgpack/MsgPackSerializerBuilder.java   |    8 +-
 .../apache/juneau/oapi/OpenApiParserBuilder.java   |    8 +-
 .../juneau/oapi/OpenApiSerializerBuilder.java      |    8 +-
 .../juneau/parser/InputStreamParserBuilder.java    |    8 +-
 .../org/apache/juneau/parser/ParserBuilder.java    |    8 +-
 .../apache/juneau/parser/ParserGroupBuilder.java   |    8 +-
 .../apache/juneau/parser/ReaderParserBuilder.java  |    8 +-
 .../juneau/plaintext/PlainTextParserBuilder.java   |    8 +-
 .../plaintext/PlainTextSerializerBuilder.java      |    8 +-
 .../serializer/OutputStreamSerializerBuilder.java  |    8 +-
 .../juneau/serializer/SerializerBuilder.java       |    8 +-
 .../juneau/serializer/SerializerGroupBuilder.java  |    8 +-
 .../juneau/serializer/WriterSerializerBuilder.java |    8 +-
 .../juneau/soap/SoapXmlSerializerBuilder.java      |    8 +-
 .../org/apache/juneau/uon/UonParserBuilder.java    |    8 +-
 .../apache/juneau/uon/UonSerializerBuilder.java    |    8 +-
 .../urlencoding/UrlEncodingParserBuilder.java      |    8 +-
 .../urlencoding/UrlEncodingSerializerBuilder.java  |    8 +-
 .../org/apache/juneau/xml/XmlParserBuilder.java    |    8 +-
 .../apache/juneau/xml/XmlSerializerBuilder.java    |    8 +-
 .../xmlschema/XmlSchemaSerializerBuilder.java      |    8 +-
 juneau-doc/src/main/javadoc/overview.html          |  529 +++++++--
 juneau-doc/src/main/javadoc/resources/docs.txt     |    2 +-
 .../src/main/javadoc/resources/fragments/toc.html  |    6 +-
 .../src/main/javadoc/resources/juneau-doc.css      |    4 +
 .../apache/juneau/rest/test/TestMicroservice.java  |    3 +-
 .../apache/juneau/rest/client2/RestClientTest.java |   53 +-
 .../apache/juneau/rest/client/RestCallLogger.java  |    2 -
 .../juneau/rest/client/RestClientBuilder.java      |   12 +-
 .../org/apache/juneau/rest/client2/RestClient.java |  231 +++-
 .../juneau/rest/client2/RestClientBuilder.java     | 1223 +++++++++++++++++---
 .../juneau/rest/client2/RestClientUtils.java       |    3 +-
 .../apache/juneau/rest/client2/RestRequest.java    |   37 +-
 .../apache/juneau/rest/client2/RestResponse.java   |   42 +
 .../juneau/rest/client2/RestResponseBody.java      |    5 +-
 .../rest/client2/logging/BasicRestCallLogger.java  |   62 -
 .../rest/client2/logging/RestCallLogger.java       |  116 --
 .../juneau/rest/client2/logging/package-info.java  |   18 -
 .../org/apache/juneau/rest/mock2/MockRemote.java   |    2 +-
 .../apache/juneau/rest/mock2/MockRestClient.java   |   63 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |    8 +-
 .../juneau/rest/RestMethodContextBuilder.java      |  687 +++++++++++
 68 files changed, 3315 insertions(+), 1177 deletions(-)

diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
index 4d2aaa6..848b359 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
@@ -1003,7 +1003,7 @@ public class RdfParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfParserBuilder bpi(Map<String,String> values) {
+	public RdfParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -1021,7 +1021,7 @@ public class RdfParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfParserBuilder bpro(Map<String,String> values) {
+	public RdfParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -1039,7 +1039,7 @@ public class RdfParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfParserBuilder bpwo(Map<String,String> values) {
+	public RdfParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -1057,7 +1057,7 @@ public class RdfParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfParserBuilder bpx(Map<String,String> values) {
+	public RdfParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index 8269c9c..8e6fb61 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -1163,7 +1163,7 @@ public class RdfSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfSerializerBuilder bpi(Map<String,String> values) {
+	public RdfSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -1181,7 +1181,7 @@ public class RdfSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfSerializerBuilder bpro(Map<String,String> values) {
+	public RdfSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -1199,7 +1199,7 @@ public class RdfSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfSerializerBuilder bpwo(Map<String,String> values) {
+	public RdfSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -1217,7 +1217,7 @@ public class RdfSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RdfSerializerBuilder bpx(Map<String,String> values) {
+	public RdfSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/AddFlag.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AddFlag.java
similarity index 98%
rename from juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/AddFlag.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AddFlag.java
index 9695e70..cbc4444 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/AddFlag.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/AddFlag.java
@@ -10,7 +10,7 @@
 // * "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;
+package org.apache.juneau;
 
 import java.util.*;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index 29c5f85..fae1f0b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -748,9 +748,9 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public BeanContextBuilder bpi(Map<String,String> values) {
-		for (Map.Entry<String,String> e : values.entrySet())
-			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpi(e.getValue()));
+	public BeanContextBuilder bpi(Map<String,Object> values) {
+		for (Map.Entry<String,Object> e : values.entrySet())
+			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpi(asString(e.getValue())));
 		return this;
 	}
 
@@ -812,9 +812,9 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public BeanContextBuilder bpx(Map<String,String> values) {
-		for (Map.Entry<String,String> e : values.entrySet())
-			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpx(e.getValue()));
+	public BeanContextBuilder bpx(Map<String,Object> values) {
+		for (Map.Entry<String,Object> e : values.entrySet())
+			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpx(asString(e.getValue())));
 		return this;
 	}
 
@@ -873,9 +873,9 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public BeanContextBuilder bpro(Map<String,String> values) {
-		for (Map.Entry<String,String> e : values.entrySet())
-			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpro(e.getValue()));
+	public BeanContextBuilder bpro(Map<String,Object> values) {
+		for (Map.Entry<String,Object> e : values.entrySet())
+			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpro(asString(e.getValue())));
 		return this;
 	}
 
@@ -937,9 +937,9 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public BeanContextBuilder bpwo(Map<String,String> values) {
-		for (Map.Entry<String,String> e : values.entrySet())
-			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpwo(e.getValue()));
+	public BeanContextBuilder bpwo(Map<String,Object> values) {
+		for (Map.Entry<String,Object> e : values.entrySet())
+			psb.prependTo(BEAN_annotations, new BeanAnnotation(e.getKey()).bpwo(asString(e.getValue())));
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
index 7dbac99..ad496ea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
@@ -507,7 +507,7 @@ public class BeanTraverseBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public BeanTraverseBuilder bpi(Map<String,String> values) {
+	public BeanTraverseBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -525,7 +525,7 @@ public class BeanTraverseBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public BeanTraverseBuilder bpro(Map<String,String> values) {
+	public BeanTraverseBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -543,7 +543,7 @@ public class BeanTraverseBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public BeanTraverseBuilder bpwo(Map<String,String> values) {
+	public BeanTraverseBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -561,7 +561,7 @@ public class BeanTraverseBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public BeanTraverseBuilder bpx(Map<String,String> values) {
+	public BeanTraverseBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index c69a5be..82336a5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -378,4 +378,8 @@ public abstract class ContextBuilder {
 		psb.removeFrom(name, value);
 		return this;
 	}
+
+	// <CONFIGURATION-PROPERTIES>
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/DetailLevel.java
similarity index 61%
rename from juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/DetailLevel.java
index 18adc37..f9f3cb7 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/DetailLevel.java
@@ -1,49 +1,28 @@
-// ***************************************************************************************************************************
-// * 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.logging;
-
-import org.apache.juneau.rest.client2.*;
-
-/**
- * Specialized interceptor for logging calls to the console.
- *
- * <p>
- * Causes a log entry to be created in the console that shows all the request and response headers and content at the end of the
- * request.
- */
-public class ConsoleRestCallLogger extends RestCallLogger {
-
-	/**
-	 * Default HTTP request logger.
-	 * <p>
-	 * Logs outgoing HTTP requests to the <c>org.apache.juneau.rest.client</c> logger at <jsf>WARNING</jsf> level.
-	 */
-	public static final ConsoleRestCallLogger DEFAULT = new ConsoleRestCallLogger();
-
-	/**
-	 * Constructor.
-	 */
-	public ConsoleRestCallLogger() {}
-
-	@Override
-	public boolean shouldLog(RestRequest req, RestResponse res) {
-		return true;
-	}
-
-	@Override
-	public void log(Throwable t, String msg) {
-		System.err.println(msg);
-		if (t != null)
-			t.printStackTrace(System.err);
-	}
-}
+// ***************************************************************************************************************************
+// * 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;
+
+/**
+ * Identifies an arbitrary detail level such as the detail of log messages.
+ */
+public enum DetailLevel {
+
+	/** Nothing at all. */
+	NONE,
+
+	/** Simple only. */
+	SIMPLE,
+
+	/** Full detailed. */
+	FULL
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
index 1a6bbe3..e1d3590 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
@@ -284,7 +284,7 @@ public class CsvParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvParserBuilder bpi(Map<String,String> values) {
+	public CsvParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -302,7 +302,7 @@ public class CsvParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvParserBuilder bpro(Map<String,String> values) {
+	public CsvParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -320,7 +320,7 @@ public class CsvParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvParserBuilder bpwo(Map<String,String> values) {
+	public CsvParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -338,7 +338,7 @@ public class CsvParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvParserBuilder bpx(Map<String,String> values) {
+	public CsvParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
index 4ef0cb5..75092c1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
@@ -284,7 +284,7 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvSerializerBuilder bpi(Map<String,String> values) {
+	public CsvSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -302,7 +302,7 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvSerializerBuilder bpro(Map<String,String> values) {
+	public CsvSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -320,7 +320,7 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvSerializerBuilder bpwo(Map<String,String> values) {
+	public CsvSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -338,7 +338,7 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public CsvSerializerBuilder bpx(Map<String,String> values) {
+	public CsvSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index bf26bf0..2fa6fe8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -810,7 +810,7 @@ public class HtmlDocSerializerBuilder extends HtmlStrippedDocSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlDocSerializerBuilder bpi(Map<String,String> values) {
+	public HtmlDocSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -828,7 +828,7 @@ public class HtmlDocSerializerBuilder extends HtmlStrippedDocSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlDocSerializerBuilder bpro(Map<String,String> values) {
+	public HtmlDocSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -846,7 +846,7 @@ public class HtmlDocSerializerBuilder extends HtmlStrippedDocSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlDocSerializerBuilder bpwo(Map<String,String> values) {
+	public HtmlDocSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -864,7 +864,7 @@ public class HtmlDocSerializerBuilder extends HtmlStrippedDocSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlDocSerializerBuilder bpx(Map<String,String> values) {
+	public HtmlDocSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
index dbb7ba9..29d6a79 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
@@ -287,7 +287,7 @@ public class HtmlParserBuilder extends XmlParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlParserBuilder bpi(Map<String,String> values) {
+	public HtmlParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -305,7 +305,7 @@ public class HtmlParserBuilder extends XmlParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlParserBuilder bpro(Map<String,String> values) {
+	public HtmlParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -323,7 +323,7 @@ public class HtmlParserBuilder extends XmlParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlParserBuilder bpwo(Map<String,String> values) {
+	public HtmlParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -341,7 +341,7 @@ public class HtmlParserBuilder extends XmlParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlParserBuilder bpx(Map<String,String> values) {
+	public HtmlParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 38a2c6f..222cef4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -525,7 +525,7 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSchemaSerializerBuilder bpi(Map<String,String> values) {
+	public HtmlSchemaSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -543,7 +543,7 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSchemaSerializerBuilder bpro(Map<String,String> values) {
+	public HtmlSchemaSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -561,7 +561,7 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSchemaSerializerBuilder bpwo(Map<String,String> values) {
+	public HtmlSchemaSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -579,7 +579,7 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSchemaSerializerBuilder bpx(Map<String,String> values) {
+	public HtmlSchemaSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index ac79466..45b32d3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -458,7 +458,7 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSerializerBuilder bpi(Map<String,String> values) {
+	public HtmlSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -476,7 +476,7 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSerializerBuilder bpro(Map<String,String> values) {
+	public HtmlSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -494,7 +494,7 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSerializerBuilder bpwo(Map<String,String> values) {
+	public HtmlSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -512,7 +512,7 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlSerializerBuilder bpx(Map<String,String> values) {
+	public HtmlSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index 9ab1325..ec4bc5c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -284,7 +284,7 @@ public class HtmlStrippedDocSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlStrippedDocSerializerBuilder bpi(Map<String,String> values) {
+	public HtmlStrippedDocSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -302,7 +302,7 @@ public class HtmlStrippedDocSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlStrippedDocSerializerBuilder bpro(Map<String,String> values) {
+	public HtmlStrippedDocSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -320,7 +320,7 @@ public class HtmlStrippedDocSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlStrippedDocSerializerBuilder bpwo(Map<String,String> values) {
+	public HtmlStrippedDocSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -338,7 +338,7 @@ public class HtmlStrippedDocSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public HtmlStrippedDocSerializerBuilder bpx(Map<String,String> values) {
+	public HtmlStrippedDocSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
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 9f2ae84..53c86cd 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
@@ -202,4 +202,8 @@ public class HttpException extends RuntimeException {
 	public String toString() {
 		return emptyIfNull(getLocalizedMessage());
 	}
+
+	// <CONFIGURATION-PROPERTIES>
+
+	// </CONFIGURATION-PROPERTIES>
 }
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 652a75e..4a3aea1 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
@@ -69,4 +69,8 @@ public abstract class HttpResponse {
 	public String toString() {
 		return message;
 	}
+
+	// <CONFIGURATION-PROPERTIES>
+
+	// </CONFIGURATION-PROPERTIES>
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConfigurationProperty.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConfigurationProperty.java
index 6264473..46fa04a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConfigurationProperty.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ConfigurationProperty.java
@@ -19,6 +19,9 @@ import java.lang.annotation.*;
 
 /**
  * Identifies a method as a configurable property setter.
+ *
+ * Used in conjunction with the ConfigurablePropertyCodeGenerator class to synchronize and copy fluent setters from
+ * parent classes to child classes.
  */
 @Target(METHOD)
 @Retention(RUNTIME)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
index a5c8a87..35ec2e7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
@@ -283,7 +283,7 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoParserBuilder bpi(Map<String,String> values) {
+	public JsoParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -301,7 +301,7 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoParserBuilder bpro(Map<String,String> values) {
+	public JsoParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -319,7 +319,7 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoParserBuilder bpwo(Map<String,String> values) {
+	public JsoParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -337,7 +337,7 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoParserBuilder bpx(Map<String,String> values) {
+	public JsoParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
index fb2007e..629df6e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -283,7 +283,7 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoSerializerBuilder bpi(Map<String,String> values) {
+	public JsoSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -301,7 +301,7 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoSerializerBuilder bpro(Map<String,String> values) {
+	public JsoSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -319,7 +319,7 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoSerializerBuilder bpwo(Map<String,String> values) {
+	public JsoSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -337,7 +337,7 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsoSerializerBuilder bpx(Map<String,String> values) {
+	public JsoSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
index 9548d9c..65be526 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
@@ -325,7 +325,7 @@ public class JsonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonParserBuilder bpi(Map<String,String> values) {
+	public JsonParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -343,7 +343,7 @@ public class JsonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonParserBuilder bpro(Map<String,String> values) {
+	public JsonParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -361,7 +361,7 @@ public class JsonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonParserBuilder bpwo(Map<String,String> values) {
+	public JsonParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -379,7 +379,7 @@ public class JsonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonParserBuilder bpx(Map<String,String> values) {
+	public JsonParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
index 36d5317..d71db9b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
@@ -25,7 +25,6 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -282,800 +281,949 @@ public class JsonSchemaSerializerBuilder extends JsonSerializerBuilder {
 		return set(JSONSCHEMA_useBeanDefs, true);
 	}
 
-	@Override /* JsonSerializerBuilder */
-	public JsonSchemaSerializerBuilder escapeSolidus(boolean value) {
-		super.escapeSolidus(value);
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder add(Map<String,Object> properties) {
+		super.add(properties);
 		return this;
 	}
 
-	@Override /* JsonSerializerBuilder */
-	public JsonSchemaSerializerBuilder escapeSolidus() {
-		super.escapeSolidus();
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder addTo(String name, Object value) {
+		super.addTo(name, value);
 		return this;
 	}
 
-	@Override /* JsonSerializerBuilder */
-	public JsonSchemaSerializerBuilder simple(boolean value) {
-		super.simple(value);
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder appendTo(String name, Object value) {
+		super.appendTo(name, value);
 		return this;
 	}
 
-	@Override /* JsonSerializerBuilder */
-	public JsonSchemaSerializerBuilder simple() {
-		super.simple();
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder apply(PropertyStore copyFrom) {
+		super.apply(copyFrom);
 		return this;
 	}
 
-	@Override /* JsonSerializerBuilder */
-	public JsonSchemaSerializerBuilder ssq() {
-		super.ssq();
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder applyAnnotations(java.lang.Class<?>...fromClasses) {
+		super.applyAnnotations(fromClasses);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder fileCharset(Charset value) {
-		super.fileCharset(value);
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder applyAnnotations(Method...fromMethods) {
+		super.applyAnnotations(fromMethods);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder maxIndent(int value) {
-		super.maxIndent(value);
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder applyAnnotations(AnnotationList al, VarResolverSession r) {
+		super.applyAnnotations(al, r);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder quoteChar(char value) {
-		super.quoteChar(value);
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder prependTo(String name, Object value) {
+		super.prependTo(name, value);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder sq() {
-		super.sq();
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder putAllTo(String name, Object value) {
+		super.putAllTo(name, value);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder streamCharset(Charset value) {
-		super.streamCharset(value);
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder putTo(String name, String key, Object value) {
+		super.putTo(name, key, value);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder useWhitespace(boolean value) {
-		super.useWhitespace(value);
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder removeFrom(String name, Object value) {
+		super.removeFrom(name, value);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder useWhitespace() {
-		super.useWhitespace();
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder set(Map<String,Object> properties) {
+		super.set(properties);
 		return this;
 	}
 
-	@Override /* WriterSerializerBuilder */
-	public JsonSchemaSerializerBuilder ws() {
-		super.ws();
+	@Override /* GENERATED - ContextBuilder */
+	public JsonSchemaSerializerBuilder set(String name, Object value) {
+		super.set(name, value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder addBeanTypes(boolean value) {
-		super.addBeanTypes(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder annotations(Annotation...values) {
+		super.annotations(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder addBeanTypes() {
-		super.addBeanTypes();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanClassVisibility(Visibility value) {
+		super.beanClassVisibility(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder addRootType(boolean value) {
-		super.addRootType(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanConstructorVisibility(Visibility value) {
+		super.beanConstructorVisibility(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder addRootType() {
-		super.addRootType();
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanDictionary(java.lang.Class<?>...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder detectRecursions(boolean value) {
-		super.detectRecursions(value);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanDictionary(Object...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder detectRecursions() {
-		super.detectRecursions();
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanDictionaryRemove(java.lang.Class<?>...values) {
+		super.beanDictionaryRemove(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder ignoreRecursions(boolean value) {
-		super.ignoreRecursions(value);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanDictionaryRemove(Object...values) {
+		super.beanDictionaryRemove(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder ignoreRecursions() {
-		super.ignoreRecursions();
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanDictionaryReplace(java.lang.Class<?>...values) {
+		super.beanDictionaryReplace(values);
 		return this;
 	}
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder initialDepth(int value) {
-		super.initialDepth(value);
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanDictionaryReplace(Object...values) {
+		super.beanDictionaryReplace(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder listener(Class<? extends SerializerListener> value) {
-		super.listener(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanFieldVisibility(Visibility value) {
+		super.beanFieldVisibility(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder maxDepth(int value) {
-		super.maxDepth(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanFilters(Object...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder sortCollections(boolean value) {
-		super.sortCollections(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanFiltersRemove(Object...values) {
+		super.beanFiltersRemove(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder sortCollections() {
-		super.sortCollections();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanFiltersReplace(Object...values) {
+		super.beanFiltersReplace(values);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder sortMaps(boolean value) {
-		super.sortMaps(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanMapPutReturnsOldValue() {
+		super.beanMapPutReturnsOldValue();
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder sortMaps() {
-		super.sortMaps();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimEmptyCollections(boolean value) {
-		super.trimEmptyCollections(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanMethodVisibility(Visibility value) {
+		super.beanMethodVisibility(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimEmptyCollections() {
-		super.trimEmptyCollections();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beanTypePropertyName(String value) {
+		super.beanTypePropertyName(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimEmptyMaps(boolean value) {
-		super.trimEmptyMaps(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansDontRequireSomeProperties() {
+		super.beansDontRequireSomeProperties();
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimEmptyMaps() {
-		super.trimEmptyMaps();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireDefaultConstructor() {
+		super.beansRequireDefaultConstructor();
 		return this;
 	}
 
-	@Deprecated @Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimNullProperties(boolean value) {
-		super.trimNullProperties(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireDefaultConstructor(boolean value) {
+		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimStrings(boolean value) {
-		super.trimStrings(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireSerializable() {
+		super.beansRequireSerializable();
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder trimStrings() {
-		super.trimStrings();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireSerializable(boolean value) {
+		super.beansRequireSerializable(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder uriContext(UriContext value) {
-		super.uriContext(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireSettersForGetters() {
+		super.beansRequireSettersForGetters();
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder uriRelativity(UriRelativity value) {
-		super.uriRelativity(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireSettersForGetters(boolean value) {
+		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public JsonSchemaSerializerBuilder uriResolution(UriResolution value) {
-		super.uriResolution(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder beansRequireSomeProperties(boolean value) {
+		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder annotations(Annotation...values) {
-		super.annotations(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpi(Map<String,Object> values) {
+		super.bpi(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanClassVisibility(Visibility value) {
-		super.beanClassVisibility(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpi(Class<?> beanClass, String properties) {
+		super.bpi(beanClass, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanConstructorVisibility(Visibility value) {
-		super.beanConstructorVisibility(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpi(String beanClassName, String properties) {
+		super.bpi(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	@Deprecated
-	public JsonSchemaSerializerBuilder beanDictionary(Class<?>...values) {
-		super.beanDictionary(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpro(Map<String,Object> values) {
+		super.bpro(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	@Deprecated
-	public JsonSchemaSerializerBuilder beanDictionary(Object...values) {
-		super.beanDictionary(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpro(Class<?> beanClass, String properties) {
+		super.bpro(beanClass, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	@Deprecated
-	public JsonSchemaSerializerBuilder beanDictionaryReplace(Class<?>...values) {
-		super.beanDictionaryReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpro(String beanClassName, String properties) {
+		super.bpro(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	@Deprecated
-	public JsonSchemaSerializerBuilder beanDictionaryReplace(Object...values) {
-		super.beanDictionaryReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpwo(Map<String,Object> values) {
+		super.bpwo(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	@Deprecated
-	public JsonSchemaSerializerBuilder beanDictionaryRemove(Class<?>...values) {
-		super.beanDictionaryRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpwo(Class<?> beanClass, String properties) {
+		super.bpwo(beanClass, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	@Deprecated
-	public JsonSchemaSerializerBuilder beanDictionaryRemove(Object...values) {
-		super.beanDictionaryRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpwo(String beanClassName, String properties) {
+		super.bpwo(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanFieldVisibility(Visibility value) {
-		super.beanFieldVisibility(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpx(Map<String,Object> values) {
+		super.bpx(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanFilters(Object...values) {
-		super.beanFilters(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpx(Class<?> beanClass, String properties) {
+		super.bpx(beanClass, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanFiltersReplace(Object...values) {
-		super.beanFiltersReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder bpx(String beanClassName, String properties) {
+		super.bpx(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanFiltersRemove(Object...values) {
-		super.beanFiltersRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder debug() {
+		super.debug();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
-		super.beanMapPutReturnsOldValue(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder debug(boolean value) {
+		super.debug(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanMapPutReturnsOldValue() {
-		super.beanMapPutReturnsOldValue();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dictionary(java.lang.Class<?>...values) {
+		super.dictionary(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanMethodVisibility(Visibility value) {
-		super.beanMethodVisibility(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dictionary(Object...values) {
+		super.dictionary(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireDefaultConstructor(boolean value) {
-		super.beansRequireDefaultConstructor(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dictionaryRemove(java.lang.Class<?>...values) {
+		super.dictionaryRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireDefaultConstructor() {
-		super.beansRequireDefaultConstructor();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dictionaryRemove(Object...values) {
+		super.dictionaryRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireSerializable(boolean value) {
-		super.beansRequireSerializable(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dictionaryReplace(java.lang.Class<?>...values) {
+		super.dictionaryReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireSerializable() {
-		super.beansRequireSerializable();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dictionaryReplace(Object...values) {
+		super.dictionaryReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireSettersForGetters(boolean value) {
-		super.beansRequireSettersForGetters(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dontIgnorePropertiesWithoutSetters() {
+		super.dontIgnorePropertiesWithoutSetters();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireSettersForGetters() {
-		super.beansRequireSettersForGetters();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dontIgnoreTransientFields() {
+		super.dontIgnoreTransientFields();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beansRequireSomeProperties(boolean value) {
-		super.beansRequireSomeProperties(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dontIgnoreUnknownNullBeanProperties() {
+		super.dontIgnoreUnknownNullBeanProperties();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder beanTypePropertyName(String value) {
-		super.beanTypePropertyName(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder dontUseInterfaceProxies() {
+		super.dontUseInterfaceProxies();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpi(Class<?> beanClass, String value) {
-		super.bpi(beanClass, value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public <T> JsonSchemaSerializerBuilder example(Class<T> pojoClass, T o) {
+		super.example(pojoClass, o);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpi(Map<String,String> values) {
-		super.bpi(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public <T> JsonSchemaSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
+		super.exampleJson(pojoClass, json);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpi(String beanClassName, String value) {
-		super.bpi(beanClassName, value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder examples(String json) {
+		super.examples(json);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpx(Class<?> beanClass, String properties) {
-		super.bpx(beanClass, properties);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder excludeProperties(Map<String,String> values) {
+		super.excludeProperties(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpx(Map<String,String> values) {
-		super.bpx(values);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder excludeProperties(Class<?> beanClass, String properties) {
+		super.excludeProperties(beanClass, properties);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpx(String beanClassName, String value) {
-		super.bpx(beanClassName, value);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder excludeProperties(String beanClassName, String value) {
+		super.excludeProperties(beanClassName, value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpro(Class<?> beanClass, String value) {
-		super.bpro(beanClass, value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder fluentSetters() {
+		super.fluentSetters();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpro(Map<String,String> values) {
-		super.bpro(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder fluentSetters(boolean value) {
+		super.fluentSetters(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpro(String beanClassName, String value) {
-		super.bpro(beanClassName, value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnGetters() {
+		super.ignoreInvocationExceptionsOnGetters();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpwo(Class<?> beanClass, String properties) {
-		super.bpwo(beanClass, properties);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpwo(Map<String,String> values) {
-		super.bpwo(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnSetters() {
+		super.ignoreInvocationExceptionsOnSetters();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder bpwo(String beanClassName, String value) {
-		super.bpwo(beanClassName, value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder debug() {
-		super.debug();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
+		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder dictionary(Class<?>...values) {
-		super.dictionary(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreTransientFields(boolean value) {
+		super.ignoreTransientFields(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder dictionary(Object...values) {
-		super.dictionary(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreUnknownBeanProperties() {
+		super.ignoreUnknownBeanProperties();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder dictionaryReplace(Class<?>...values) {
-		super.dictionaryReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder dictionaryReplace(Object...values) {
-		super.dictionaryReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
+		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder dictionaryRemove(Class<?>...values) {
-		super.dictionaryRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder implClass(Class<?> interfaceClass, Class<?> implClass) {
+		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder dictionaryRemove(Object...values) {
-		super.dictionaryRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder implClasses(Map<String,Class<?>> values) {
+		super.implClasses(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public <T> JsonSchemaSerializerBuilder example(Class<T> c, T o) {
-		super.example(c, o);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder includeProperties(Map<String,String> values) {
+		super.includeProperties(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public <T> JsonSchemaSerializerBuilder exampleJson(Class<T> c, String value) {
-		super.exampleJson(c, value);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder includeProperties(Class<?> beanClass, String value) {
+		super.includeProperties(beanClass, value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
-		super.ignoreInvocationExceptionsOnGetters(value);
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder includeProperties(String beanClassName, String value) {
+		super.includeProperties(beanClassName, value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnGetters() {
-		super.ignoreInvocationExceptionsOnGetters();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder locale(Locale value) {
+		super.locale(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
-		super.ignoreInvocationExceptionsOnSetters(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder mediaType(MediaType value) {
+		super.mediaType(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreInvocationExceptionsOnSetters() {
-		super.ignoreInvocationExceptionsOnSetters();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanClasses(java.lang.Class<?>...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
-		super.ignorePropertiesWithoutSetters(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanClasses(Object...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreTransientFields(boolean value) {
-		super.ignoreTransientFields(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanClassesRemove(java.lang.Class<?>...values) {
+		super.notBeanClassesRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
-		super.ignoreUnknownBeanProperties(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanClassesRemove(Object...values) {
+		super.notBeanClassesRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreUnknownBeanProperties() {
-		super.ignoreUnknownBeanProperties();
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanClassesReplace(java.lang.Class<?>...values) {
+		super.notBeanClassesReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
-		super.ignoreUnknownNullBeanProperties(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanClassesReplace(Object...values) {
+		super.notBeanClassesReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder implClass(Class<?> interfaceClass, Class<?> implClass) {
-		super.implClass(interfaceClass, implClass);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanPackages(Object...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder implClasses(Map<String,Class<?>> values) {
-		super.implClasses(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanPackages(String...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder locale(Locale value) {
-		super.locale(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanPackagesRemove(Object...values) {
+		super.notBeanPackagesRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder mediaType(MediaType value) {
-		super.mediaType(value);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanPackagesRemove(String...values) {
+		super.notBeanPackagesRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanClasses(Class<?>...values) {
-		super.notBeanClasses(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanPackagesReplace(Object...values) {
+		super.notBeanPackagesReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanClasses(Object...values) {
-		super.notBeanClasses(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder notBeanPackagesReplace(String...values) {
+		super.notBeanPackagesReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanClassesReplace(Class<?>...values) {
-		super.notBeanClassesReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder pojoSwaps(java.lang.Class<?>...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanClassesReplace(Object...values) {
-		super.notBeanClassesReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder pojoSwaps(Object...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanClassesRemove(Class<?>...values) {
-		super.notBeanClassesRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder pojoSwapsRemove(java.lang.Class<?>...values) {
+		super.pojoSwapsRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanClassesRemove(Object...values) {
-		super.notBeanClassesRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder pojoSwapsRemove(Object...values) {
+		super.pojoSwapsRemove(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanPackages(Object...values) {
-		super.notBeanPackages(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder pojoSwapsReplace(java.lang.Class<?>...values) {
+		super.pojoSwapsReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanPackages(String...values) {
-		super.notBeanPackages(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder pojoSwapsReplace(Object...values) {
+		super.pojoSwapsReplace(values);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanPackagesReplace(String...values) {
-		super.notBeanPackagesReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder propertyNamer(Class<? extends org.apache.juneau.PropertyNamer> value) {
+		super.propertyNamer(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanPackagesReplace(Object...values) {
-		super.notBeanPackagesReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder sortProperties() {
+		super.sortProperties();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanPackagesRemove(String...values) {
-		super.notBeanPackagesRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder sortProperties(boolean value) {
+		super.sortProperties(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder notBeanPackagesRemove(Object...values) {
-		super.notBeanPackagesRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder timeZone(TimeZone value) {
+		super.timeZone(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder pojoSwaps(Class<?>...values) {
-		super.pojoSwaps(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder useEnumNames() {
+		super.useEnumNames();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder pojoSwaps(Object...values) {
-		super.pojoSwaps(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder useEnumNames(boolean value) {
+		super.useEnumNames(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder pojoSwapsReplace(Class<?>...values) {
-		super.pojoSwapsReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder useInterfaceProxies(boolean value) {
+		super.useInterfaceProxies(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder pojoSwapsReplace(Object...values) {
-		super.pojoSwapsReplace(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder useJavaBeanIntrospector() {
+		super.useJavaBeanIntrospector();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder pojoSwapsRemove(Class<?>...values) {
-		super.pojoSwapsRemove(values);
+	@Override /* GENERATED - BeanContextBuilder */
+	public JsonSchemaSerializerBuilder useJavaBeanIntrospector(boolean value) {
+		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder pojoSwapsRemove(Object...values) {
-		super.pojoSwapsRemove(values);
+	@Override /* GENERATED - BeanTraverseBuilder */
+	public JsonSchemaSerializerBuilder detectRecursions() {
+		super.detectRecursions();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder sortProperties(boolean value) {
-		super.sortProperties(value);
+	@Override /* GENERATED - BeanTraverseBuilder */
+	public JsonSchemaSerializerBuilder detectRecursions(boolean value) {
+		super.detectRecursions(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder sortProperties() {
-		super.sortProperties();
+	@Override /* GENERATED - BeanTraverseBuilder */
+	public JsonSchemaSerializerBuilder ignoreRecursions() {
+		super.ignoreRecursions();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
+	@Override /* GENERATED - BeanTraverseBuilder */
+	public JsonSchemaSerializerBuilder ignoreRecursions(boolean value) {
+		super.ignoreRecursions(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder useEnumNames(boolean value) {
-		super.useEnumNames(value);
+	@Override /* GENERATED - BeanTraverseBuilder */
+	public JsonSchemaSerializerBuilder initialDepth(int value) {
+		super.initialDepth(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder useEnumNames() {
-		super.useEnumNames();
+	@Override /* GENERATED - BeanTraverseBuilder */
+	public JsonSchemaSerializerBuilder maxDepth(int value) {
+		super.maxDepth(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder useInterfaceProxies(boolean value) {
-		super.useInterfaceProxies(value);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder addBeanTypes() {
+		super.addBeanTypes();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder useJavaBeanIntrospector(boolean value) {
-		super.useJavaBeanIntrospector(value);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder addBeanTypes(boolean value) {
+		super.addBeanTypes(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public JsonSchemaSerializerBuilder useJavaBeanIntrospector() {
-		super.useJavaBeanIntrospector();
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder addRootType() {
+		super.addRootType();
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder set(String name, Object value) {
-		super.set(name, value);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder addRootType(boolean value) {
+		super.addRootType(value);
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder set(Map<String,Object> properties) {
-		super.set(properties);
+	@Deprecated @Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder dontTrimNullProperties() {
+		super.dontTrimNullProperties();
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder add(Map<String,Object> properties) {
-		super.add(properties);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder keepNullProperties() {
+		super.keepNullProperties();
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder addTo(String name, Object value) {
-		super.addTo(name, value);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder keepNullProperties(boolean value) {
+		super.keepNullProperties(value);
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder putTo(String name, String key, Object value) {
-		super.putTo(name, key, value);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder listener(Class<? extends org.apache.juneau.serializer.SerializerListener> value) {
+		super.listener(value);
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder removeFrom(String name, Object value) {
-		super.removeFrom(name, value);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder sortCollections() {
+		super.sortCollections();
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder apply(PropertyStore copyFrom) {
-		super.apply(copyFrom);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder sortCollections(boolean value) {
+		super.sortCollections(value);
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
-		super.applyAnnotations(al, vrs);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder sortMaps() {
+		super.sortMaps();
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
-		super.applyAnnotations(fromClasses);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder sortMaps(boolean value) {
+		super.sortMaps(value);
 		return this;
 	}
 
-	@Override /* ContextBuilder */
-	public JsonSchemaSerializerBuilder applyAnnotations(Method...fromMethods) {
-		super.applyAnnotations(fromMethods);
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimEmptyCollections() {
+		super.trimEmptyCollections();
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimEmptyCollections(boolean value) {
+		super.trimEmptyCollections(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimEmptyMaps() {
+		super.trimEmptyMaps();
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimEmptyMaps(boolean value) {
+		super.trimEmptyMaps(value);
 		return this;
 	}
+
+	@Deprecated @Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimNullProperties(boolean value) {
+		super.trimNullProperties(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimStrings() {
+		super.trimStrings();
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder trimStrings(boolean value) {
+		super.trimStrings(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder uriContext(String value) {
+		super.uriContext(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder uriContext(UriContext value) {
+		super.uriContext(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder uriRelativity(String value) {
+		super.uriRelativity(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder uriRelativity(UriRelativity value) {
+		super.uriRelativity(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder uriResolution(String value) {
+		super.uriResolution(value);
+		return this;
+	}
+
+	@Override /* GENERATED - SerializerBuilder */
+	public JsonSchemaSerializerBuilder uriResolution(UriResolution value) {
+		super.uriResolution(value);
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder fileCharset(Charset value) {
+		super.fileCharset(value);
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder maxIndent(int value) {
+		super.maxIndent(value);
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder quoteChar(char value) {
+		super.quoteChar(value);
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder sq() {
+		super.sq();
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder streamCharset(Charset value) {
+		super.streamCharset(value);
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder useWhitespace() {
+		super.useWhitespace();
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder useWhitespace(boolean value) {
+		super.useWhitespace(value);
+		return this;
+	}
+
+	@Override /* GENERATED - WriterSerializerBuilder */
+	public JsonSchemaSerializerBuilder ws() {
+		super.ws();
+		return this;
+	}
+
+	@Override /* GENERATED - JsonSerializerBuilder */
+	public JsonSchemaSerializerBuilder escapeSolidus() {
+		super.escapeSolidus();
+		return this;
+	}
+
+	@Override /* GENERATED - JsonSerializerBuilder */
+	public JsonSchemaSerializerBuilder escapeSolidus(boolean value) {
+		super.escapeSolidus(value);
+		return this;
+	}
+
+	@Override /* GENERATED - JsonSerializerBuilder */
+	public JsonSchemaSerializerBuilder simple() {
+		super.simple();
+		return this;
+	}
+
+	@Override /* GENERATED - JsonSerializerBuilder */
+	public JsonSchemaSerializerBuilder simple(boolean value) {
+		super.simple(value);
+		return this;
+	}
+
+	@Override /* GENERATED - JsonSerializerBuilder */
+	public JsonSchemaSerializerBuilder ssq() {
+		super.ssq();
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
index e0644f6..453da59 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
@@ -380,7 +380,7 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSerializerBuilder bpi(Map<String,String> values) {
+	public JsonSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -398,7 +398,7 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSerializerBuilder bpro(Map<String,String> values) {
+	public JsonSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -416,7 +416,7 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSerializerBuilder bpwo(Map<String,String> values) {
+	public JsonSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -434,7 +434,7 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSerializerBuilder bpx(Map<String,String> values) {
+	public JsonSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
index 8515b60..8b990e3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
@@ -283,7 +283,7 @@ public class SimpleJsonParserBuilder extends JsonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonParserBuilder bpi(Map<String,String> values) {
+	public SimpleJsonParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -301,7 +301,7 @@ public class SimpleJsonParserBuilder extends JsonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonParserBuilder bpro(Map<String,String> values) {
+	public SimpleJsonParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -319,7 +319,7 @@ public class SimpleJsonParserBuilder extends JsonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonParserBuilder bpwo(Map<String,String> values) {
+	public SimpleJsonParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -337,7 +337,7 @@ public class SimpleJsonParserBuilder extends JsonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonParserBuilder bpx(Map<String,String> values) {
+	public SimpleJsonParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
index a4a2ea3..e411cb4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
@@ -283,7 +283,7 @@ public class SimpleJsonSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonSerializerBuilder bpi(Map<String,String> values) {
+	public SimpleJsonSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -301,7 +301,7 @@ public class SimpleJsonSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonSerializerBuilder bpro(Map<String,String> values) {
+	public SimpleJsonSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -319,7 +319,7 @@ public class SimpleJsonSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonSerializerBuilder bpwo(Map<String,String> values) {
+	public SimpleJsonSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -337,7 +337,7 @@ public class SimpleJsonSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SimpleJsonSerializerBuilder bpx(Map<String,String> values) {
+	public SimpleJsonSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
index 9b2d4b4..fbc7318 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
@@ -559,7 +559,7 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSchemaGeneratorBuilder bpi(Map<String,String> values) {
+	public JsonSchemaGeneratorBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -577,7 +577,7 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSchemaGeneratorBuilder bpro(Map<String,String> values) {
+	public JsonSchemaGeneratorBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -595,7 +595,7 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSchemaGeneratorBuilder bpwo(Map<String,String> values) {
+	public JsonSchemaGeneratorBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -613,7 +613,7 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public JsonSchemaGeneratorBuilder bpx(Map<String,String> values) {
+	public JsonSchemaGeneratorBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
index 4bcc979..0efab2e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
@@ -283,7 +283,7 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackParserBuilder bpi(Map<String,String> values) {
+	public MsgPackParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -301,7 +301,7 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackParserBuilder bpro(Map<String,String> values) {
+	public MsgPackParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -319,7 +319,7 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackParserBuilder bpwo(Map<String,String> values) {
+	public MsgPackParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -337,7 +337,7 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackParserBuilder bpx(Map<String,String> values) {
+	public MsgPackParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
index 4e413a4..8cb3551 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
@@ -283,7 +283,7 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackSerializerBuilder bpi(Map<String,String> values) {
+	public MsgPackSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -301,7 +301,7 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackSerializerBuilder bpro(Map<String,String> values) {
+	public MsgPackSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -319,7 +319,7 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackSerializerBuilder bpwo(Map<String,String> values) {
+	public MsgPackSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -337,7 +337,7 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MsgPackSerializerBuilder bpx(Map<String,String> values) {
+	public MsgPackSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
index add601a..4f82fae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
@@ -358,7 +358,7 @@ public class OpenApiParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiParserBuilder bpi(Map<String,String> values) {
+	public OpenApiParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -376,7 +376,7 @@ public class OpenApiParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiParserBuilder bpro(Map<String,String> values) {
+	public OpenApiParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -394,7 +394,7 @@ public class OpenApiParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiParserBuilder bpwo(Map<String,String> values) {
+	public OpenApiParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -412,7 +412,7 @@ public class OpenApiParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiParserBuilder bpx(Map<String,String> values) {
+	public OpenApiParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
index 3ec4ab2..1d9a568 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
@@ -358,7 +358,7 @@ public class OpenApiSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiSerializerBuilder bpi(Map<String,String> values) {
+	public OpenApiSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -376,7 +376,7 @@ public class OpenApiSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiSerializerBuilder bpro(Map<String,String> values) {
+	public OpenApiSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -394,7 +394,7 @@ public class OpenApiSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiSerializerBuilder bpwo(Map<String,String> values) {
+	public OpenApiSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -412,7 +412,7 @@ public class OpenApiSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OpenApiSerializerBuilder bpx(Map<String,String> values) {
+	public OpenApiSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
index 9f43f56..f371c73 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
@@ -322,7 +322,7 @@ public class InputStreamParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public InputStreamParserBuilder bpi(Map<String,String> values) {
+	public InputStreamParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -340,7 +340,7 @@ public class InputStreamParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public InputStreamParserBuilder bpro(Map<String,String> values) {
+	public InputStreamParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -358,7 +358,7 @@ public class InputStreamParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public InputStreamParserBuilder bpwo(Map<String,String> values) {
+	public InputStreamParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -376,7 +376,7 @@ public class InputStreamParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public InputStreamParserBuilder bpx(Map<String,String> values) {
+	public InputStreamParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
index f8761bb..bee1039 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
@@ -469,7 +469,7 @@ public class ParserBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserBuilder bpi(Map<String,String> values) {
+	public ParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -487,7 +487,7 @@ public class ParserBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserBuilder bpro(Map<String,String> values) {
+	public ParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -505,7 +505,7 @@ public class ParserBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserBuilder bpwo(Map<String,String> values) {
+	public ParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -523,7 +523,7 @@ public class ParserBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserBuilder bpx(Map<String,String> values) {
+	public ParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
index 0bbeb3a..f9ec735 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
@@ -601,7 +601,7 @@ public class ParserGroupBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserGroupBuilder bpi(Map<String,String> values) {
+	public ParserGroupBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -619,7 +619,7 @@ public class ParserGroupBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserGroupBuilder bpro(Map<String,String> values) {
+	public ParserGroupBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -637,7 +637,7 @@ public class ParserGroupBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserGroupBuilder bpwo(Map<String,String> values) {
+	public ParserGroupBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -655,7 +655,7 @@ public class ParserGroupBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ParserGroupBuilder bpx(Map<String,String> values) {
+	public ParserGroupBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
index e687cac..7fc549f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
@@ -321,7 +321,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ReaderParserBuilder bpi(Map<String,String> values) {
+	public ReaderParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -339,7 +339,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ReaderParserBuilder bpro(Map<String,String> values) {
+	public ReaderParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -357,7 +357,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ReaderParserBuilder bpwo(Map<String,String> values) {
+	public ReaderParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -375,7 +375,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public ReaderParserBuilder bpx(Map<String,String> values) {
+	public ReaderParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
index 5473c38..19e2643 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -284,7 +284,7 @@ public class PlainTextParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextParserBuilder bpi(Map<String,String> values) {
+	public PlainTextParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -302,7 +302,7 @@ public class PlainTextParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextParserBuilder bpro(Map<String,String> values) {
+	public PlainTextParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -320,7 +320,7 @@ public class PlainTextParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextParserBuilder bpwo(Map<String,String> values) {
+	public PlainTextParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -338,7 +338,7 @@ public class PlainTextParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextParserBuilder bpx(Map<String,String> values) {
+	public PlainTextParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index 34301af..a9f95c2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -284,7 +284,7 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextSerializerBuilder bpi(Map<String,String> values) {
+	public PlainTextSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -302,7 +302,7 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextSerializerBuilder bpro(Map<String,String> values) {
+	public PlainTextSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -320,7 +320,7 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextSerializerBuilder bpwo(Map<String,String> values) {
+	public PlainTextSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -338,7 +338,7 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public PlainTextSerializerBuilder bpx(Map<String,String> values) {
+	public PlainTextSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
index 1a76904..7eaf678 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
@@ -322,7 +322,7 @@ public class OutputStreamSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OutputStreamSerializerBuilder bpi(Map<String,String> values) {
+	public OutputStreamSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -340,7 +340,7 @@ public class OutputStreamSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OutputStreamSerializerBuilder bpro(Map<String,String> values) {
+	public OutputStreamSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -358,7 +358,7 @@ public class OutputStreamSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OutputStreamSerializerBuilder bpwo(Map<String,String> values) {
+	public OutputStreamSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -376,7 +376,7 @@ public class OutputStreamSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public OutputStreamSerializerBuilder bpx(Map<String,String> values) {
+	public OutputStreamSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
index 0ff6ac0..f0844f4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
@@ -778,7 +778,7 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerBuilder bpi(Map<String,String> values) {
+	public SerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -796,7 +796,7 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerBuilder bpro(Map<String,String> values) {
+	public SerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -814,7 +814,7 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerBuilder bpwo(Map<String,String> values) {
+	public SerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -832,7 +832,7 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerBuilder bpx(Map<String,String> values) {
+	public SerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
index c656183..43d80a8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
@@ -907,7 +907,7 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerGroupBuilder bpi(Map<String,String> values) {
+	public SerializerGroupBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -925,7 +925,7 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerGroupBuilder bpro(Map<String,String> values) {
+	public SerializerGroupBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -943,7 +943,7 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerGroupBuilder bpwo(Map<String,String> values) {
+	public SerializerGroupBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -961,7 +961,7 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SerializerGroupBuilder bpx(Map<String,String> values) {
+	public SerializerGroupBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
index e3bfa55..3dd2e92 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
@@ -437,7 +437,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public WriterSerializerBuilder bpi(Map<String,String> values) {
+	public WriterSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -455,7 +455,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public WriterSerializerBuilder bpro(Map<String,String> values) {
+	public WriterSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -473,7 +473,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public WriterSerializerBuilder bpwo(Map<String,String> values) {
+	public WriterSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -491,7 +491,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public WriterSerializerBuilder bpx(Map<String,String> values) {
+	public WriterSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index 117a2c0..5d7c20a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -304,7 +304,7 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SoapXmlSerializerBuilder bpi(Map<String,String> values) {
+	public SoapXmlSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -322,7 +322,7 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SoapXmlSerializerBuilder bpro(Map<String,String> values) {
+	public SoapXmlSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -340,7 +340,7 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SoapXmlSerializerBuilder bpwo(Map<String,String> values) {
+	public SoapXmlSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -358,7 +358,7 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public SoapXmlSerializerBuilder bpx(Map<String,String> values) {
+	public SoapXmlSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
index a356239..7a5b68d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
@@ -364,7 +364,7 @@ public class UonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonParserBuilder bpi(Map<String,String> values) {
+	public UonParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -382,7 +382,7 @@ public class UonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonParserBuilder bpro(Map<String,String> values) {
+	public UonParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -400,7 +400,7 @@ public class UonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonParserBuilder bpwo(Map<String,String> values) {
+	public UonParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -418,7 +418,7 @@ public class UonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonParserBuilder bpx(Map<String,String> values) {
+	public UonParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
index 21fb8a5..7658a1d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
@@ -381,7 +381,7 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonSerializerBuilder bpi(Map<String,String> values) {
+	public UonSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -399,7 +399,7 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonSerializerBuilder bpro(Map<String,String> values) {
+	public UonSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -417,7 +417,7 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonSerializerBuilder bpwo(Map<String,String> values) {
+	public UonSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -435,7 +435,7 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UonSerializerBuilder bpx(Map<String,String> values) {
+	public UonSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
index c51dc20..df80ecb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
@@ -324,7 +324,7 @@ public class UrlEncodingParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingParserBuilder bpi(Map<String,String> values) {
+	public UrlEncodingParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -342,7 +342,7 @@ public class UrlEncodingParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingParserBuilder bpro(Map<String,String> values) {
+	public UrlEncodingParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -360,7 +360,7 @@ public class UrlEncodingParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingParserBuilder bpwo(Map<String,String> values) {
+	public UrlEncodingParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -378,7 +378,7 @@ public class UrlEncodingParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingParserBuilder bpx(Map<String,String> values) {
+	public UrlEncodingParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index 5d7eab1..6a1226a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -325,7 +325,7 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingSerializerBuilder bpi(Map<String,String> values) {
+	public UrlEncodingSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -343,7 +343,7 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingSerializerBuilder bpro(Map<String,String> values) {
+	public UrlEncodingSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -361,7 +361,7 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingSerializerBuilder bpwo(Map<String,String> values) {
+	public UrlEncodingSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -379,7 +379,7 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public UrlEncodingSerializerBuilder bpx(Map<String,String> values) {
+	public UrlEncodingSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index 2ef1fd5..b5d5258 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -474,7 +474,7 @@ public class XmlParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlParserBuilder bpi(Map<String,String> values) {
+	public XmlParserBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -492,7 +492,7 @@ public class XmlParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlParserBuilder bpro(Map<String,String> values) {
+	public XmlParserBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -510,7 +510,7 @@ public class XmlParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlParserBuilder bpwo(Map<String,String> values) {
+	public XmlParserBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -528,7 +528,7 @@ public class XmlParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlParserBuilder bpx(Map<String,String> values) {
+	public XmlParserBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index c9a82b9..18d8db4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -515,7 +515,7 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlSerializerBuilder bpi(Map<String,String> values) {
+	public XmlSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -533,7 +533,7 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlSerializerBuilder bpro(Map<String,String> values) {
+	public XmlSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -551,7 +551,7 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlSerializerBuilder bpwo(Map<String,String> values) {
+	public XmlSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -569,7 +569,7 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public XmlSerializerBuilder bpx(Map<String,String> values) {
+	public XmlSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java
index 54c4f88..481e8b0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java
@@ -453,7 +453,7 @@ public class XmlSchemaSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public XmlSchemaSerializerBuilder bpi(Map<String,String> values) {
+	public XmlSchemaSerializerBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -471,7 +471,7 @@ public class XmlSchemaSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public XmlSchemaSerializerBuilder bpx(Map<String,String> values) {
+	public XmlSchemaSerializerBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
@@ -489,7 +489,7 @@ public class XmlSchemaSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public XmlSchemaSerializerBuilder bpro(Map<String,String> values) {
+	public XmlSchemaSerializerBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -507,7 +507,7 @@ public class XmlSchemaSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public XmlSchemaSerializerBuilder bpwo(Map<String,String> values) {
+	public XmlSchemaSerializerBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index ee48b0b..f7a61a3 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -173,7 +173,7 @@
 		<li><p><a class='doclink' href='#juneau-marshall.HttpPartParsers'>HTTP Part Parsers</a></p>
 		<li><p><a class='doclink' href='#juneau-marshall.ConfigurableProperties'>Configurable Properties</a><span class='update'>8.1.3-updated</span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.ConfigurableAnnotations'>Configurable Annotations</a><span class='update'>8.1.0-new, 8.1.3-updated, <b>8.1.4-updated</b></span></p>
-		<li><p><a class='doclink' href='#juneau-marshall.ObjectMap'>ObjectMap and ObjectList</a></p>
+		<li><p><a class='doclink' href='#juneau-marshall.ObjectMap'>OMap and OList</a><span class='update'>updated-8.1.4</span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.Groups'>SerializerGroups and ParserGroups</a></p>
 		<li><p><a class='doclink' href='#juneau-marshall.ContextsBuildersSessionsPropertyStores'>Contexts, Builders, Sessions, and PropertyStores</a></p>
 		<li><p><a class='doclink' href='#juneau-marshall.Transforms'>Transforms</a></p>
@@ -205,7 +205,7 @@
 		</ol>
 		<li><p><a class='doclink' href='#juneau-marshall.VirtualBeans'>Virtual Beans</a></p>
 		<li><p><a class='doclink' href='#juneau-marshall.Recursion'>Non-Tree Models and Recursion Detection</a></p>
-		<li><p><a class='doclink' href='#juneau-marshall.ParsingIntoGenericModels'>Parsing into Generic Models</a></p>
+		<li><p><a class='doclink' href='#juneau-marshall.ParsingIntoGenericModels'>Parsing into Generic Models</a><span class='update'>updated-8.1.4</span></p>
 		<li><p><a class='doclink' href='#juneau-marshall.ReadingContinuousStreams'>Reading Continuous Streams</a></p>
 		<li><p><a class='doclink' href='#juneau-marshall.URIs'>URIs</a></p>
 		<li><p><a class='doclink' href='#juneau-marshall.JacksonComparison'>Comparison with Jackson</a></p>
@@ -463,7 +463,7 @@
 		<li><p><a class='doclink' href='#juneau-rest-client.RestProxies'>REST Proxies</a></p>
 		<ol>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Remote'>@Remote</a><span class='update'>8.1.2-updated</span></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a><span class='update'><b>8.1.4-updated</b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Body'>@Body</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.FormData'>@FormData</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Query'>@Query</a></p>
@@ -1573,10 +1573,10 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ObjectMap' id='juneau-marshall.ObjectMap'>2.8 - ObjectMap and ObjectList</a></h3>
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ObjectMap' id='juneau-marshall.ObjectMap'>2.8 - OMap and OList</a><span class='update'>updated-8.1.4</span></h3>
 <div class='topic'><!-- START: 2.8 - juneau-marshall.ObjectMap -->
 <p>
-	The {@link org.apache.juneau.ObjectMap} and {@link org.apache.juneau.ObjectList} classes are generic Java 
+	The {@link org.apache.juneau.collections.OMap} and {@link org.apache.juneau.collections.OList} classes are generic Java 
 	representations of JSON objects and arrays.  
 	These classes can be used to create "unstructured" models for serialization (as opposed to "structured" 
 	models consisting of beans).  
@@ -1591,19 +1591,19 @@
 		{@link java.util.LinkedHashMap java.util.LinkedHashMap}
 		<ul>
 			<li class='jc'> 
-			{@link org.apache.juneau.ObjectMap org.apache.juneau.ObjectMap}
+			{@link org.apache.juneau.collections.OMap org.apache.juneau.collections.OMap}
 		</ul>
 	</li>
 	<li class='jc'> 
 		{@link java.util.LinkedList java.util.LinkedList}
 		<ul>
 			<li class='jc'> 
-				{@link org.apache.juneau.ObjectMap org.apache.juneau.ObjectList}
+				{@link org.apache.juneau.collections.OList org.apache.juneau.collections.OList}
 		</ul>
 	</li>
 </ul>
 <p>
-	The <l>ObjectMap</l> and <l>ObjectList</l> classes are very similar to the <l>JSONObject</l> and 
+	The <l>OMap</l> and <l>OList</l> classes are very similar to the <l>JSONObject</l> and 
 	<l>JSONArray</l> classes found in other libraries.  
 	However, the names were chosen because the concepts of <l>Maps</l> and <l>Lists</l> are already familiar to 
 	Java programmers, and these classes can be used with any of the serializers or parsers.
@@ -1613,30 +1613,30 @@
 </p>
 <ol class='spaced-list'>
 	<li>
-		Using the provided {@link org.apache.juneau.ObjectMap#serializeTo(java.io.Writer)} or 
-		{@link org.apache.juneau.ObjectList#serializeTo(java.io.Writer)} methods.
+		Using the provided {@link org.apache.juneau.collections.OMap#serializeTo(java.io.Writer)} or 
+		{@link org.apache.juneau.collections.OList#serializeTo(java.io.Writer)} methods.
 	<li>
 		Passing them to one of the {@link org.apache.juneau.serializer.Serializer} serialize methods.
 	<li>
-		Simply calling the {@link org.apache.juneau.ObjectMap#toString()} or {@link org.apache.juneau.ObjectList#toString()}
+		Simply calling the {@link org.apache.juneau.collections.OMap#toString()} or {@link org.apache.juneau.collections.OList#toString()}
 		methods which will serialize it as Simplified JSON.
 </ol>
 <p>
 	Any valid JSON can be parsed into an unstructured model consisting of generic 
-	{@link org.apache.juneau.ObjectMap} and {@link org.apache.juneau.ObjectList} objects. 
+	{@link org.apache.juneau.collections.OMap} and {@link org.apache.juneau.collections.OList} objects. 
 	
 	(In theory, any valid XML can also be parsed into an unstructured model, although this has not been 
 	officially 'tested')
 </p>
 <p class='bpcode w800'>
 	<jc>// Parse an arbitrary JSON document into an unstructered data model
-	// consisting of ObjectMaps, ObjectLists, and java primitive objects.</jc>
+	// consisting of OMaps, OLists, and java primitive objects.</jc>
 	Parser parser = JsonParser.<jsf>DEFAULT</jsf>;
 	String json = <js>"{a:{name:'John Smith',age:21},b:{name:'Joe Smith',age:42}}"</js>;
-	ObjectMap m = parser.parse(json, ObjectMap.<jk>class</jk>);
+	OMap m = parser.parse(json, OMap.<jk>class</jk>);
 
-	<jc>// Use ObjectMap API to extract data from the unstructured model.</jc>
-	<jk>int</jk> johnSmithAge = m.getObjectMap(<js>"a"</js>).getInt(<js>"age"</js>);
+	<jc>// Use OMap API to extract data from the unstructured model.</jc>
+	<jk>int</jk> johnSmithAge = m.getMap(<js>"a"</js>).getInt(<js>"age"</js>);
 	
 	<jc>// Convert it back into JSON.</jc>
 	json = JsonSerializer.<jsf>DEFAULT</jsf>.serialize(m);
@@ -1648,38 +1648,38 @@
 	json = m.toString();
 </p>
 <p>
-	The <c>ObjectMap</c> and <c>ObjectList</c> classes have many convenience features:
+	The <c>OMap</c> and <c>OList</c> classes have many convenience features:
 </p>
 <p class='bpcode w800'>	
 	<jc>// Convert the map to a bean.</jc>		
-	MyBean m = objectMap.cast(MyBean.<jk>class</jk>);
+	MyBean m = omap.cast(MyBean.<jk>class</jk>);
 			
 	<jc>// Find entries by multiple keys.</jc>
-	MyBean m = objectMap.find(MyBean.<jk>class</jk>, <js>"key1"</js>, <js>"key2"</js>);
+	MyBean m = omap.find(MyBean.<jk>class</jk>, <js>"key1"</js>, <js>"key2"</js>);
 	
 	<jc>// Fluent-style appenders.</jc>
-	objectMap.append(<js>"key1"</js>, <js>"val1"</js>).append(<js>"key2"</js>, <js>"val2"</js>);
+	omap.append(<js>"key1"</js>, <js>"val1"</js>).append(<js>"key2"</js>, <js>"val2"</js>);
 			
 	<jc>// REST-like functions for manipulating nodes in the data structure using URL-like notation.</jc>
-	objectMap.getAt(<js>"foo/bar/myBean"</js>, MyBean.<jk>class</jk>);		
-	objectMap.putAt(<js>"foo/bar/myBean"</js>, MyBean.<jk>class</jk>);		
-	objectMap.postAt(<js>"foo/bar/myListOfBeans"</js>, MyBean.<jk>class</jk>);		
-	objectMap.deleteAt(<js>"foo/bar/myBean"</js>);		
+	omap.getAt(<js>"foo/bar/myBean"</js>, MyBean.<jk>class</jk>);		
+	omap.putAt(<js>"foo/bar/myBean"</js>, MyBean.<jk>class</jk>);		
+	omap.postAt(<js>"foo/bar/myListOfBeans"</js>, MyBean.<jk>class</jk>);		
+	omap.deleteAt(<js>"foo/bar/myBean"</js>);		
 	
 	<jc>// Copy with inclusion or exclusion.</jc>
-	ObjectMap m2 = objectMap.include(<js>"key1"</js>, <js>"key2"</js>, <js>"key3"</js>);
-	ObjectMap m3 = objectMap.exclude(<js>"key1"</js>, <js>"key2"</js>, <js>"key3"</js>);
+	OMap m2 = omap.include(<js>"key1"</js>, <js>"key2"</js>, <js>"key3"</js>);
+	OMap m3 = omap.exclude(<js>"key1"</js>, <js>"key2"</js>, <js>"key3"</js>);
 	
 	<jc>// Serialize using another serializer.</jc>
-	String xml = objectMap.serializeTo(XmlSerializer.<jsf>DEFAULT</jsf>);
+	String xml = omap.serializeTo(XmlSerializer.<jsf>DEFAULT</jsf>);
 	
 	<jc>// Nested maps.</jc>
-	objectMap.setInner(objectMapInner);
+	omap.inner(omapInner);
 </p>
 
 <div class='info'>
 	As a general rule, if you do not specify a target type during parsing, or if the target type cannot be 
-	determined through reflection, the parsers automatically generate <l>ObjectMaps</l> and <l>ObjectLists</l>.
+	determined through reflection, the parsers automatically generate <l>OMaps</l> and <l>OLists</l>.
 </div>
 </div><!-- END: 2.8 - juneau-marshall.ObjectMap -->
 
@@ -1944,17 +1944,17 @@
 </p>
 <p class='bpcode w800'>
 	<jc>// Sample swap for converting a bean to a specialized map of key-value pairs.</jc>
-	<jk>public class</jk> MyBeanSwap <jk>extends</jk> PojoSwap&lt;MyBean,ObjectMap&gt; {
+	<jk>public class</jk> MyBeanSwap <jk>extends</jk> PojoSwap&lt;MyBean,OMap&gt; {
 		
 		<jc>// Converts a bean to a generic map.</jc>
 		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
-		<jk>public</jk> ObjectMap swap(BeanSession session, MyBean o) {
-			<jk>return new</jk> ObjectMap().append(<js>"foo"</js>, o.getBar());
+		<jk>public</jk> OMap swap(BeanSession session, MyBean o) {
+			<jk>return</jk> OMap.<jsm>of</jsm>(<js>"foo"</js>, o.getBar());
 		}
 		
 		<jc>// Converts the generic map back into a bean.</jc>
 		<ja>@Override</ja> <jc>/* PojoSwap */</jc>
-		<jk>public</jk> MyBean unswap(BeanSession session, ObjectMap o, ClassMeta hint) <jk>throws</jk> Exception {
+		<jk>public</jk> MyBean unswap(BeanSession session, OMap o, ClassMeta hint) <jk>throws</jk> Exception {
 			MyBean b = <jk>new</jk> MyBean();
 			b.setBar(o.getString(<js>"foo"</js>));
 			<jk>return</jk> b;
@@ -2189,13 +2189,13 @@
 </p>			
 <ul>
 	<li><c><jk>public</jk> Map toMap()</c> method.  Can be any type of map with string keys and object vals. 
-	<li><c><jk>public</jk> ObjectMap toMap()</c> method. 
+	<li><c><jk>public</jk> OMap toMap()</c> method. 
 	<li><c><jk>public</jk> Map toMap(BeanSession)</c> method.  Can be any type of map with string keys and object vals. 
-	<li><c><jk>public</jk> ObjectMap toMap(BeanSession)</c> method.
+	<li><c><jk>public</jk> OMap toMap(BeanSession)</c> method.
 	<li><c><jk>public static</jk> MyPojo fromMap(Map)</c> method.  Can be any type of map with string keys and object vals. 
-	<li><c><jk>public static</jk> MyPojo fromMap(ObjectMap)</c> method.
+	<li><c><jk>public static</jk> MyPojo fromMap(OMap)</c> method.
 	<li><c><jk>public static</jk> MyPojo fromMap(Map,BeanSession)</c> method.  Can be any type of map with string keys and object vals. 
-	<li><c><jk>public static</jk> MyPojo fromMap(ObjectMap,BeanSession)</c> method.
+	<li><c><jk>public static</jk> MyPojo fromMap(OMap,BeanSession)</c> method.
 </ul>
 <p>
 	The <c>BeanSession</c> parameter allows you access to various information about the current 
@@ -2428,7 +2428,7 @@
 	WriterSerializer s = JsonSerializer.<jsm>create</jsm>().simple().pojoSwaps(IteratorSwap.<jk>class</jk>).build();
 	
 	<jc>// Construct an iterator we want to serialize.</jc>
-	Iterator i = <jk>new</jk> ObjectList(1,2,3).iterator();
+	Iterator i = OList.<jsm>of</jsm>(1,2,3).iterator();
 	
 	<jc>// Serialize our Iterator</jc>
 	String json = s.serialize(i);		<jc>// Produces "[1,2,3]"</jc>
@@ -4053,7 +4053,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ParsingIntoGenericModels' id='juneau-marshall.ParsingIntoGenericModels'>2.16 - Parsing into Generic Models</a></h3>
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-marshall.ParsingIntoGenericModels' id='juneau-marshall.ParsingIntoGenericModels'>2.16 - Parsing into Generic Models</a><span class='update'>updated-8.1.4</span></h3>
 <div class='topic'><!-- START: 2.16 - juneau-marshall.ParsingIntoGenericModels -->
 <p>
 	The Juneau parsers are not limited to parsing back into the original bean classes.
@@ -4063,15 +4063,15 @@
 </p>
 <p>
 	You can parse into any <c>Map</c> type (e.g. <c>HashMap</c>, <c>TreeMap</c>), but
-	using {@link org.apache.juneau.ObjectMap} is recommended since it has many convenience methods
+	using {@link org.apache.juneau.collections.OMap} is recommended since it has many convenience methods
 	for converting values to various types.
 	The same is true when parsing collections.  You can use any Collection (e.g. <c>HashSet</c>, 
 	<c>LinkedList</c>) or array (e.g. <c>Object[]</c>, <c>String[]</c>, 
-	<c>String[][]</c>), but using {@link org.apache.juneau.ObjectList} is recommended.
+	<c>String[][]</c>), but using {@link org.apache.juneau.collections.OList} is recommended.
 </p>
 <p>
 	When the map or list type is not specified, or is the abstract <c>Map</c>, <c>Collection</c>, 
-	or <c>List</c> types, the parser will use <c>ObjectMap</c> and <c>ObjectList</c> by 
+	or <c>List</c> types, the parser will use <c>OMap</c> and <c>OList</c> by 
 	default.
 </p>
 <p>
@@ -4099,11 +4099,11 @@
 	}
 </p>
 <p>
-	We can parse this into a generic <c>ObjectMap</c>:
+	We can parse this into a generic <c>OMap</c>:
 </p>
 <p class='bpcode w800'>	
 	<jc>// Parse JSON into a generic POJO model.</jc>
-	ObjectMap m = JsonParser.<jsf>DEFAULT</jsf>.parse(json, ObjectMap.<jk>class</jk>);
+	OMap m = JsonParser.<jsf>DEFAULT</jsf>.parse(json, OMap.<jk>class</jk>);
 
 	<jc>// Convert it back to JSON.</jc>
 	String json = SimpleJsonSerializer.<jsf>DEFAULT_READABLE</jsf>.serialize(m);
@@ -4135,12 +4135,12 @@
 	}
 </p>
 <p>
-	Once parsed into a generic model, various convenience methods are provided on the <c>ObjectMap</c>
-		and <c>ObjectList</c> classes to retrieve values:
+	Once parsed into a generic model, various convenience methods are provided on the <c>OMap</c>
+		and <c>OList</c> classes to retrieve values:
 </p>
 <p class='bpcode w800'>
 	<jc>// Parse JSON into a generic POJO model.</jc>
-	ObjectMap m = JsonParser.<jsf>DEFAULT</jsf>.parse(json, ObjectMap.<jk>class</jk>);
+	OMap m = JsonParser.<jsf>DEFAULT</jsf>.parse(json, OMap.<jk>class</jk>);
 
 	<jc>// Get some simple values.</jc>
 	String name = m.getString(<js>"name"</js>);
@@ -4154,7 +4154,7 @@
 	Calendar birthDate = m.get(swap, <js>"birthDate"</js>);
 
 	<jc>// Get the addresses.</jc>
-	ObjectList addresses = m.getObjectList(<js>"addresses"</js>);
+	OList addresses = m.getList(<js>"addresses"</js>);
 
 	<jc>// Get the first address and convert it to a bean.</jc>
 	Address address = addresses.get(Address.<jk>class</jk>, 0);
@@ -4193,8 +4193,8 @@
 	Reader r;
 
 	r = new StringReader(<js>"{foo:'bar'}{baz:'qux'}"</js>);
-	x = p.parse(r, ObjectMap.<jk>class</jk>);  <jc>// {foo:'bar'}</jc>
-	x = p.parse(r, ObjectMap.<jk>class</jk>);  <jc>// {baz:'qux'}</jc>
+	x = p.parse(r, OMap.<jk>class</jk>);  <jc>// {foo:'bar'}</jc>
+	x = p.parse(r, OMap.<jk>class</jk>);  <jc>// {baz:'qux'}</jc>
 
 	r = reader(<js>"[123][456]"</js>);
 	x = p.parse(r, <jk>int</jk>[].<jk>class</jk>);  <jc>// [123]</jc>
@@ -5021,13 +5021,14 @@
 <h5 class='figure'>Examples:</h5>
 <p class='bpcode w800'>
 	<jc>// Some free-form JSON.</jc>
-	ObjectMap m = <jk>new</jk> ObjectMap()
-		.append(<js>"foo"</js>, <js>"x1"</js>)
-		.append(<js>"_bar"</js>, <js>"x2"</js>)
-		.append(<js>" baz "</js>, <js>"x3"</js>)
-	 	.append(<js>"123"</js>, <js>"x4"</js>)
-	 	.append(<js>"return"</js>, <js>"x5"</js>);
-	 	.append(<js>""</js>, <js>"x6"</js>);
+	OMap m = OMap.of(
+		<js>"foo"</js>, <js>"x1"</js>,
+		<js>"_bar"</js>, <js>"x2"</js>,
+		<js>" baz "</js>, <js>"x3"</js>,
+		<js>"123"</js>, <js>"x4"</js>,
+		<js>"return"</js>, <js>"x5"</js>,
+		<js>""</js>, <js>"x6"</js>
+	);
 </p>
 <p class='bpcode w800'>
 	<joc>// Serialized to standard JSON</joc>
@@ -9319,14 +9320,12 @@
 	Under-the-covers, this gets converted to the following schema object:
 </p>
 <p class='bpcode w800'>
-	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
-
-	HttpPartSchema schema = <jsm>create</jsm>()
+	HttpPartSchema schema = HttpPartSchema.<jsm>create</jsm>()
 		.items(
-			<jsm>create</jsm>()
+			HttpPartSchema.<jsm>create</jsm>()
 				.collectionFormat(<js>"pipes"</js>)
 				.items(
-					<jsm>create</jsm>()
+					HttpPartSchema.<jsm>create</jsm>()
 						.collectionFormat(<js>"csv"</js>)
 						.type(<js>"integer"</js>) 
 						.format(<js>"int64"</js>)
@@ -10036,7 +10035,7 @@
 		+ <js>"f7=1,f8=2,f9=1.0,f10=1.0,f11=true,fExtra=1)"</js>;
 	
 	HttpPartParser p = OpenApiParser.<jsf>DEFAULT</jsf>;
-	ObjectMap m = p.parse(schema, input, ObjectMap.<jk>class</jk>);
+	OMap m = p.parse(schema, input, OMap.<jk>class</jk>);
 </p>
 <ul class='notes'>
 	<li>
@@ -12074,12 +12073,12 @@
 	List&lt;Address&gt; addresses = c.getObject(<js>"addresses"</js>, ArrayList.<jk>class</jk>, Address.<jk>class</jk>);
 </p>
 <p>
-	Oftentimes, it might be useful to parse into the {@link org.apache.juneau.ObjectList} and {@link org.apache.juneau.ObjectMap}
+	Oftentimes, it might be useful to parse into the {@link org.apache.juneau.collections.OList} and {@link org.apache.juneau.collections.OMap}
 	classes that provide the various convenience methods for working with JSON-like data structures:
 </p>
 <p class='bpcode w800'>
-	ObjectMap m = c.getObject(<js>"key1"</js>, ObjectMap.<jk>class</jk>);
-	ObjectList l = c.getObject(<js>"key2"</js>, ObjectList.<jk>class</jk>);
+	OMap m = c.getObject(<js>"key1"</js>, OMap.<jk>class</jk>);
+	OList l = c.getObject(<js>"key2"</js>, OList.<jk>class</jk>);
 </p>
 </div><!-- END: 5.2.4 - juneau-config.EntryTypes.Collections -->
 
@@ -12351,7 +12350,7 @@
 	<jc>// Example usage</jc>
 	Config c = Config.<jsm>create</jsm>(<js>"MyConfig.cfg"</js>).build();
 	
-	ObjectMap m = c.getSectionAsMap(<js>"MyAddress"</js>);
+	OMap m = c.getSectionAsMap(<js>"MyAddress"</js>);
 	
 	String street = m.getString(<js>"street"</js>);
 	String city = m.getString(<js>"city"</js>);
@@ -14829,7 +14828,7 @@
 	It wraps the request attributes in a {@link java.util.Map} interface and provides several convenience methods.
 </p>
 <p>
-	The <c>RequestAttributes</c> object extends from {@link org.apache.juneau.ObjectMap} so all the convenience methods defined on
+	The <c>RequestAttributes</c> object extends from {@link org.apache.juneau.collections.OMap} so all the convenience methods defined on
 	that API are also available when working with request attributes: 
 </p>
 <p class='bpcode w800'>
@@ -16458,7 +16457,7 @@
  	at runtime, and CGLIB was written before generics were introduced into Java and is a virtually-unsupported library.
  	Therefore, parameterized types will often be stripped from class definitions and replaced with unparameterized types
 	(e.g. <code>List</code>).  Under these circumstances, you are likely to get <code>ClassCastExceptions</code>
-	when trying to access generalized <code>ObjectMaps</code> as beans.  The best solution to this issue is to either
+	when trying to access generalized <code>OMaps</code> as beans.  The best solution to this issue is to either
 	specify the parameter as a bean array (e.g. <code>MyBean[]</code>) or declare the method as final so that CGLIB
 	will not try to recompile it.
 </div>
@@ -16642,7 +16641,7 @@
  	at runtime, and CGLIB was written before generics were introduced into Java and is a virtually-unsupported library.
  	Therefore, parameterized types will often be stripped from class definitions and replaced with unparameterized types
 	(e.g. <code>List</code>).  Under these circumstances, you are likely to get <code>ClassCastExceptions</code>
-	when trying to access generalized <code>ObjectMaps</code> as beans.  The best solution to this issue is to either
+	when trying to access generalized <code>OMaps</code> as beans.  The best solution to this issue is to either
 	specify the parameter as a bean array (e.g. <code>MyBean[]</code>) or declare the method as final so that CGLIB
 	will not try to recompile it.
 </div>
@@ -22573,8 +22572,8 @@
 		String url = <js>"http://localhost:10000/addressBook"</js>;
 		
 		<jc>// Do a REST GET against a remote REST interface and convert
-		// the response to an unstructured ObjectMap object.</jc>
-		ObjectMap m1 = client.get(url).run().getBody().as(ObjectMap.<jk>class</jk>);
+		// the response to an unstructured OMap object.</jc>
+		OMap m1 = client.get(url).run().getBody().as(OMap.<jk>class</jk>);
 		
 		<jc>// Same as above, except parse the JSON as a bean.</jc>
 		AddressBook a2 = client.get(url).run().getBody().as(AddressBook.<jk>class</jk>);
@@ -22661,17 +22660,17 @@
 				
 		<jc>// GET request, getting output as an untyped map</jc>
 		<jc>// Input must be an object (e.g. "{...}")</jc>
-		ObjectMap m = client
+		OMap m = client
 			.get(<js>"http://localhost:10000/addressBook/0"</js>)
 			.run()
-			.getBody().as(ObjectMap.<jk>class</jk>);
+			.getBody().as(OMap.<jk>class</jk>);
 				
 		<jc>// GET request, getting output as an untyped list</jc>
 		<jc>// Input must be an array (e.g. "[...]")</jc>
-		ObjectList l = client
+		OList l = client
 			.get(<js>"http://localhost:10000/addressBook"</js>)
 			.run()
-			.getBody().as(ObjectList.<jk>class</jk>);
+			.getBody().as(OList.<jk>class</jk>);
 				
 		<jc>// GET request, getting output as a parsed bean</jc>
 		<jc>// Input must be an object (e.g. "{...}")</jc>
@@ -22884,7 +22883,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.RemoteMethod' id='juneau-rest-client.RestProxies.RemoteMethod'>9.1.2 - @RemoteMethod</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.RemoteMethod' id='juneau-rest-client.RestProxies.RemoteMethod'>9.1.2 - @RemoteMethod</a><span class='update'><b>8.1.4-updated</b></span></h4>
 <div class='topic'><!-- START: 9.1.2 - juneau-rest-client.RestProxies.RemoteMethod -->
 <p>
 	The {@link org.apache.juneau.http.remote.RemoteMethod @RemoteMethod} annotation is applied to methods
@@ -22996,7 +22995,7 @@
 </p>
 <ul class='spaced-list'>
 	<li>
-		<jk>void</jk> 
+		<jk>void</jk>/{@link java.lang.Void}
 		- Don't parse any response.  
 		<br>Note that the method will still throw a runtime exception if an error HTTP status is returned.
 	<li>
@@ -23014,6 +23013,8 @@
 	<li>
 		{@link java.io.InputStream} 
 		- Returns access to the raw input stream of the response.
+	<li>
+		A {@link java.util.concurrent.Future} or {@link java.util.concurrent.CompletableFuture} of anything on this list. 
 </ul>
 
 <p>
@@ -23577,7 +23578,7 @@
 	
 		<ja>@Query</ja>
 	 	<jk>public</jk> Map&lt;String,Object&gt; getQueryParams() {
-	 		<jk>return new</jk> ObjectMap().append(<js>"debug"</js>, <jk>true</jk>);
+	 		<jk>return</jk> OMap.<jsm>of</jsm>(<js>"debug"</js>, <jk>true</jk>);
 	 	}
 	 	
 	 	<ja>@Header</ja>(<js>"E-Tag"</js>)
@@ -23642,7 +23643,7 @@
 	
 		<ja>@Override</ja>
 	 	<jk>public</jk> Map&lt;String,Object&gt; getQueryParams() {
-	 		<jk>return new</jk> ObjectMap().append(<js>"debug"</js>, <jk>true</jk>);
+	 		<jk>return</jk> OMap.<jsm>of</jsm>(<js>"debug"</js>, <jk>true</jk>);
 	 	}
 	 	
 		<ja>@Override</ja>
@@ -25099,7 +25100,7 @@
 <p>
 	The manifest file can be retrieved using the the {@link org.apache.juneau.microservice.Microservice#getManifest()} method which 
 	provides an API for accessing manifest file entries.
-	This method returns an instance of {@link org.apache.juneau.utils.ManifestFile} which extends from {@link org.apache.juneau.ObjectMap} allowing
+	This method returns an instance of {@link org.apache.juneau.utils.ManifestFile} which extends from {@link org.apache.juneau.collections.OMap} allowing
 	you to retrieve entries as any data types supported by that class.
 </p>
 <h5 class='figure'>Example:</h5>
@@ -27659,7 +27660,7 @@
 	<jk>public class</jk> ConfigResource <jk>extends</jk> BasicRestServlet { 
 		
 		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>, description=<js>"Show contents of config file."</js>) 
-		<jk>public</jk> ObjectMap getConfig() <jk>throws</jk> Exception {
+		<jk>public</jk> OMap getConfig() <jk>throws</jk> Exception {
 			<jk>return</jk> getServletConfig().getConfig().asMap();
 		}
 		
@@ -27687,7 +27688,7 @@
 				<js>"]"</js>
 			}
 		) 
-		<jk>public</jk> ObjectMap getConfigSection(<ja>@Path</ja>(<js>"section"</js>) String section) <jk>throws</jk> Exception { 
+		<jk>public</jk> OMap getConfigSection(<ja>@Path</ja>(<js>"section"</js>) String section) <jk>throws</jk> Exception { 
 			<jk>return</jk> getSection(section); 
 		} 
 		
@@ -27737,7 +27738,7 @@
 				<js>"]"</js>
 			}
 		) 
-		<jk>public</jk> ObjectMap setConfigSection(<ja>@Path</ja>(<js>"section"</js>) String section, <ja>@Body</ja> Map&lt;String,String&gt; contents) <jk>throws</jk> Exception { 
+		<jk>public</jk> OMap setConfigSection(<ja>@Path</ja>(<js>"section"</js>) String section, <ja>@Body</ja> Map&lt;String,String&gt; contents) <jk>throws</jk> Exception { 
 			getServletConfig().getConfig().setSection(section, contents); 
 			<jk>return</jk> getSection(section); 
 		} 
@@ -27757,8 +27758,8 @@
 			<jk>return</jk> getSection(section).getString(key); 
 		} 
 		
-		<jk>private</jk> ObjectMap getSection(String name) { 
-			ObjectMap m = getServletConfig().getConfig().getSectionMap(name); 
+		<jk>private</jk> OMap getSection(String name) { 
+			OMap m = getServletConfig().getConfig().getSectionMap(name); 
 			<jk>if</jk> (m == <jk>null</jk>) 
 				<jk>throw new</jk> RestException(<jsf>SC_NOT_FOUND</jsf>, <js>"Section not found."</js>); 
 			<jk>return</jk> m; 
@@ -29233,7 +29234,7 @@
 		<td></td>
 		<td>{@link org.apache.juneau.BeanContext#BEAN_beanFilters BEAN_beanFilters}</td>
 		<td>Bean filters.</td>
-		<td style='max-width:250px;overflow:hidden'><c>List&lt;Class&gt;</c></td>
+		<td style='max-width:250px;overflow:hidden'><c>List&lt;Object&gt;</c></td>
 	</tr>
 	<tr>
 		<td></td>
@@ -29555,6 +29556,12 @@
 	</tr>
 	<tr>
 		<td></td>
+		<td>{@link org.apache.juneau.html.HtmlDocSerializer#HTMLDOC_asideFloat HTMLDOC_asideFloat}</td>
+		<td>Float aside section contents.</td>
+		<td style='max-width:250px;overflow:hidden'>{@link AsideFloat}</td>
+	</tr>
+	<tr>
+		<td></td>
 		<td>{@link org.apache.juneau.html.HtmlDocSerializer#HTMLDOC_footer HTMLDOC_footer}</td>
 		<td>Footer section contents.</td>
 		<td style='max-width:250px;overflow:hidden'><c>List&lt;String&gt;</c></td>
@@ -29626,6 +29633,12 @@
 		<td style='max-width:250px;overflow:hidden'><c>List&lt;{@link org.apache.juneau.html.HtmlWidget}|Class&lt;{@link org.apache.juneau.html.HtmlWidget}&gt;&gt;</c></td>
 	</tr>
 	<tr>
+		<td>{@link org.apache.juneau.html.HtmlDocSerializerBuilder}</td>
+		<td>{@link org.apache.juneau.html.HtmlDocSerializer#HTMLDOC_asideFloat HTMLDOC_asideFloat}</td>
+		<td>Float aside section contents.</td>
+		<td style='max-width:250px;overflow:hidden'>{@link AsideFloat}</td>
+	</tr>
+	<tr>
 		<td>{@link org.apache.juneau.html.HtmlSerializer}</td>
 		<td>{@link org.apache.juneau.html.HtmlSerializer#HTML_addBeanTypes HTML_addBeanTypes}</td>
 		<td>Add <js>"_type"</js> properties when needed.</td>
@@ -29707,7 +29720,7 @@
 		<td></td>
 		<td>{@link org.apache.juneau.jsonschema.JsonSchemaGenerator#JSONSCHEMA_defaultSchemas JSONSCHEMA_defaultSchemas}</td>
 		<td>Default schemas.</td>
-		<td style='max-width:250px;overflow:hidden'><c>Map&lt;String,{@link org.apache.juneau.ObjectMap}&gt;</c></td>
+		<td style='max-width:250px;overflow:hidden'><c>Map&lt;String,{@link org.apache.juneau.collections.OMap}&gt;</c></td>
 	</tr>
 	<tr>
 		<td></td>
@@ -29746,6 +29759,12 @@
 		<td style='max-width:250px;overflow:hidden'><jk>boolean</jk></td>
 	</tr>
 	<tr>
+		<td>{@link org.apache.juneau.oapi.OpenApiCommon}</td>
+		<td>{@link org.apache.juneau.oapi.OpenApiCommon#OAPI_collectionFormat OAPI_collectionFormat}</td>
+		<td>Default collection format for HTTP parts.</td>
+		<td style='max-width:250px;overflow:hidden'>{@link org.apache.juneau.httppart.HttpPartCollectionFormat}</td>
+	</tr>
+	<tr>
 		<td>{@link org.apache.juneau.serializer.OutputStreamSerializer}</td>
 		<td>{@link org.apache.juneau.serializer.OutputStreamSerializer#OSSERIALIZER_binaryFormat OSSERIALIZER_binaryFormat}</td>
 		<td>Binary output format.</td>
@@ -30061,7 +30080,7 @@
 		<td></td>
 		<td>{@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_headers RESTCLIENT_headers}</td>
 		<td>Request headers.</td>
-		<td style='max-width:250px;overflow:hidden'><c>List&lt;{@link org.apache.http.Header} | {@link org.apache.juneau.http.HttpHeader} | {@link org.apache.http.NameValuePair}&gt;</c></td>
+		<td style='max-width:250px;overflow:hidden'><c>List&lt;{@link org.apache.http.Header} | {@link org.apache.http.NameValuePair}&gt;</c></td>
 	</tr>
 	<tr>
 		<td></td>
@@ -30089,6 +30108,12 @@
 	</tr>
 	<tr>
 		<td></td>
+		<td>{@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_parsers RESTCLIENT_parsers}</td>
+		<td>Parsers.</td>
+		<td style='max-width:250px;overflow:hidden'><ul><li><c>Class&lt;? <jk>extends</jk> {@link org.apache.juneau.parser.Parser}&gt;</c><li>{@link org.apache.juneau.parser.Parser}</ul></td>
+	</tr>
+	<tr>
+		<td></td>
 		<td>{@link org.apache.juneau.rest.client.RestClient#RESTCLIENT_partParser RESTCLIENT_partParser}</td>
 		<td>Part parser.</td>
 		<td style='max-width:250px;overflow:hidden'><ul><li><c>Class&lt;{@link org.apache.juneau.httppart.HttpPartParser}&gt;</c><li>{@link org.apache.juneau.httppart.HttpPartParser}</ul></td>
@@ -30148,6 +30173,12 @@
 		<td style='max-width:250px;overflow:hidden'><ul><li><c>Class&lt;{@link org.apache.juneau.serializer.Serializer}&gt;</c><li>{@link org.apache.juneau.serializer.Serializer}</ul></td>
 	</tr>
 	<tr>
+		<td></td>
+		<td>{@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_serializers RESTCLIENT_serializers}</td>
+		<td>Serializers.</td>
+		<td style='max-width:250px;overflow:hidden'><ul><li><c>Class&lt;? <jk>extends</jk> {@link org.apache.juneau.serializer.Serializer}&gt;</c><li>{@link org.apache.juneau.serializer.Serializer}</ul></td>
+	</tr>
+	<tr>
 		<td>{@link org.apache.juneau.rest.RestContext}</td>
 		<td>{@link org.apache.juneau.rest.RestContext#REST_allowBodyParam REST_allowBodyParam}</td>
 		<td>Allow body URL parameter.</td>
@@ -30227,6 +30258,12 @@
 	</tr>
 	<tr>
 		<td></td>
+		<td>{@link org.apache.juneau.rest.RestContext#REST_debugOn REST_debugOn}</td>
+		<td>Debug mode on specified classes/methods.</td>
+		<td style='max-width:250px;overflow:hidden'><c>String</c> (comma-delimited)</td>
+	</tr>
+	<tr>
+		<td></td>
 		<td>{@link org.apache.juneau.rest.RestContext#REST_defaultCharset REST_defaultCharset}</td>
 		<td>Default character encoding.</td>
 		<td style='max-width:250px;overflow:hidden'><c>String</c></td>
@@ -30449,6 +30486,12 @@
 	</tr>
 	<tr>
 		<td></td>
+		<td>{@link org.apache.juneau.rest.RestMethodContext#RESTMETHOD_paths RESTMETHOD_paths}</td>
+		<td>Resource method paths.</td>
+		<td style='max-width:250px;overflow:hidden'><c>String[]</c></td>
+	</tr>
+	<tr>
+		<td></td>
 		<td>{@link org.apache.juneau.rest.RestMethodContext#RESTMETHOD_path RESTMETHOD_path}</td>
 		<td>Resource method path.</td>
 		<td style='max-width:250px;overflow:hidden'><c>String</c></td>
@@ -30485,6 +30528,12 @@
 	</tr>
 	<tr>
 		<td></td>
+		<td>{@link org.apache.juneau.serializer.Serializer#SERIALIZER_keepNullProperties SERIALIZER_keepNullProperties}</td>
+		<td>Don't trim null bean property values.</td>
+		<td style='max-width:250px;overflow:hidden'><jk>boolean</jk></td>
+	</tr>
+	<tr>
+		<td></td>
 		<td>{@link org.apache.juneau.serializer.Serializer#SERIALIZER_listener SERIALIZER_listener}</td>
 		<td>Serializer listener.</td>
 		<td style='max-width:250px;overflow:hidden'><c>Class&lt;{@link org.apache.juneau.serializer.SerializerListener}&gt;</c></td>
@@ -30761,8 +30810,8 @@
 </p>
 <p class='bpcode w800'>
 	<jc>// Don't do this!</jc>
-	<jk>public class</jk> MyInsecureSwap <jk>extends</jk> PojoSwap&lt;ObjectMap,Object&gt; {
-		<jk>public</jk> Object swap(BeanSession session, ObjectMap input) <jk>throws</jk> Exception {
+	<jk>public class</jk> MyInsecureSwap <jk>extends</jk> PojoSwap&lt;OMap,Object&gt; {
+		<jk>public</jk> Object swap(BeanSession session, OMap input) <jk>throws</jk> Exception {
 			<jc>// Security hole!</jc>
 			<jk>return</jk> Class.<jsf>forName</jsf>(input.getString(<js>"class"</js>)).newInstance();
 		}
@@ -37781,8 +37830,6 @@
 		Several bug fixes in the {@link HtmlSerializer} and {@link HtmlParser} classes around the handling of 
 		collections and arrays of beans with <c><ja>@Bean</ja>(typeName)</c> annotations.
 	<li>
-		New {@link org.apache.juneau.ObjectMap(Object...)} constructor.
-	<li>
 		New swaps auto-added to all serializers/parsers:
 		<ul>
 			<li class='jc'>{@link org.apache.juneau.transforms.MatchResultSwap} 
@@ -37791,11 +37838,292 @@
 	<li>
 		{@link org.apache.juneau.html.annotation.Html#noTableHeaders} now can be applied to collections of beans.
 	<li>
+		New {@link org.apache.juneau.html.annotation.HtmlDoc#asideFloat} setting so that you can position the contents of the aside section on the page.
+	<li>
+		Various minor fixes surrounding HTML serialization.
+		<ul>
+			<li>Collections of beans that were supposed to be serialized as tables were being serialized as lists.
+			<li>Collections of beans with <c><ja>@Bean</ja>(bpi)</c> were not being serialized in the correct column order.			
+		</ul>
+	<li>
+		Fixed a bug where a copy constructor can erroneously be recognized as a builder constructor if the class also
+		has a static <c>create</c> method.  Net effect was that the copy constructor would needlessly be called during parsing.
+	<li>
+		New {@link org.apache.juneau.collections} package containing various convenience fluent-style collection classes:
+		<ul>
+			<li class='jc'>{@link org.apache.juneau.collections.AList}
+			<li class='jc'>{@link org.apache.juneau.collections.ASet}
+			<li class='jc'>{@link org.apache.juneau.collections.ASortedSet}
+			<li class='jc'>{@link org.apache.juneau.collections.AMap}
+			<li class='jc'>{@link org.apache.juneau.collections.ASortedMap}
+			<li class='jc'>{@link org.apache.juneau.collections.OMap}
+			<li class='jc'>{@link org.apache.juneau.collections.OList}
+		</ul>
+	<li>
+		{@link org.apache.juneau.ObjectMap} is being deprecated and replaced with {@link org.apache.juneau.collections.OMap}.
+	<li>
+		{@link org.apache.juneau.ObjectList} is being deprecated and replaced with {@link org.apache.juneau.collections.OList}.
+	<li>
+		All classes in the {@link org.apache.juneau.http.response} and {@link org.apache.juneau.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>
+		New annotations for multi-part support:
+		<ul>
+			<li class='jm'>{@link org.apache.juneau.http.annotation.Header#multi()}
+			<li class='jm'>{@link org.apache.juneau.http.annotation.Query#multi()}
+			<li class='jm'>{@link org.apache.juneau.http.annotation.FormData#multi()}
+		</ul>
+	<li>
+		{@link org.apache.juneau.BeanContext#BEAN_ignoreRecursions} setting no longer requires {@link org.apache.juneau.BeanContext#BEAN_detectRecursions} 
+		to be enabled.
+	<li>
+		Fixed bug in JSON/UON/URL-Encoding serializers where indentation was not correct of first line when {@link org.apache.juneau.BeanTraverseContext#BEANTRAVERSE_initialIndent}
+		used.
+	<li>
+		Fixed bug in JSON/UON/URL-Encoding serializers where properties past the max depth were being serialized as null instead
+		of being treated as null and not being serialized at all.
+	<li>
+		Fixed bug in HTML serializer where tables of maps were not sorted if <jsf>SERIALIZER_sortMaps</jsf> was specified.
+	<li>
+		<jsf>SERIALIZER_trimNullProperties</jsf> has been replaced with {@link org.apache.juneau.serializer.Serializer#SERIALIZER_keepNullProperties SERIALIZER_keepNullProperties}.
+	<li>
+		Improvements to OpenAPI serializer and parser:
+		<ul>
+			<li>Collection format can now be specified on OBJECTs to allow key/value pairs to be delimited with the same support as ARRAYs.
+			<li>New {@link org.apache.juneau.oapi.OpenApiCommon#OAPI_format OAPI_format} and {@link org.apache.juneau.oapi.OpenApiCommon#OAPI_collectionFormat OAPI_collectionFormat} properties.
+		</ul>
+	<li>
+		Convenience methods added to {@link org.apache.juneau.httppart.HttpPartSchema} and related classes to simplify schema definitions:
+		<p class='bpcode w800'>
+	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+		
+	<jc>// Old</jc>
+	HttpPartSchema s = <jsm>schema</jsm>(<js>"object"</js>)
+		.property(<js>"f01"</js>, <jsm>schema</jsm>(<js>"array"</js>).collectionFormat(<js>"pipes"</js>).items(<jsm>schema</jsm>(<js>"string"</js>)))
+		.property(<js>"f02"</js>, <jsm>schema</jsm>(<js>"array"</js>).collectionFormat(<js>"pipes"</js>).items(<jsm>schema</jsm>(<js>"string"</js>, <js>"byte"</js>)))
+		.property(<js>"f03"</js>, <jsm>schema</jsm>(<js>"array"</js>).collectionFormat(<js>"pipes"</js>).items(<jsm>schema</jsm>(<js>"string"</js>, <js>"date-time"</js>)))
+		.build();
+
+	<jc>// New</jc>
+	HttpPartSchema s = <jsm>tObject</jsm>()
+		.p(<js>"f01"</js>, <jsm>tArray</jsm>(<jsm>tString()</jsm>))
+		.p(<js>"f02"</js>, <jsm>tArray</jsm>(<jsm>tByte()</jsm>))
+		.p(<js>"f03"</js>, <jsm>tArray</jsm>(<jsm>tDateTime()</jsm>))
+		.build();
+		</p>
+	<li>
+		Fixes where the bean method/constructor visibility wasn't being used when finding swap methods and constructors.
+	<li>
 		HTML-Schema support is being deprecated due to low-use and difficulty in maintaining.  It will be removed in 9.0.
+	<li>
+		<c>JuneauLogger</c> class is being deprecated.  Improvements in logging in Java 8 make it obsolete.
+	<li>
+		Bean filters can now be specified programmatically through a builder API.
+		<p class='bpcode w800'>
+	<jc>// Create a JSON serializer that only includes specified fields on a specific class.</jc>
+	WriterSerializer s = JsonSerializer
+		.<jsm>create</jsm>()
+		.beanFilters(BeanFilter.<jsm>create</jsm>(MyBean.<jk>class</jk>).bpi(<js>"foo,bar,baz"</js>).build())
+		.build();
+		</p>
 </ul>
 
 <h5 class='topic w800'>juneau-rest-server</h5>
 <ul class='spaced-list'>
+	<li>
+		{@link org.apache.juneau.rest.annotation.Rest}-annotated classes can now implement the following interfaces directly instead of having
+		to define secondary classes and hook them up through annotations:
+		<ul>
+			<li class='jic'>{@link org.apache.juneau.rest.RestCallHandler} - Normally defined through {@link org.apache.juneau.rest.annotation.Rest#callHandler() @Rest.callHandler()}.
+			<li class='jic'>{@link org.apache.juneau.rest.RestInfoProvider} - Normally defined through {@link org.apache.juneau.rest.annotation.Rest#infoProvider() @Rest.infoProvider()}.
+			<li class='jic'>{@link org.apache.juneau.rest.RestCallLogger} - Normally defined through {@link org.apache.juneau.rest.annotation.Rest#callLogger() @Rest.callLogger()}.
+			<li class='jic'>{@link org.apache.juneau.utils.ClasspathResourceFinder} - Normally defined through {@link org.apache.juneau.rest.annotation.Rest#classpathResourceFinder() @Rest.classpathResourceFinder()}.
+		</ul>
+	<li>
+		{@link org.apache.juneau.rest.RestServlet} and {@link org.apache.juneau.rest.BasicRest} now implement the {@link org.apache.juneau.rest.RestCallHandler}, {@link org.apache.juneau.rest.RestInfoProvider}, {@link org.apache.juneau.rest.RestCallLogger}, {@link RestResourceResolver},
+		and {@link org.apache.juneau.utils.ClasspathResourceFinder} interfaces directly and provides the same functionality as {@link org.apache.juneau.rest.BasicRestCallHandler}, 
+		{@link org.apache.juneau.rest.BasicRestInfoProvider}, {@link org.apache.juneau.rest.BasicRestCallLogger}, {@link BasicRestResourceResolver}, and {@link org.apache.juneau.utils.ClasspathResourceFinderBasic}.  
+		
+		This makes it easier to tweak these methods without having to implement your own classes.
+		<br>The methods added for {@link org.apache.juneau.rest.RestCallHandler} are:
+		<ul>
+			<li class='jac'>{@link org.apache.juneau.rest.RestServlet}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#execute(HttpServletRequest, HttpServletResponse) execute(HttpServletRequest, HttpServletResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#createCall(HttpServletRequest, HttpServletResponse) createCall(HttpServletRequest, HttpServletResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#createRequest(RestCall) createRequest(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#createResponse(RestCall) createResponse(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#handleResponse(RestCall) handleResponse(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#handleNotFound(RestCall) handleNotFound(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#handleError(RestCall,Throwable) handleError(RestCall,Throwable)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#convertThrowable(Throwable) throwable(Throwable)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getSessionObjects(RestRequest req, RestResponse res) getSessionObjects(RestRequest,RestResponse)}
+			</ul>
+			<li class='jac'>{@link org.apache.juneau.rest.BasicRest}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#execute(HttpServletRequest, HttpServletResponse) execute(HttpServletRequest, HttpServletResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#createCall(HttpServletRequest, HttpServletResponse) createCall(HttpServletRequest, HttpServletResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#createRequest(RestCall) createRequest(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#createResponse(RestCall) createResponse(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#handleResponse(RestCall) handleResponse(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#handleNotFound(RestCall) handleNotFound(RestCall)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#handleError(RestCall,Throwable) handleError(RestCall,Throwable)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#convertThrowable(Throwable) throwable(Throwable)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getSessionObjects(RestRequest req, RestResponse res) getSessionObjects(RestRequest,RestResponse)}
+			</ul>
+		</ul>
+		<br>The methods added for {@link org.apache.juneau.rest.RestInfoProvider} are:
+		<ul>
+			<li class='jac'>{@link org.apache.juneau.rest.RestServlet}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getSwagger(RestRequest) getSwagger(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getSiteName(RestRequest) getSiteName(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getTitle(RestRequest) getTitle(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getDescription(RestRequest) getDescription(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getMethodSummary(Method,RestRequest) getMethodSummary(Method,RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#getMethodDescription(Method,RestRequest) getMethodDescription(Method,RestRequest)}
+			</ul>
+			<li class='jac'>{@link org.apache.juneau.rest.BasicRest}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getSwagger(RestRequest) getSwagger(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getSiteName(RestRequest) getSiteName(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getTitle(RestRequest) getTitle(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getDescription(RestRequest) getDescription(RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getMethodSummary(Method,RestRequest) getMethodSummary(Method,RestRequest)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#getMethodDescription(Method,RestRequest) getMethodDescription(Method,RestRequest)}
+			</ul>
+		</ul>
+		<br>The methods added for {@link org.apache.juneau.rest.RestCallLogger} are:
+		<ul>
+			<li class='jac'>{@link org.apache.juneau.rest.RestServlet}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#log(RestCallLoggerConfig,HttpServletRequest,HttpServletResponse) log(RestCallLoggerConfig,HttpServletRequest,HttpServletResponse)}
+			</ul>
+			<li class='jac'>{@link org.apache.juneau.rest.BasicRest}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#log(RestCallLoggerConfig,HttpServletRequest,HttpServletResponse) log(RestCallLoggerConfig,HttpServletRequest,HttpServletResponse)}
+			</ul>
+		</ul>
+		<br>The methods added for {@link org.apache.juneau.utils.ClassspathResourceFinder} are:
+		<ul>
+			<li class='jac'>{@link org.apache.juneau.rest.RestServlet}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#findResource(Class,String,Locale) findResource(Class,String,Locale)}
+			</ul>
+			<li class='jac'>{@link org.apache.juneau.rest.BasicRest}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#findResource(Class,String,Locale) findResource(Class,String,Locale)}
+			</ul>
+		</ul>
+		<br>The methods added for {@link org.apache.juneau.rest.RestResourceResolver} are:
+		<ul>
+			<li class='jac'>{@link org.apache.juneau.rest.RestServlet}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#resolve(Object,Class,RestContextBuilder,Object...) resolve(Object,Class&lt;T&gt;,RestContextBuilder,Object...)}
+			</ul>
+			<li class='jac'>{@link org.apache.juneau.rest.BasicRest}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#resolve(Object,Class,RestContextBuilder,Object...) resolve(Object,Class&lt;T&gt;,RestContextBuilder,Object...)}
+			</ul>
+		</ul>
+	<li>
+		Added the following convenience hook methods on the {@link org.apache.juneau.rest.RestServlet} and {@link org.apache.juneau.rest.BasicRest} classes:
+		<ul>
+			<li class='jac'>{@link org.apache.juneau.rest.RestServlet}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onInit(RestContextBuilder) onInit(RestContextBuilder)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onPostInit(RestContext) onPostInit(RestContext)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onPostInitChildFirst(RestContext) onPostInitChildFirst(RestContext)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onDestroy(RestContext) onDestroy(RestContext)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onStartCall(HttpServletRequest,HttpServletResponse) onStartCall(HttpServletRequest,HttpServletResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onPreCall(RestRequest,RestResponse) onPreCall(RestRequest,RestResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onPostCall(RestRequest,RestResponse) onPostCall(RestRequest,RestResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.RestServlet#onEndCall(HttpServletRequest,HttpServletResponse) onEndCall(HttpServletRequest,HttpServletResponse)}
+			</ul>
+			<li class='jac'>{@link org.apache.juneau.rest.BasicRest}
+			<ul>
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onInit(RestContextBuilder) onInit(RestContextBuilder)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onPostInit(RestContext) onPostInit(RestContext)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onPostInitChildFirst(RestContext) onPostInitChildFirst(RestContext)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onDestroy(RestContext) onDestroy(RestContext)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onStartCall(HttpServletRequest,HttpServletResponse) onStartCall(HttpServletRequest,HttpServletResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onPreCall(RestRequest,RestResponse) onPreCall(RestRequest,RestResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onPostCall(RestRequest,RestResponse) onPostCall(RestRequest,RestResponse)}
+				<li class='jm'>{@link org.apache.juneau.rest.BasicRest#onEndCall(HttpServletRequest,HttpServletResponse) onEndCall(HttpServletRequest,HttpServletResponse)}
+			</ul>
+		</ul>
+	<li>
+		New {@link Rest#debugOn() @Rest(debugOn)} annotation for turning on debug mode using class/method identifiers:
+		
+		<h5 class='figure'>Example:</h5>
+		<p class='bcode w800'>
+	<jc>// Turn on debug per-request on the class and always on the doX() method</jc>.
+	<ja>@Rest</ja>(
+		debugOn=<js>"MyResource=per-request,Mysource.doX=true"</js>  <jc>// Typically defined via system or env property</jc>.
+	)
+	<jk>public class</jk> MyResource {
+
+		<ja>@RestMethod</ja>
+		<jk>public void</jk> String doX() {
+			...
+		}
+		 </p>
+	<li>
+		{@link org.apache.juneau.rest.BasicRestConfig} has been broken up into {@link org.apache.juneau.rest.BasicRestConfig} and {@link org.apache.juneau.rest.BasicRestMethods} so that
+		you're not forced to implement methods such as <c>getOptions()</c> and <c>getStats()</c> if you're implementing the interface
+		to configure your REST class.
+	<li>
+		Any of the following classes can now be instantiated with <c><jk>public static</jk> <jsm>create</jsm>()</c> methods:
+		<ul>
+			<li class='jc'>{@link org.apache.juneau.rest.RestCallHandler}
+			<li class='jc'>{@link org.apache.juneau.rest.RestCallLogger}
+			<li class='jc'>{@link org.apache.juneau.rest.RestInfoProvider}
+			<li class='jc'>{@link org.apache.juneau.utils.ClasspathResourceFinder}
+			<li class='jc'>{@link org.apache.juneau.rest.RestResourceResolver}
+			<li class='jc'>{@link org.apache.juneau.rest.RestGuard}
+			<li class='jc'>{@link org.apache.juneau.rest.ResponseHandler}
+		</ul>
+	<li>
+		New {@link org.apache.juneau.http.annotation.Path#required() @Path(required)} annotation support.
+		<br>A path can be marked as not-required when the path variable is resolved by a parent resource like so:
+		<p class='bpcode w800'>
+	<ja>@Rest</ja>(path=<js>"/parent/{p1}"</js>,children=Child.<jk>class</jk>)
+	<jk>public class</jk> Parent {
+		...
+	}
+
+	<ja>@Rest</ja>(path="/child")
+	<jk>public class</jk> Child {
+
+		<ja>@RestMethod</ja>(path="/")
+		<jk>public</jk> String doGet(<ja>@Path</ja>(name=<js>"p1"</js>,required=<jk>false</jk>) String p1) {
+			<jc>// p1 will be null when accessed via "/child"</jc>
+			<jc>// p1 will be non-null when accessed via "/parent/p1/child".</jc>
+		}
+		...
+	}
+		</p>
+		<br>This allows the child resource to be mapped to multiple parents that may resolve various different path variables.
+	<li>
+		New {@link org.apache.juneau.rest.annotation.RestMethod#paths() @RestMethod(paths)} annotation that allows you to map multiple
+		paths to the same Java method.
+		<br>Example:
+		<p class='bpcode w800'>
+	<ja>@RestMethod</ja>(
+		name=<jsf>GET</jsf>,
+		paths={<js>"/"</js>,<js>"/{foo}"</js>}
+	)
+	<jk>public</jk> String doGet(<ja>@Path</ja>(name=<js>"foo"</js>,required=<jk>false</jk>) String foo) {...}
+		</p>
 </ul>
 
 <h5 class='topic w800'>juneau-rest-server-springboot</h5>
@@ -37819,6 +38147,21 @@
 			<li>Better integration with HttpClient.
 			<li>New fluent-style methods with many new convenience methods.
 		</ul>
+	<li>
+		<ja>@RemoteMethod</ja>-annotated methods can now return {@link java.util.concurrent.Future Futures} and 
+		{@link java.util.concurrent.CompletableFuture CompletableFutures} for concurrent processing of requests.
+		<br>Example:
+		<p class='bpcode w800'>
+	<ja>@Remote</ja>
+	<jk>public interface</jk> MyInterface {
+		<jk>public</jk> Future&lt;String&gt; doGet();
+	}
+		
+	MyInterface i = client.getRemote(MyInterface.<jk>class</jk>, <js>"http://localhost:12345/myInterface"</js>);
+	Future&lt;String&gt; f = i.doGet();
+	<jc>// Do other stuff.</jc>
+	String result = f.get();	
+		</li>p>
 </ul>
 
 <h5 class='topic w800'>juneau-doc</h5>
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt
index 431f797..3d719fe 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -162,7 +162,7 @@ juneau-marshall.Marshalls = #juneau-marshall.Marshalls, Overview > juneau-marsha
 juneau-marshall.MsgPackDetails = #juneau-marshall.MsgPackDetails, Overview > juneau-marshall > MessagePack Details
 juneau-marshall.MsgPackDetails.Parsers = #juneau-marshall.MsgPackDetails.Parsers, Overview > juneau-marshall > MessagePack Details > MessagePack Parsers
 juneau-marshall.MsgPackDetails.Serializers = #juneau-marshall.MsgPackDetails.Serializers, Overview > juneau-marshall > MessagePack Details > MessagePack Serializers
-juneau-marshall.ObjectMap = #juneau-marshall.ObjectMap, Overview > juneau-marshall > ObjectMap and ObjectList
+juneau-marshall.ObjectMap = #juneau-marshall.ObjectMap, Overview > juneau-marshall > OMap and OList
 juneau-marshall.OpenApiDetails = #juneau-marshall.OpenApiDetails, Overview > juneau-marshall > OpenAPI Details
 juneau-marshall.OpenApiDetails.Methodology = #juneau-marshall.OpenApiDetails.Methodology, Overview > juneau-marshall > OpenAPI Details > OpenAPI Methodology
 juneau-marshall.OpenApiDetails.Parsers = #juneau-marshall.OpenApiDetails.Parsers, Overview > juneau-marshall > OpenAPI Details > OpenAPI Parsers
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index f6ec066..fe695e2 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -27,7 +27,7 @@
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.HttpPartParsers'>HTTP Part Parsers</a></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ConfigurableProperties'>Configurable Properties</a><span class='update'>8.1.3-updated</span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ConfigurableAnnotations'>Configurable Annotations</a><span class='update'>8.1.0-new, 8.1.3-updated, <b>8.1.4-updated</b></span></p>
-		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ObjectMap'>ObjectMap and ObjectList</a></p>
+		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ObjectMap'>OMap and OList</a><span class='update'>updated-8.1.4</span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Groups'>SerializerGroups and ParserGroups</a></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ContextsBuildersSessionsPropertyStores'>Contexts, Builders, Sessions, and PropertyStores</a></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Transforms'>Transforms</a></p>
@@ -59,7 +59,7 @@
 		</ol>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.VirtualBeans'>Virtual Beans</a></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.Recursion'>Non-Tree Models and Recursion Detection</a></p>
-		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ParsingIntoGenericModels'>Parsing into Generic Models</a></p>
+		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ParsingIntoGenericModels'>Parsing into Generic Models</a><span class='update'>updated-8.1.4</span></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.ReadingContinuousStreams'>Reading Continuous Streams</a></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.URIs'>URIs</a></p>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-marshall.JacksonComparison'>Comparison with Jackson</a></p>
@@ -317,7 +317,7 @@
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies'>REST Proxies</a></p>
 		<ol>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Remote'>@Remote</a><span class='update'>8.1.2-updated</span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a><span class='update'><b>8.1.4-updated</b></span></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Body'>@Body</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.FormData'>@FormData</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Query'>@Query</a></p>
diff --git a/juneau-doc/src/main/javadoc/resources/juneau-doc.css b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
index fdc1a9b..963ada4 100755
--- a/juneau-doc/src/main/javadoc/resources/juneau-doc.css
+++ b/juneau-doc/src/main/javadoc/resources/juneau-doc.css
@@ -440,6 +440,10 @@ ul.notes>li {
   	margin-left: -40px;
 }
 
+ul.notes ul li {
+	padding: 10px;
+}
+
 .topic a {
 	border-bottom: 1px dotted #4c6b87;
 }
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
index d678578..9e1aa2b 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
@@ -105,8 +105,7 @@ public class TestMicroservice {
 				.json()
 				.rootUrl(microserviceURI)
 				.noTrace();
-			rc.getHttpClientBuilder()
-				.setRetryHandler(
+			rc.retryHandler(
 					new HttpRequestRetryHandler() {
 						@Override
 						public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
diff --git a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
index 5cdefa9..f05b49d 100644
--- a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
+++ b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
@@ -149,7 +149,8 @@ public class RestClientTest {
 		MockRestClient
 			.create(A.class)
 			.simpleJson()
-			.logTo(Level.SEVERE, ml)
+			.logger(ml)
+			.logRequests(DetailLevel.FULL, Level.SEVERE)
 			.build()
 			.post("/bean", bean)
 			.complete();
@@ -1786,7 +1787,7 @@ public class RestClientTest {
 		}
 
 		@Override
-		public void log(String msg) {
+		public void log(Level level, String msg, Object...args) {
 			lastMessage = msg;
 		}
 	}
@@ -3406,11 +3407,23 @@ public class RestClientTest {
 			.getHeader("X").assertValue("f1=1")
 		;
 	}
-//
-//	@Test
-//	public void o028_beanContext_bpiMap() throws Exception { fail(); }
-////	public RestClientBuilder bpi(Map<String,String> values) {
-//
+
+	@Test
+	public void o028_beanContext_bpiMap() throws Exception {
+		MockRestClient
+			.create(O2R.class)
+			.simpleJson()
+			.bpi(OMap.of("O25", "f2"))
+			.build()
+			.post("/test", new O25().init())
+			.header("X", new O25().init())
+			.run()
+			.getBody().cache().assertValue("{f2:2}")
+			.getHeader("X").assertValue("f2=2")
+		;
+	}
+//	public RestClientBuilder bpi(Map<String,String> values) {
+
 //	@Test
 //	public void o029_beanContext_bpiClassString() throws Exception { fail(); }
 ////	public RestClientBuilder bpi(Class<?> beanClass, String properties) {
@@ -3516,18 +3529,6 @@ public class RestClientTest {
 ////	public RestClientBuilder examples(String json) {
 //
 //	@Test
-//	public void o055_beanContext_excludePropertiesMap() throws Exception { fail(); }
-////	public RestClientBuilder excludeProperties(Map<String,String> values) {
-//
-//	@Test
-//	public void o056_beanContext_excludePropertiesClassString() throws Exception { fail(); }
-////	public RestClientBuilder excludeProperties(Class<?> beanClass, String properties) {
-//
-//	@Test
-//	public void o057_beanContext_excludePropertiesStringString() throws Exception { fail(); }
-////	public RestClientBuilder excludeProperties(String beanClassName, String value) {
-//
-//	@Test
 //	public void o058_beanContext_fluentSetters() throws Exception { fail(); }
 ////	public RestClientBuilder fluentSetters() {
 //
@@ -3580,18 +3581,6 @@ public class RestClientTest {
 ////	public RestClientBuilder implClasses(Map<String,Class<?>> values) {
 //
 //	@Test
-//	public void o071_beanContext_includePropertiesMap() throws Exception { fail(); }
-////	public RestClientBuilder includeProperties(Map<String,String> values) {
-//
-//	@Test
-//	public void o072_beanContext_includePropertiesClassString() throws Exception { fail(); }
-////	public RestClientBuilder includeProperties(Class<?> beanClass, String value) {
-//
-//	@Test
-//	public void o073_beanContext_includePropertiesStringString() throws Exception { fail(); }
-////	public RestClientBuilder includeProperties(String beanClassName, String value) {
-//
-//	@Test
 //	public void o074_beanContext_locale() throws Exception { fail(); }
 ////	public RestClientBuilder locale(Locale value) {
 //
@@ -3708,7 +3697,7 @@ public class RestClientTest {
 ////	public RestClientBuilder useJavaBeanIntrospector(boolean value) {
 
 
-	//	//-----------------------------------------------------------------------------------------------------------------
+//	//-----------------------------------------------------------------------------------------------------------------
 //	// Context properties
 //	//-----------------------------------------------------------------------------------------------------------------
 //
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallLogger.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallLogger.java
index 620c129..d5cf396 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallLogger.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCallLogger.java
@@ -31,8 +31,6 @@ import org.apache.http.util.*;
  * <p>
  * Use the {@link RestClientBuilder#logTo(Level, Logger)} and {@link RestCall#logTo(Level, Logger)} methods to create
  * instances of this class.
- *
- * @deprecated Use {@link org.apache.juneau.rest.client2.logging.RestCallLogger}
  */
 @Deprecated
 public class RestCallLogger extends RestCallInterceptor {
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index ca18271..abaf32a 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -2352,6 +2352,8 @@ public class RestClientBuilder extends BeanContextBuilder {
 		return set(UON_paramFormat, "PLAINTEXT");
 	}
 
+	// <CONFIGURATION-PROPERTIES>
+
 	@Override /* BeanContextBuilder */
 	public RestClientBuilder beanClassVisibility(Visibility value) {
 		super.beanClassVisibility(value);
@@ -2503,7 +2505,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public RestClientBuilder bpi(Map<String,String> values) {
+	public RestClientBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -2521,7 +2523,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public RestClientBuilder bpx(Map<String,String> values) {
+	public RestClientBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
@@ -2539,7 +2541,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public RestClientBuilder bpro(Map<String,String> values) {
+	public RestClientBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -2557,7 +2559,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* BeanContextBuilder */
-	public RestClientBuilder bpwo(Map<String,String> values) {
+	public RestClientBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -2931,6 +2933,8 @@ public class RestClientBuilder extends BeanContextBuilder {
 		return this;
 	}
 
+	// </CONFIGURATION-PROPERTIES>
+
 	//------------------------------------------------------------------------------------------------
 	// Passthrough methods for HttpClientBuilder.
 	//------------------------------------------------------------------------------------------------
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 db0f2ca..50f57ac 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
@@ -13,15 +13,17 @@
 package org.apache.juneau.rest.client2;
 
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.AddFlag.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
-import static org.apache.juneau.rest.client2.AddFlag.*;
 import static org.apache.juneau.rest.client2.RestClientUtils.*;
+import static java.util.logging.Level.*;
 
 import java.io.*;
 import java.lang.reflect.*;
 import java.lang.reflect.Proxy;
 import java.net.*;
 import java.net.URI;
+import java.text.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
@@ -62,7 +64,6 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.remote.*;
 import org.apache.juneau.rest.client.remote.*;
-import org.apache.juneau.rest.client2.logging.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.utils.*;
@@ -735,7 +736,6 @@ import org.apache.http.client.CookieStore;
  * <ul class='javatree'>
  * 	<li class='jc'>{@link RestClientBuilder}
  * 	<ul>
- * 		<li class='jm'>{@link RestClientBuilder#getHttpClientBuilder() getHttpClientBuilder()}
  * 		<li class='jm'>{@link RestClientBuilder#httpClientBuilder(HttpClientBuilder) httpClientBuilder(HttpClientBuilder)}
  * 		<li class='jm'>{@link RestClientBuilder#createHttpClientBuilder() createHttpClientBuilder()}
  * 		<li class='jm'>{@link RestClientBuilder#createHttpClient() createHttpClient()}
@@ -832,18 +832,15 @@ import org.apache.http.client.CookieStore;
  * <ul class='javatree'>
  * 	<li class='jc'>{@link RestClientBuilder}
  * 	<ul>
- * 		<li class='jm'>{@link RestClientBuilder#logTo(Level,Logger) logTo(Level,Logger)}
+ * 		<li class='jm'>{@link RestClientBuilder#logger(Logger) logger(Logger)}
  * 		<li class='jm'>{@link RestClientBuilder#logToConsole() logToConsole()}
- * 	</ul>
- * 	<li class='jc'>{@link RestRequest}
- * 	<ul>
- * 		<li class='jm'>{@link RestRequest#logTo(Level,Logger) logTo(Level,Logger)}
- * 		<li class='jm'>{@link RestRequest#logToConsole() logToConsole()}
+ * 		<li class='jm'>{@link RestClientBuilder#logToConsole(boolean) logToConsole(boolea )}
+ * 		<li class='jm'>{@link RestClientBuilder#logRequests(DetailLevel,Level) logRequests(DetailLevel,Level)}
  * 	</ul>
  * </ul>
  *
  * <p class='notes w900'>
- * It should be noted that if you enable logging, response bodies will be cached by default which may introduce
+ * It should be noted that if you enable request logging detail level {@link DetailLevel#FULL}, response bodies will be cached by default which may introduce
  * a performance penalty.
  *
  * <p class='w900'>
@@ -1323,6 +1320,171 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 	public static final String RESTCLIENT_leakDetection = PREFIX + "leakDetection.b";
 
 	/**
+	 * Configuration property:  Logger.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logger RESTCLIENT_logger}
+	 * 	<li><b>Name:</b>  <js>"RestClient.logger.o"</js>
+	 * 	<li><b>Data type:</b>
+	 * 		<ul>
+	 * 			<li>{@link java.util.logging.Logger}
+	 * 		</ul>
+	 * 	<li><b>Default:</b>  <c>Logger.<jsm>getLogger</jsm>(RestClient.<jk>class</jk>.getName())</c>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.client2.RestClientBuilder#logger(Logger)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Specifies the logger to use for logging.
+	 */
+	public static final String RESTCLIENT_logger = PREFIX + "logger.o";
+
+	/**
+	 * Configuration property:  Log to console.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logToConsole RESTCLIENT_logToConsole}
+	 * 	<li><b>Name:</b>  <js>"RestClient.logToConsole.b"</js>
+	 * 	<li><b>System property:</b>  <c>RestClient.logToConsole</c>
+	 * 	<li><b>Environment variable:</b>  <c>RESTCLIENT_LOGTOCONSOLE</c>
+	 * 	<li><b>Data type:</b>
+	 * 		<ul>
+	 * 			<li><jk>boolean</jk>
+	 * 		</ul>
+	 * 	<li><b>Default:</b>  <jk>false</jk>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.client2.RestClientBuilder#logToConsole()}
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.client2.RestClientBuilder#logToConsole(boolean)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * When enabled, log messages are sent to the console in addition to the existing logger.
+	 */
+	public static final String RESTCLIENT_logToConsole = PREFIX + "logToConsole.b";
+
+	/**
+	 * Configuration property:  Log requests.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logRequests RESTCLIENT_logRequests}
+	 * 	<li><b>Name:</b>  <js>"RestClient.logRequests.s"</js>
+	 * 	<li><b>System property:</b>  <c>RestClient.logRequests</c>
+	 * 	<li><b>Environment variable:</b>  <c>RESTCLIENT_LOGREQUESTS</c>
+	 * 	<li><b>Data type:</b>
+	 * 		<ul>
+	 * 			<li>{@link org.apache.juneau.DetailLevel}
+	 * 		</ul>
+	 * 	<li><b>Default:</b>  {@link org.apache.juneau.DetailLevel#NONE}
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.client2.RestClientBuilder#logRequests(DetailLevel,Level)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Causes requests/responses to be logged at the specified log level at the end of the request.
+	 *
+	 * <p>
+	 * <jsf>SIMPLE</jsf> detail produces a log message like the following:
+	 * <p class='bpcode w800'>
+	 * 	POST http://localhost:10000/testUrl, HTTP/1.1 200 OK
+	 * </p>
+	 *
+	 * <p>
+	 * <jsf>FULL</jsf> detail produces a log message like the following:
+	 * <p class='bpcode w800 console'>
+	 * 	=== HTTP Call (outgoing) =======================================================
+	 * 	=== REQUEST ===
+	 * 	POST http://localhost:10000/testUrl
+	 * 	---request headers---
+	 * 		Debug: true
+	 * 		No-Trace: true
+	 * 		Accept: application/json
+	 * 	---request entity---
+	 * 		Content-Type: application/json
+	 * 	---request content---
+	 * 	{"foo":"bar","baz":123}
+	 * 	=== RESPONSE ===
+	 * 	HTTP/1.1 200 OK
+	 * 	---response headers---
+	 * 		Content-Type: application/json;charset=utf-8
+	 * 		Content-Length: 21
+	 * 		Server: Jetty(8.1.0.v20120127)
+	 * 	---response content---
+	 * 	{"message":"OK then"}
+	 * 	=== END ========================================================================
+	 * </p>
+	 *
+	 * <p>
+	 * By default, the message is logged to the default logger.  It can be logged to a different logger via the
+	 * {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logger} setting or logged to the console using the
+	 * {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logToConsole} setting.
+	 */
+	public static final String RESTCLIENT_logRequests = PREFIX + "logRequests.s";
+
+	/**
+	 * Configuration property:  Log requests log level.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logRequestsLevel RESTCLIENT_logRequestsLevel}
+	 * 	<li><b>Name:</b>  <js>"RestClient.logRequestsLevel.s"</js>
+	 * 	<li><b>System property:</b>  <c>RestClient.logRequestsLevel</c>
+	 * 	<li><b>Environment variable:</b>  <c>RESTCLIENT_LOGREQUESTLEVEL</c>
+	 * 	<li><b>Data type:</b>
+	 * 		<ul>
+	 * 			<li>{@link java.util.logging.Level}
+	 * 		</ul>
+	 * 	<li><b>Default:</b>  {@link java.util.logging.Level#INFO}
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.client2.RestClientBuilder#logRequests(DetailLevel,Level)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Used in combination with {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logRequests} to specify the
+	 * level to log request messages to.
+	 */
+	public static final String RESTCLIENT_logRequestsLevel = PREFIX + "logRequestsLevel.s";
+
+	/**
+	 * Configuration property:  Log requests predicate.
+	 *
+	 * <h5 class='section'>Property:</h5>
+	 * <ul class='spaced-list'>
+	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logRequestsPredicate RESTCLIENT_logRequestsPredicate}
+	 * 	<li><b>Name:</b>  <js>"RestClient.logRequestsPredicate.o"</js>
+	 * 	<li><b>Data type:</b>
+	 * 		<ul>
+	 * 			<li>{@link java.util.function.BiPredicate}&lt;{@link org.apache.juneau.rest.client2.RestRequest},{@link org.apache.juneau.rest.client2.RestResponse}&gt;
+	 * 		</ul>
+	 * 	<li><b>Default:</b>  <c>(req,res) -&gt; true</c>
+	 * 	<li><b>Methods:</b>
+	 * 		<ul>
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.client2.RestClientBuilder#logRequests(DetailLevel,Level)}
+	 * 		</ul>
+	 * </ul>
+	 *
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
+	 * Used in combination with {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logRequests} to specify the
+	 * level to log request messages to.
+	 */
+	public static final String RESTCLIENT_logRequestsPredicate = PREFIX + "logRequestsPredicate.o";
+
+	/**
 	 * Configuration property:  Parsers.
 	 *
 	 * <h5 class='section'>Property:</h5>
@@ -1507,6 +1669,11 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 	private final String rootUrl;
 	private volatile boolean isClosed = false;
 	private final StackTraceElement[] creationStack;
+	private final Logger logger;
+	final DetailLevel logRequests;
+	final BiPredicate<RestRequest,RestResponse> logRequestsPredicate;
+	final Level logRequestsLevel;
+	private final boolean logToConsole;
 	private StackTraceElement[] closedStack;
 
 	// These are read directly by RestCall.
@@ -1537,6 +1704,9 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 	private static final
 		Predicate<Integer> ERROR_CODES_DEFAULT = x ->  x>=400;
 
+	private static final
+		BiPredicate<RestRequest,RestResponse> LOG_REQUESTS_PREDICATE_DEFAULT = (req,res) -> true;
+
 	/**
 	 * Constructor.
 	 *
@@ -1552,6 +1722,11 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 		this.executorServiceShutdownOnClose = getBooleanProperty(RESTCLIENT_executorServiceShutdownOnClose, false);
 		this.rootUrl = StringUtils.nullIfEmpty(getStringProperty(RESTCLIENT_rootUri, "").replaceAll("\\/$", ""));
 		this.leakDetection = getBooleanProperty(RESTCLIENT_leakDetection, debug);
+		this.logger = getInstanceProperty(RESTCLIENT_logger, Logger.class, Logger.getLogger(RestClient.class.getName()));
+		this.logRequests = getInstanceProperty(RESTCLIENT_logRequests, DetailLevel.class, debug ? DetailLevel.FULL : DetailLevel.NONE);
+		this.logRequestsLevel = getInstanceProperty(RESTCLIENT_logRequestsLevel, Level.class, debug ? Level.WARNING : Level.OFF);
+		this.logToConsole = getBooleanProperty(RESTCLIENT_logToConsole, debug);
+		this.logRequestsPredicate = getInstanceProperty(RESTCLIENT_logRequestsPredicate, BiPredicate.class, LOG_REQUESTS_PREDICATE_DEFAULT);
 
 		SerializerGroupBuilder sgb = SerializerGroup.create();
 		for (Object o : getArrayProperty(RESTCLIENT_serializers, Object.class)) {
@@ -1605,10 +1780,7 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 
 		this.callHandler = getInstanceProperty(RESTCLIENT_callHandler, RestCallHandler.class, BasicRestCallHandler.class, ResourceResolver.FUZZY, ps, this);
 
-		RestCallInterceptor[] rci = getInstanceArrayProperty(RESTCLIENT_interceptors, RestCallInterceptor.class, new RestCallInterceptor[0]);
-		if (debug)
-			rci = ArrayUtils.append(rci, new ConsoleRestCallLogger());
-		this.interceptors = rci;
+		this.interceptors = getInstanceArrayProperty(RESTCLIENT_interceptors, RestCallInterceptor.class, new RestCallInterceptor[0]);
 
 		creationStack = debug ? Thread.currentThread().getStackTrace() : null;
 	}
@@ -2695,20 +2867,37 @@ public class RestClient extends BeanContext implements HttpClient, Closeable {
 				for (StackTraceElement e : creationStack)
 					sb.append("\n\t" + e);  // NOT DEBUG
 			}
-			log(sb.toString());
+			log(WARNING, sb.toString());
 		}
 	}
 
 	/**
-	 * Captures log messages produced by this class.
+	 * Logs a message.
 	 *
-	 * <p>
-	 * Default behavior is just to print to STDERR.
+	 * @param level The log level.
+	 * @param t Thrown exception.  Can be <jk>null</jk>.
+	 * @param msg The message.
+	 * @param args Optional message arguments.
+	 */
+	protected void log(Level level, Throwable t, String msg, Object...args) {
+		logger.log(level, t, ()->args.length == 0 ? msg : MessageFormat.format(msg, args));
+		if (logToConsole) {
+			System.err.println(msg);
+			t.printStackTrace();
+		}
+	}
+
+	/**
+	 * Logs a message.
 	 *
-	 * @param msg The message to log.
+	 * @param level The log level.
+	 * @param msg The message with {@link MessageFormat}-style arguments.
+	 * @param args The arguments.
 	 */
-	protected void log(String msg) {
-		System.err.println(msg);
+	protected void log(Level level, String msg, Object...args) {
+		logger.log(level, msg, args);
+		if (logToConsole)
+			System.err.println(MessageFormat.format(msg, args));
 	}
 
 	//------------------------------------------------------------------------------------------------
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 5061d6f..47edce9 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
@@ -23,6 +23,7 @@ import static org.apache.juneau.serializer.WriterSerializer.*;
 import static org.apache.juneau.oapi.OpenApiCommon.*;
 import static org.apache.juneau.uon.UonSerializer.*;
 
+import java.io.*;
 import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.net.*;
@@ -63,9 +64,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.plaintext.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.client2.ext.*;
-import org.apache.juneau.rest.client2.logging.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.soap.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
@@ -107,6 +106,16 @@ public class RestClientBuilder extends BeanContextBuilder {
 		this.httpClientBuilder = httpClientBuilder != null ? httpClientBuilder : getHttpClientBuilder();
 	}
 
+	/**
+	 * No-arg constructor.
+	 *
+	 * <p>
+	 * Provided so that this class can be easily subclassed.
+	 */
+	protected RestClientBuilder() {
+		super(null);
+	}
+
 	@Override /* ContextBuilder */
 	public RestClient build() {
 		set(RESTCLIENT_httpClient, getHttpClient());
@@ -119,46 +128,40 @@ public class RestClientBuilder extends BeanContextBuilder {
 	//------------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Convenience method for specifying all available transmission types.
-	 *
-	 * @return This object (for method chaining).
-	 */
-	@SuppressWarnings("unchecked")
-	public RestClientBuilder universal() {
-		return
-			serializers(
-				JsonSerializer.class,
-				SimpleJsonSerializer.class,
-				HtmlDocSerializer.class,
-				HtmlStrippedDocSerializer.class,
-				HtmlSchemaDocSerializer.class,
-				JsonSchemaSerializer.class,
-				XmlDocSerializer.class,
-				UonSerializer.class,
-				UrlEncodingSerializer.class,
-				OpenApiSerializer.class,
-				MsgPackSerializer.class,
-				SoapXmlSerializer.class,
-				PlainTextSerializer.class
-			)
-			.parsers(
-				JsonParser.class,
-				SimpleJsonParser.class,
-				XmlParser.class,
-				HtmlParser.class,
-				UonParser.class,
-				UrlEncodingParser.class,
-				OpenApiParser.class,
-				MsgPackParser.class,
-				PlainTextParser.class
-			);
-	}
-
-	/**
-	 * Convenience method for specifying JSON as the transmission media type.
+	 * Convenience method for specifying JSON as the marshalling transmission media type.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(JsonSerializer.<jk>class</jk>).parser(JsonParser.<jk>class</jk>)</code>.
+	 * {@link JsonSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link JsonParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"application/json"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"application/json"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #xml()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(JsonSerializer.<jk>class</jk>).parser(JsonParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses JSON marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().json().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -168,10 +171,44 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying Simple JSON as the transmission media type.
+	 * Convenience method for specifying Simplified JSON as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * Simplified JSON is typically useful for automated tests because you can do simple string comparison of results
+	 * without having to escape lots of quotes.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(SimpleJsonSerializer.<jk>class</jk>).parser(JsonParser.<jk>class</jk>)</code>.
+	 * 	{@link SimpleJsonSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link JsonParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"application/json"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"application/json+simple"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #xml()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(SimpleJsonSerializer.<jk>class</jk>).parser(JsonParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses Simplified JSON marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().simpleJson().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -181,10 +218,40 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying XML as the transmission media type.
+	 * Convenience method for specifying XML as the marshalling transmission media type.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(XmlSerializer.<jk>class</jk>).parser(XmlParser.<jk>class</jk>)</code>.
+	 * {@link XmlSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link XmlParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/xml"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/xml"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(XmlSerializer.<jk>class</jk>).parser(XmlParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses XML marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().xml().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -194,10 +261,43 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying HTML as the transmission media type.
+	 * Convenience method for specifying HTML as the marshalling transmission media type.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(HtmlSerializer.<jk>class</jk>).parser(HtmlParser.<jk>class</jk>)</code>.
+	 * POJOs are converted to HTML without any sort of doc wrappers.
+	 *
+	 * <p>
+	 * 	{@link HtmlSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link HtmlParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/html"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/html"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(HtmlSerializer.<jk>class</jk>).parser(HtmlParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses HTML marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().html().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -207,10 +307,136 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying plain-text as the transmission media type.
+	 * Convenience method for specifying HTML DOC as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * POJOs are converted to fully renderable HTML pages.
+	 *
+	 * <p>
+	 * 	{@link HtmlSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link HtmlParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/html"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/html"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(HtmlDocSerializer.<jk>class</jk>).parser(HtmlParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses HTML Doc marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().htmlDoc().build();
+	 * </p>
+	 *
+	 * @return This object (for method chaining).
+	 */
+	@ConfigurationProperty
+	public RestClientBuilder htmlDoc() {
+		return serializer(HtmlDocSerializer.class).parser(HtmlParser.class);
+	}
+
+	/**
+	 * Convenience method for specifying Stripped HTML DOC as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * Same as {@link #htmlDoc()} but without the header and body tags and page title and description.
+	 *
+	 * <p>
+	 * 	{@link HtmlSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link HtmlParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/html+stripped"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/html+stripped"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(HtmlStrippedDocSerializer.<jk>class</jk>).parser(HtmlParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses HTML Stripped Doc marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().htmlStrippedDoc().build();
+	 * </p>
+	 *
+	 * @return This object (for method chaining).
+	 */
+	@ConfigurationProperty
+	public RestClientBuilder htmlStrippedDoc() {
+		return serializer(HtmlStrippedDocSerializer.class).parser(HtmlParser.class);
+	}
+
+	/**
+	 * Convenience method for specifying Plain Text as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * Plain text marshalling typically only works on simple POJOs that can be converted to and from strings using
+	 * swaps, swap methods, etc...
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(PlainTextSerializer.<jk>class</jk>).parser(PlainTextParser.<jk>class</jk>)</code>.
+	 * 	{@link PlainTextSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link PlainTextParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/plain"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/plain"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(PlainTextSerializer.<jk>class</jk>).parser(PlainTextParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses Plain Text marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().plainText().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -220,10 +446,43 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying MessagePack as the transmission media type.
+	 * Convenience method for specifying MessagePack as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * MessagePack is a binary equivalent to JSON that takes up considerably less space than JSON.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(MsgPackSerializer.<jk>class</jk>).parser(MsgPackParser.<jk>class</jk>)</code>.
+	 * 	{@link MsgPackSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link MsgPackParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"octal/msgpack"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"octal/msgpack"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(MsgPackSerializer.<jk>class</jk>).parser(MsgPackParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses MessagePack marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().msgPack().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -233,10 +492,44 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying UON as the transmission media type.
+	 * Convenience method for specifying UON as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * UON is Url-Encoding Object notation that is equivalent to JSON but suitable for transmission as URL-encoded
+	 * query and form post values.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(UonSerializer.<jk>class</jk>).parser(UonParser.<jk>class</jk>)</code>.
+	 * 	{@link UonSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link UonParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/uon"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/uon"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(UonSerializer.<jk>class</jk>).parser(UonParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses UON marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().uon().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -246,10 +539,42 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying URL-Encoding as the transmission media type.
+	 * Convenience method for specifying URL-Encoding as the marshalling transmission media type.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(UrlEncodingSerializer.<jk>class</jk>).parser(UrlEncodingParser.<jk>class</jk>)</code>.
+	 * 	{@link UrlEncodingSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 		<li>This serializer is NOT used when using the {@link RestRequest#formData(String, Object)} (and related) methods for constructing
+	 * 			the request body.  Instead, the part serializer specified via {@link #partSerializer(Class)} is used.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link UrlEncodingParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"application/x-www-form-urlencoded"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"application/x-www-form-urlencoded"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(UrlEncodingSerializer.<jk>class</jk>).parser(UrlEncodingParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses URL-Encoded marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().urlEnc().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -259,10 +584,46 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Convenience method for specifying URL-Encoding as the transmission media type.
+	 * Convenience method for specifying OpenAPI as the marshalling transmission media type.
+	 *
+	 * <p>
+	 * OpenAPI is a language that allows serialization to formats that use {@link HttpPartSchema} objects to describe their structure.
 	 *
 	 * <p>
-	 * Identical to calling <code>serializer(OpenApiSerializer.<jk>class</jk>).parser(OpenApiParser.<jk>class</jk>)</code>.
+	 * 	{@link OpenApiSerializer} will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializer can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 		<li>Typically the {@link RestRequest#body(Object, HttpPartSchema)} method will be used to specify the body of the request with the
+	 * 			schema describing it's structure.
+	 * 	</ul>
+	 * <p>
+	 * 	{@link OpenApiParser} will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parser can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 		<li>Typically the {@link RestResponseBody#schema(HttpPartSchema)} method will be used to specify the structure of the response body.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header will be set to <js>"text/openapi"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}.
+	 * <p>
+	 * 	<c>Content-Type</c> request header will be set to <js>"text/openapi"</js> unless overridden
+	 * 		by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}.
+	 * <p>
+	 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
+	 * 	<ul>
+	 * 		<li>When multiple languages are supported, the <c>Accept</c> and <c>Content-Type</c> headers control which marshallers are used, or uses the
+	 * 		last-enabled language if the headers are not set.
+	 * 	</ul>
+	 * <p>
+	 * 	Identical to calling <c>serializer(OpenApiSerializer.<jk>class</jk>).parser(OpenApiParser.<jk>class</jk>)</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses OpenAPI marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().openApi().build();
+	 * </p>
 	 *
 	 * @return This object (for method chaining).
 	 */
@@ -271,6 +632,65 @@ public class RestClientBuilder extends BeanContextBuilder {
 		return serializer(OpenApiSerializer.class).parser(OpenApiParser.class);
 	}
 
+	/**
+	 * Convenience method for specifying all available transmission types.
+	 *
+	 * <p>
+	 * 	All basic Juneau serializers will be used to serialize POJOs to request bodies unless overridden per request via {@link RestRequest#serializer(Serializer)}.
+	 * 	<ul>
+	 * 		<li>The serializers can be configured using any of the serializer property setters (e.g. {@link #sortCollections()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	All basic Juneau parsers will be used to parse POJOs from response bodies unless overridden per request via {@link RestRequest#parser(Parser)}.
+	 * 	<ul>
+	 * 		<li>The parsers can be configured using any of the parser property setters (e.g. {@link #strict()}),
+	 * 			bean context property setters (e.g. {@link #pojoSwaps(Class...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class.
+	 * 	</ul>
+	 * <p>
+	 * 	<c>Accept</c> request header must be set by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request
+	 * 		via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)} in order for the correct parser to be selected.
+	 * <p>
+	 * 	<c>Content-Type</c> request header must be set by {@link #header(String,Object)} or {@link #contentType(Object)},
+	 * 		or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)} in order for the correct serializer to be selected.
+	 * <p>
+	 * 	Similar to calling <c>json().simpleJson().html().xml().uon().urlEnc().openApi().msgPack().plainText()</c>.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses universal marshalling.</jc>
+	 * 	RestClient c = RestClient.<jsm>create</jsm>().universal().build();
+	 * </p>
+	 *
+	 * @return This object (for method chaining).
+	 */
+	@SuppressWarnings("unchecked")
+	public RestClientBuilder universal() {
+		return
+			serializers(
+				JsonSerializer.class,
+				SimpleJsonSerializer.class,
+				HtmlSerializer.class,
+				XmlSerializer.class,
+				UonSerializer.class,
+				UrlEncodingSerializer.class,
+				OpenApiSerializer.class,
+				MsgPackSerializer.class,
+				PlainTextSerializer.class
+			)
+			.parsers(
+				JsonParser.class,
+				SimpleJsonParser.class,
+				XmlParser.class,
+				HtmlParser.class,
+				UonParser.class,
+				UrlEncodingParser.class,
+				OpenApiParser.class,
+				MsgPackParser.class,
+				PlainTextParser.class
+			);
+	}
+
 	//------------------------------------------------------------------------------------------------------------------
 	// HttpClientBuilder
 	//------------------------------------------------------------------------------------------------------------------
@@ -285,9 +705,23 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * The predefined method returns an {@link HttpClientBuilder} with the following settings:
 	 * <ul>
-	 * 	<li>Lax redirect strategy.
+	 * 	<li>{@link AllRedirectsStrategy All redirect strategy}.
 	 * </ul>
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// A RestClientBuilder that provides it's own customized HttpClientBuilder.</jc>
+	 * 	<jk>public class</jk> MyRestClientBuilder <jk>extends</jk> RestClientBuilder {
+	 * 		<ja>@Override</ja>
+	 * 		<jk>protected</jk> HttpClientBuilder createHttpClientBuilder() {
+	 * 			<jk>return</jk> HttpClientBuilder.<jsm>create</jsm>();
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Instantiate.</jc>
+	 * 	RestClient c = <jk>new</jk> MyRestClientBuilder().build();
+	 * </p>
+	 *
 	 * @return The HTTP client builder to use to create the HTTP client.
 	 */
 	protected HttpClientBuilder createHttpClientBuilder() {
@@ -295,28 +729,20 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Returns the {@link HttpClientBuilder} that will be used to create the {@link HttpClient} used by {@link RestClient}.
-	 *
-	 * <p>
-	 * This method can be used to make customizations to the {@link HttpClient}.
-	 *
-	 * <p>
-	 * If not set via {@link #httpClientBuilder(HttpClientBuilder)}, then this object is the one created by {@link #createHttpClientBuilder()}.
-	 *
-	 * @return The {@link HttpClientBuilder} that will be used to create the {@link HttpClient} used by {@link RestClient}.
-	 */
-	public HttpClientBuilder getHttpClientBuilder() {
-		if (httpClientBuilder == null)
-			httpClientBuilder = createHttpClientBuilder();
-		return httpClientBuilder;
-	}
-
-	/**
 	 * Sets the {@link HttpClientBuilder} that will be used to create the {@link HttpClient} used by {@link RestClient}.
 	 *
 	 * <p>
 	 * This can be used to bypass the builder created by {@link #createHttpClientBuilder()} method.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses a customized HttpClientBuilder.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.httpClientBuilder(HttpClientBuilder.<jsm>create</jsm>())
+	 * 		.build();
+	 * </p>
+	 *
 	 * @param value The {@link HttpClientBuilder} that will be used to create the {@link HttpClient} used by {@link RestClient}.
 	 * @return This object (for method chaining).
 	 */
@@ -326,6 +752,12 @@ public class RestClientBuilder extends BeanContextBuilder {
 		return this;
 	}
 
+	final HttpClientBuilder getHttpClientBuilder() {
+		if (httpClientBuilder == null)
+			httpClientBuilder = createHttpClientBuilder();
+		return httpClientBuilder;
+	}
+
 	//------------------------------------------------------------------------------------------------------------------
 	// HttpClient
 	//------------------------------------------------------------------------------------------------------------------
@@ -345,6 +777,20 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * The default implementation returns an instance of {@link HttpClient} using the client builder returned by
 	 * {@link #createHttpClientBuilder()}.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// A RestClientBuilder that provides it's own customized HttpClient.</jc>
+	 * 	<jk>public class</jk> MyRestClientBuilder <jk>extends</jk> RestClientBuilder {
+	 * 		<ja>@Override</ja>
+	 * 		<jk>protected</jk> HttpClientBuilder createHttpClient() {
+	 * 			<jk>return</jk> HttpClientBuilder.<jsm>create</jsm>().build();
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Instantiate.</jc>
+	 * 	RestClient c = <jk>new</jk> MyRestClientBuilder().build();
+	 * </p>
+	 *
 	 * @return The HTTP client to use.
 	 */
 	protected CloseableHttpClient createHttpClient() {
@@ -357,53 +803,183 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Returns the {@link HttpClient} to be used to handle all HTTP communications with the target server.
+	 * Sets the {@link HttpClient} to be used to handle all HTTP communications with the target server.
+	 *
+	 * <p>
+	 * This can be used to bypass the client created by {@link #createHttpClient()} method.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses a customized HttpClient.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.httpClient(HttpClientBuilder.<jsm>create</jsm>().build())
+	 * 		.build();
+	 * </p>
+	 *
+	 * @param value The {@link HttpClient} to be used to handle all HTTP communications with the target server.
+	 * @return This object (for method chaining).
+	 */
+	@ConfigurationProperty
+	public RestClientBuilder httpClient(CloseableHttpClient value) {
+		this.httpClient = value;
+		return this;
+	}
+
+	final CloseableHttpClient getHttpClient() {
+		return httpClient != null ? httpClient : createHttpClient();
+	}
+
+	//------------------------------------------------------------------------------------------------------------------
+	// Logging.
+	//------------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Configuration property:  Logger.
+	 *
+	 * <p>
+	 * Specifies the logger to use for logging.
+	 *
+	 * <p>
+	 * If not specified, uses the following logger:
+	 * <p class='bpcode w800'>
+	 * 	Logger.<jsm>getLogger</jsm>(RestClient.<jk>class</jk>.getName());
+	 * </p>
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that logs messages to a special logger.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.logger(Logger.<jsm>getLogger</jsm>(<js>"MyLogger"</js>))  <jc>// Log to MyLogger logger.</jc>
+	 * 		.logToConsole()  <jc>// Also log to console.</jc>
+	 * 		.logRequests(<jsf>FULL</jsf>, <jsf>WARNING</jsf>)  <jc>// Log requests with full detail at WARNING level.</jc>
+	 * 		.build();
+	 * </p>
 	 *
-	 * @return The {@link HttpClient} to be used to handle all HTTP communications with the target server.
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_logger}
+	 * </ul>
+	 *
+	 * @param value The logger to use for logging.
+	 * @return This object (for method chaining).
 	 */
-	public CloseableHttpClient getHttpClient() {
-		return httpClient != null ? httpClient : createHttpClient();
+	@ConfigurationProperty
+	public RestClientBuilder logger(Logger value) {
+		return set(RESTCLIENT_logger, value);
 	}
 
 	/**
-	 * Sets the {@link HttpClient} to be used to handle all HTTP communications with the target server.
+	 * Configuration property:  Log to console.
 	 *
 	 * <p>
-	 * This can be used to bypass the client created by {@link #createHttpClient()} method.
+	 * Specifies to log messages to the console.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that logs messages to a special logger.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.logToConsole()
+	 * 		.logRequests(<jsf>FULL</jsf>, <jsf>INFO</jsf>)  <jc>// Level is ignored when logging to console.</jc>
+	 * 		.build();
+	 * </p>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_logToConsole}
+	 * </ul>
 	 *
-	 * @param value The {@link HttpClient} to be used to handle all HTTP communications with the target server.
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public RestClientBuilder httpClient(CloseableHttpClient value) {
-		this.httpClient = value;
-		return this;
+	public RestClientBuilder logToConsole() {
+		return logToConsole(true);
 	}
 
-	//------------------------------------------------------------------------------------------------------------------
-	// Logging.
-	//------------------------------------------------------------------------------------------------------------------
-
 	/**
-	 * Causes requests/responses to be logged to the specified logger at the specified log level.
+	 * Configuration property:  Log to console.
+	 *
+	 * <p>
+	 * Specifies to log messages to the console.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that logs messages to a special logger.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.logToConsole(<jk>true</jk>)
+	 * 		.logRequests(<jsf>FULL</jsf>, <jsf>INFO</jsf>)  <jc>// Level is ignored when logging to console.</jc>
+	 * 		.build();
+	 * </p>
 	 *
-	 * @param level The log level to log messages at.
-	 * @param log The logger to log messages to.
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_logToConsole}
+	 * </ul>
+	 *
+	 * @param value The value for this property.
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public RestClientBuilder logTo(Level level, Logger log) {
-		return interceptors(new BasicRestCallLogger(level, log));
+	public RestClientBuilder logToConsole(boolean value) {
+		return set(RESTCLIENT_logToConsole, value);
 	}
 
 	/**
-	 * Causes requests/responses to be logged to the console.
+	 * Configuration property:  Log requests.
+	 *
+	 * <p>
+	 * Causes requests/responses to be logged at the specified log level at the end of the request.
+	 *
+	 * <p>
+	 * <jsf>SIMPLE</jsf> detail produces a log message like the following:
+	 * <p class='bpcode w800'>
+	 * 	POST http://localhost:10000/testUrl, HTTP/1.1 200 OK
+	 * </p>
+	 *
+	 * <p>
+	 * <jsf>FULL</jsf> detail produces a log message like the following:
+	 * <p class='bpcode w800 console'>
+	 * 	=== HTTP Call (outgoing) =======================================================
+	 * 	=== REQUEST ===
+	 * 	POST http://localhost:10000/testUrl
+	 * 	---request headers---
+	 * 		Debug: true
+	 * 		No-Trace: true
+	 * 		Accept: application/json
+	 * 	---request entity---
+	 * 		Content-Type: application/json
+	 * 	---request content---
+	 * 	{"foo":"bar","baz":123}
+	 * 	=== RESPONSE ===
+	 * 	HTTP/1.1 200 OK
+	 * 	---response headers---
+	 * 		Content-Type: application/json;charset=utf-8
+	 * 		Content-Length: 21
+	 * 		Server: Jetty(8.1.0.v20120127)
+	 * 	---response content---
+	 * 	{"message":"OK then"}
+	 * 	=== END ========================================================================
+	 * </p>
+	 *
+	 * <p>
+	 * By default, the message is logged to the default logger.  It can be logged to a different logger via the
+	 * {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logger} setting or logged to the console using the
+	 * {@link org.apache.juneau.rest.client2.RestClient#RESTCLIENT_logToConsole} setting.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_logRequests}
+	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_logRequestsLevel}
+	 * </ul>
 	 *
+	 * @param detail The detail level of logging.
+	 * @param level The log level.
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
-	public RestClientBuilder logToConsole() {
-		return interceptors(ConsoleRestCallLogger.DEFAULT);
+	public RestClientBuilder logRequests(DetailLevel detail, Level level) {
+		set(RESTCLIENT_logRequests, detail);
+		set(RESTCLIENT_logRequestsLevel, level);
+		return this;
 	}
 
 	//------------------------------------------------------------------------------------------------------------------
@@ -411,25 +987,28 @@ public class RestClientBuilder extends BeanContextBuilder {
 	//------------------------------------------------------------------------------------------------------------------
 
 	/**
-	 * Sets the internal {@link HttpClientConnectionManager}.
-	 *
-	 * @param httpClientConnectionManager The HTTP client connection manager.
-	 * @return This object (for method chaining).
-	 */
-	@ConfigurationProperty
-	public RestClientBuilder httpClientConnectionManager(HttpClientConnectionManager httpClientConnectionManager) {
-		this.httpClientConnectionManager = httpClientConnectionManager;
-		return this;
-	}
-
-	/**
 	 * Creates the {@link HttpClientConnectionManager} returned by {@link #createConnectionManager()}.
 	 *
 	 * <p>
 	 * Subclasses can override this method to provide their own connection manager.
 	 *
 	 * <p>
-	 * The default implementation returns an instance of a {@link PoolingHttpClientConnectionManager}.
+	 * The default implementation returns an instance of a {@link PoolingHttpClientConnectionManager} if {@link #pooled()}
+	 * was called or {@link BasicHttpClientConnectionManager} if not..
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// A RestClientBuilder that provides it's own customized HttpClientConnectionManager.</jc>
+	 * 	<jk>public class</jk> MyRestClientBuilder <jk>extends</jk> RestClientBuilder {
+	 * 		<ja>@Override</ja>
+	 * 		<jk>protected</jk> HttpClientConnectionManager createConnectionManager() {
+	 * 			<jk>return new</jk> PoolingHttpClientConnectionManager();
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Instantiate.</jc>
+	 * 	RestClient c = <jk>new</jk> MyRestClientBuilder().build();
+	 * </p>
 	 *
 	 * @return The HTTP client builder to use to create the HTTP client.
 	 */
@@ -442,6 +1021,15 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * When called, the {@link #createConnectionManager()} method will return a {@link PoolingHttpClientConnectionManager}
 	 * instead of a {@link BasicHttpClientConnectionManager}.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses pooled connections.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.pooled()
+	 * 		.build();
+	 * </p>
+	 *
 	 * @return This object (for method chaining).
 	 */
 	@ConfigurationProperty
@@ -453,6 +1041,15 @@ public class RestClientBuilder extends BeanContextBuilder {
 	/**
 	 * Set up this client to use BASIC auth.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Construct a client that uses BASIC authentication.</jc>
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.basicAuth(<js>"http://localhost"</js>, 80, <js>"me"</js>, <js>"mypassword"</js>)
+	 * 		.build();
+	 * </p>
+	 *
 	 * @param host The auth scope hostname.
 	 * @param port The auth scope port.
 	 * @param user The username.
@@ -476,10 +1073,16 @@ public class RestClientBuilder extends BeanContextBuilder {
 	/**
 	 * Sets a header on all requests.
 	 *
+	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
+	 * 	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+	 *
+	 * 	HttpPartSchema schema = <jsm>tArrayPipes</jsm>().build();  <jc>// Pipe-delimited array.</jc>
+	 * 	String[] value = {<js>"foo"</js>,<js>"bar"</js>};
+	 *
 	 * 	RestClient c = RestClient
 	 * 		.<jsm>create</jsm>()
-	 * 		.header(<js>"Foo"</js>, <js>"bar"</js>, myPartSerializer, headerSchema);
+	 * 		.header(<js>"Foo"</js>, value, myPartSerializer, schema);  <jc>// Gets set as "foo|bar"</jc>
 	 * 		.build();
 	 * </p>
 	 *
@@ -511,6 +1114,41 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
+	 * 	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+	 *
+	 * 	HttpPartSchema schema = <jsm>tArrayPipes</jsm>().build();  <jc>// Pipe-delimited array.</jc>
+	 * 	String[] value = {<js>"foo"</js>,<js>"bar"</js>};
+	 *
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.header(<js>"Foo"</js>, value, schema);  <jc>// Gets set as "foo|bar"</jc>
+	 * 		.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 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, HttpPartSchema schema) {
+		return appendTo(RESTCLIENT_headers, SerializedNameValuePair.create().name(name).value(value).type(HEADER).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>);
@@ -643,7 +1281,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Accept</c> request header.
+	 * Sets the value for the <c>Accept</c> request header on all requests.
 	 *
 	 * <p>
 	 * This overrides the media type specified on the parser, but is overridden by calling
@@ -658,7 +1296,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Accept-Charset</c> request header.
+	 * Sets the value for the <c>Accept-Charset</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Accept-Charset"</js>, value);</code>
@@ -672,7 +1310,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Accept-Encoding</c> request header.
+	 * Sets the value for the <c>Accept-Encoding</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Accept-Encoding"</js>, value);</code>
@@ -686,7 +1324,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Accept-Language</c> request header.
+	 * Sets the value for the <c>Accept-Language</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Accept-Language"</js>, value);</code>
@@ -700,7 +1338,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Authorization</c> request header.
+	 * Sets the value for the <c>Authorization</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Authorization"</js>, value);</code>
@@ -714,7 +1352,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Cache-Control</c> request header.
+	 * Sets the value for the <c>Cache-Control</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Cache-Control"</js>, value);</code>
@@ -739,7 +1377,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Connection</c> request header.
+	 * Sets the value for the <c>Connection</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Connection"</js>, value);</code>
@@ -753,7 +1391,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Content-Length</c> request header.
+	 * Sets the value for the <c>Content-Length</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Content-Length"</js>, value);</code>
@@ -767,7 +1405,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Content-Type</c> request header.
+	 * Sets the value for the <c>Content-Type</c> request header on all requests.
 	 *
 	 * <p>
 	 * This overrides the media type specified on the serializer, but is overridden by calling
@@ -782,7 +1420,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Date</c> request header.
+	 * Sets the value for the <c>Date</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Date"</js>, value);</code>
@@ -796,7 +1434,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Expect</c> request header.
+	 * Sets the value for the <c>Expect</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Expect"</js>, value);</code>
@@ -810,7 +1448,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Forwarded</c> request header.
+	 * Sets the value for the <c>Forwarded</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Forwarded"</js>, value);</code>
@@ -824,7 +1462,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>From</c> request header.
+	 * Sets the value for the <c>From</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"From"</js>, value);</code>
@@ -838,7 +1476,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Host</c> request header.
+	 * Sets the value for the <c>Host</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Host"</js>, value);</code>
@@ -852,7 +1490,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>If-Match</c> request header.
+	 * Sets the value for the <c>If-Match</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"If-Match"</js>, value);</code>
@@ -866,7 +1504,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>If-Modified-Since</c> request header.
+	 * Sets the value for the <c>If-Modified-Since</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"If-Modified-Since"</js>, value);</code>
@@ -880,7 +1518,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>If-None-Match</c> request header.
+	 * Sets the value for the <c>If-None-Match</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"If-None-Match"</js>, value);</code>
@@ -894,7 +1532,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>If-Range</c> request header.
+	 * Sets the value for the <c>If-Range</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"If-Range"</js>, value);</code>
@@ -908,7 +1546,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>If-Unmodified-Since</c> request header.
+	 * Sets the value for the <c>If-Unmodified-Since</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"If-Unmodified-Since"</js>, value);</code>
@@ -922,7 +1560,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Max-Forwards</c> request header.
+	 * Sets the value for the <c>Max-Forwards</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Max-Forwards"</js>, value);</code>
@@ -951,7 +1589,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Origin</c> request header.
+	 * Sets the value for the <c>Origin</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Origin"</js>, value);</code>
@@ -965,7 +1603,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Pragma</c> request header.
+	 * Sets the value for the <c>Pragma</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Pragma"</js>, value);</code>
@@ -979,7 +1617,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Proxy-Authorization</c> request header.
+	 * Sets the value for the <c>Proxy-Authorization</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Proxy-Authorization"</js>, value);</code>
@@ -993,7 +1631,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Range</c> request header.
+	 * Sets the value for the <c>Range</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Range"</js>, value);</code>
@@ -1007,7 +1645,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Referer</c> request header.
+	 * Sets the value for the <c>Referer</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Referer"</js>, value);</code>
@@ -1021,7 +1659,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>TE</c> request header.
+	 * Sets the value for the <c>TE</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"TE"</js>, value);</code>
@@ -1035,7 +1673,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>User-Agent</c> request header.
+	 * Sets the value for the <c>User-Agent</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"User-Agent"</js>, value);</code>
@@ -1049,7 +1687,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Upgrade</c> request header.
+	 * Sets the value for the <c>Upgrade</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Upgrade"</js>, value);</code>
@@ -1063,7 +1701,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Via</c> request header.
+	 * Sets the value for the <c>Via</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Via"</js>, value);</code>
@@ -1077,7 +1715,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	/**
-	 * Sets the value for the <c>Warning</c> request header.
+	 * Sets the value for the <c>Warning</c> request header on all requests.
 	 *
 	 * <p>
 	 * This is a shortcut for calling <code>header(<js>"Warning"</js>, value);</code>
@@ -1097,6 +1735,19 @@ public class RestClientBuilder extends BeanContextBuilder {
 	/**
 	 * Adds a query parameter to the URI.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+	 *
+	 * 	HttpPartSchema schema = <jsm>tArrayPipes</jsm>().build();  <jc>// Pipe-delimited array.</jc>
+	 * 	String[] value = {<js>"foo"</js>,<js>"bar"</js>};
+	 *
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.query(<js>"foo"</js>, myPartSerializer, value, schema);  <jc>// Gets set as "foo|bar"</jc>
+	 * 		.build();
+	 * </p>
+	 *
 	 * @param name The parameter name.
 	 * @param value The parameter value.
 	 * 	<ul>
@@ -1125,6 +1776,41 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
+	 * 	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+	 *
+	 * 	HttpPartSchema schema = <jsm>tArrayPipes</jsm>().build();  <jc>// Pipe-delimited array.</jc>
+	 * 	String[] value = {<js>"foo"</js>,<js>"bar"</js>};
+	 *
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.query(<js>"foo"</js>, value, schema);  <jc>// Gets set as "foo|bar"</jc>
+	 * 		.build();
+	 * </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>
+	 * @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, HttpPartSchema schema) {
+		return appendTo(RESTCLIENT_query, SerializedNameValuePair.create().name(name).value(value).type(QUERY).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>)
@@ -1232,6 +1918,19 @@ public class RestClientBuilder extends BeanContextBuilder {
 	/**
 	 * Adds a form-data parameter to all request bodies.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+	 *
+	 * 	HttpPartSchema schema = <jsm>tArrayPipes</jsm>().build();  <jc>// Pipe-delimited array.</jc>
+	 * 	String[] value = {<js>"foo"</js>,<js>"bar"</js>};
+	 *
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.formData(<js>"foo"</js>, myPartSerializer, value, schema);  <jc>// Gets set as "foo|bar"</jc>
+	 * 		.build();
+	 * </p>
+	 *
 	 * @param name The parameter name.
 	 * @param value The parameter value.
 	 * 	<ul>
@@ -1260,6 +1959,41 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
+	 * 	<jk>import static</jk> org.apache.juneau.httppart.HttpPartSchema.*;
+	 *
+	 * 	HttpPartSchema schema = <jsm>tArrayPipes</jsm>().build();  <jc>// Pipe-delimited array.</jc>
+	 * 	String[] value = {<js>"foo"</js>,<js>"bar"</js>};
+	 *
+	 * 	RestClient c = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.formData(<js>"foo"</js>, value, schema);  <jc>// Gets set as "foo|bar"</jc>
+	 * 		.build();
+	 * </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>
+	 * @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, HttpPartSchema schema) {
+		return appendTo(RESTCLIENT_formData, SerializedNameValuePair.create().name(name).value(value).type(FORMDATA).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>)
@@ -1370,6 +2104,28 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Allows you to provide a custom handler for making HTTP calls.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client that handles processing of requests using a custom handler.</jc>
+	 * 	<jk>public class</jk> MyRestCallHandler <jk>implements</jk> RestCallHandler {
+	 *
+	 * 		<ja>@Override</ja>
+	 * 		<jk>public</jk> HttpResponse execute(HttpHost target, HttpEntityEnclosingRequestBase request, HttpContext context) <jk>throws</jk> ClientProtocolException, IOException {
+	 * 			<jc>// Custom handle requests with request bodies.</jc>
+	 * 		}
+	 *
+	 * 		<ja>@Override</ja>
+	 * 		<jk>public</jk> HttpResponse execute(HttpHost target, HttpRequestBase request, HttpContext context) <jk>throws</jk> ClientProtocolException, IOException {
+	 * 			<jc>// Custom handle requests without request bodies.</jc>
+	 * 		}
+	 * 	}
+	 *
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.callHandler(MyRestCallHandler.<jk>class</jk>)
+	 * 		.build();
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jic'>{@link RestCallHandler}
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_callHandler}
@@ -1391,6 +2147,26 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Allows you to provide a custom handler for making HTTP calls.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client that handles processing of requests using a custom handler.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.callHandler(
+	 * 			<jk>new</jk> RestCallHandler() {
+	 * 				<ja>@Override</ja>
+	 * 				<jk>public</jk> HttpResponse execute(HttpHost target, HttpEntityEnclosingRequestBase request, HttpContext context) <jk>throws</jk> ClientProtocolException, IOException {
+	 * 					<jc>// Custom handle requests with request bodies.</jc>
+	 * 				}
+	 * 				<ja>@Override</ja>
+	 * 				<jk>public</jk> HttpResponse execute(HttpHost target, HttpRequestBase request, HttpContext context) <jk>throws</jk> ClientProtocolException, IOException {
+	 * 					<jc>// Custom handle requests without request bodies.</jc>
+	 * 				}
+	 * 			}
+	 * 		)
+	 * 		.build();
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jic'>{@link RestCallHandler}
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_callHandler}
@@ -1412,6 +2188,15 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Defines a predicate to test for error codes.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client that considers any 300+ responses to be errors.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.errorCodes(x -&gt; x &gt;= 300)
+	 * 		.build();
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_errorCodes}
 	 * </ul>
@@ -1442,6 +2227,30 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * The default executor service is a single-threaded {@link ThreadPoolExecutor} with a 30 second timeout
 	 * and a queue size of 10.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client with a customized executor service.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.executorService(<jk>new</jk> ThreadPoolExecutor(1, 1, 30, TimeUnit.<jsf>SECONDS</jsf>, <jk>new</jk> ArrayBlockingQueue&lt;Runnable&gt;(10)), <jk>true</jk>)
+	 * 		.build();
+	 *
+	 * 	<jc>// Use it to asynchronously run a request.</jc>
+	 * 	Future&lt;RestResponse&gt; f = client.get(<jsf>URL</jsf>).runFuture();
+	 * 	<jc>// Do some other stuff</jc>
+	 * 	<jk>try</jk> {
+	 * 		String body = f.get().getBody().asString();
+	 * 		<jc>// Succeeded!</jc>
+	 * 	} <jk>catch</jk> (RestCallException e) {
+	 * 		<jc>// Failed!</jc>
+	 * 	}
+	 * 	<jc>// Use it to asynchronously retrieve a response.</jc>
+	 * 	Future&lt;MyBean&gt; f
+	 * 		.get(<jsf>URL</jsf>)
+	 * 		.run()
+	 * 		.getBody().asFuture(MyBean.<jk>class</jk>);
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_executorService}
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_executorServiceShutdownOnClose}
@@ -1464,6 +2273,22 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Don't close this client when the {@link RestClient#close()} method is called.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client with a customized client and don't close the client  service.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.httpClient(myHttpClient)
+	 * 		.keepHttpClientOpen(<jk>true</jk>)
+	 * 		.build();
+	 *
+	 * 	client.closeQuietly();  <jc>// Customized HttpClient won't be closed.</jc>
+	 * </p>
+	 *
+	 * <p>
+	 * Note that the {@link RestClient} class implements the {@link Closeable} interface allowing it to be used
+	 * in try-with-resource blocks.
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_keepHttpClientOpen}
 	 * </ul>
@@ -1484,6 +2309,18 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Don't close this client when the {@link RestClient#close()} method is called.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client with a customized client and don't close the client  service.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.httpClient(myHttpClient)
+	 * 		.keepHttpClientOpen()
+	 * 		.build();
+	 *
+	 * 	client.closeQuietly();  <jc>// Customized HttpClient won't be closed.</jc>
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_keepHttpClientOpen}
 	 * </ul>
@@ -1499,7 +2336,46 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * Configuration property:  Call interceptors.
 	 *
 	 * <p>
-	 * Adds an interceptor that gets called immediately after a connection is made.
+	 * Adds an interceptor that can be called to hook into specified events in the lifecycle of a single request.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 *  <jc>// Customized interceptor (note you can also extend from BasicRestCallInterceptor as well.</jc>
+	 * 	<jk>public class</jk> MyRestCallInterceptor <jk>implements</jk> RestCallInterceptor {
+	 *
+	 * 		<ja>@Override</ja> <jc>// RestCallInterceptor</jc>
+	 * 		<jk>public void</jk> init(RestRequest req) <jk>throws</jk> Exception {
+	 *			<jc>// Intercept immediately after RestRequest object is created and all headers/query/form-data has been
+	 *			// set on the request from the client.</jc>
+	 *		}
+	 *
+	 *		<ja>@Override</ja> <jc>// HttpRequestInterceptor</jc>
+	 *		<jk>public void</jk> process(HttpRequest request, HttpContext context) {
+	 *			<jc>// Intercept before the request is sent to the server.</jc>
+	 *		}
+	 *
+	 *		<ja>@Override</ja> <jc>// RestCallInterceptor</jc>
+	 *		<jk>public void</jk> connect(RestRequest req, RestResponse res) <jk>throws</jk> Exception {
+	 *			<jc>// Intercept immediately after an HTTP response has been received.</jc>
+	 *		}
+	 *
+	 *		<ja>@Override</ja> <jc>// HttpResponseInterceptor</jc>
+	 *		<jk>public void</jk> process(HttpResponse response, HttpContext context) <jk>throws</jk> HttpException, IOException {
+	 *			<jc>// Intercept before the message body is evaluated.</jc>
+	 *		}
+	 *
+	 *		<ja>@Override</ja> <jc>// RestCallInterceptor</jc>
+	 *		<jk>public void</jk> close(RestRequest req, RestResponse res) <jk>throws</jk> Exception {
+	 * 			<jc>// Intercept when the response body is consumed.
+	 * 		}
+	 * 	}
+	 *
+	 * 	<jc>// Create a client with a customized interceptor.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.interceptors(MyRestCallInterceptor.<jk>class</jk>)
+	 * 		.build();
+	 * </p>
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
@@ -1524,6 +2400,48 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Adds an interceptor that gets called immediately after a connection is made.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 *  <jc>// Customized interceptor (note you can also extend from BasicRestCallInterceptor as well.</jc>
+	 * 	<jk>public class</jk> MyRestCallInterceptor <jk>implements</jk> RestCallInterceptor {
+	 * 	}
+	 *
+	 * 	<jc>// Create a client with a customized interceptor.</jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.interceptors(
+	 * 			<jk>new</jk> RestCallInterceptor() {
+	 *
+	 * 				<ja>@Override</ja> <jc>// RestCallInterceptor</jc>
+	 * 				<jk>public void</jk> init(RestRequest req) <jk>throws</jk> Exception {
+	 *					<jc>// Intercept immediately after RestRequest object is created and all headers/query/form-data has been
+	 *					// set on the request from the client.</jc>
+	 *				}
+	 *
+	 *				<ja>@Override</ja> <jc>// HttpRequestInterceptor</jc>
+	 *				<jk>public void</jk> process(HttpRequest request, HttpContext context) {
+	 *					<jc>// Intercept before the request is sent to the server.</jc>
+	 *				}
+	 *
+	 *				<ja>@Override</ja> <jc>// RestCallInterceptor</jc>
+	 *				<jk>public void</jk> connect(RestRequest req, RestResponse res) <jk>throws</jk> Exception {
+	 *			<jc>// Intercept immediately after an HTTP response has been received.</jc>
+	 *				}
+	 *
+	 *				<ja>@Override</ja> <jc>// HttpResponseInterceptor</jc>
+	 *				<jk>public void</jk> process(HttpResponse response, HttpContext context) <jk>throws</jk> HttpException, IOException {
+	 *					<jc>// Intercept before the message body is evaluated.</jc>
+	 *				}
+	 *
+	 *				<ja>@Override</ja> <jc>// RestCallInterceptor</jc>
+	 *				<jk>public void</jk> close(RestRequest req, RestResponse res) <jk>throws</jk> Exception {
+	 * 					<jc>// Intercept when the response body is consumed.
+	 * 				}
+	 * 			}
+	 * 		)
+	 * 		.build();
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
 	 * </ul>
@@ -1553,6 +2471,17 @@ public class RestClientBuilder extends BeanContextBuilder {
 	 * <p>
 	 * Automatically enabled with {@link RestClient#RESTCLIENT_debug}.
 	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<jc>// Create a client that logs a message if </jc>
+	 * 	RestClient client = RestClient
+	 * 		.<jsm>create</jsm>()
+	 * 		.leakDetection()
+	 * 		.build();
+	 *
+	 * 	client.closeQuietly();  <jc>// Customized HttpClient won't be closed.</jc>
+	 * </p>
+	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestClient#RESTCLIENT_leakDetection}
 	 * </ul>
@@ -2844,7 +3773,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 
 	/**
 	 * Configuration property:  Parameter format.
-	 * 
+	 *
 	 * <p>
 	 * Specifies the format of parameters when using the {@link UrlEncodingSerializer} to serialize Form Posts.
 	 *
@@ -2862,7 +3791,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 
 	/**
 	 * Configuration property:  Parameter format.
-	 * 
+	 *
 	 * <p>
 	 * Specifies the format of parameters when using the {@link UrlEncodingSerializer} to serialize Form Posts.
 	 *
@@ -3108,7 +4037,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestClientBuilder bpi(Map<String,String> values) {
+	public RestClientBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -3126,7 +4055,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestClientBuilder bpro(Map<String,String> values) {
+	public RestClientBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -3144,7 +4073,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestClientBuilder bpwo(Map<String,String> values) {
+	public RestClientBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -3162,7 +4091,7 @@ public class RestClientBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestClientBuilder bpx(Map<String,String> values) {
+	public RestClientBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
index 0f7ba91..56593e2 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
@@ -12,14 +12,15 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.client2;
 
+import static org.apache.juneau.AddFlag.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.rest.client2.AddFlag.*;
 
 import java.util.*;
 
 import org.apache.http.*;
 import org.apache.http.message.BasicHeader;
+import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.httppart.*;
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
index b13ae8a..25e7a42 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
@@ -13,8 +13,8 @@
 package org.apache.juneau.rest.client2;
 
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.AddFlag.*;
 import static org.apache.juneau.httppart.HttpPartType.*;
-import static org.apache.juneau.rest.client2.AddFlag.*;
 import static org.apache.juneau.rest.client2.RestClientUtils.*;
 
 import java.io.*;
@@ -22,7 +22,6 @@ import java.net.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
-import java.util.logging.*;
 
 import org.apache.http.*;
 import org.apache.http.client.config.*;
@@ -42,7 +41,6 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.oapi.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.rest.client2.logging.*;
 import org.apache.juneau.serializer.*;
 
 /**
@@ -192,36 +190,6 @@ public final class RestRequest extends BeanSession implements HttpUriRequest, Co
 	}
 
 	/**
-	 * Adds a {@link RestCallLogger} to the list of interceptors on this class.
-	 *
-	 * @param level The log level to log events at.
-	 * @param log The logger.
-	 * @return This object (for method chaining).
-	 */
-	public RestRequest logTo(Level level, Logger log) {
-		try {
-			interceptors(new BasicRestCallLogger(level, log));
-		} catch (RestCallException e) {
-			e.printStackTrace();
-		}
-		return this;
-	}
-
-	/**
-	 * Adds a {@link ConsoleRestCallLogger} to the list of interceptors on this class.
-	 *
-	 * @return This object (for method chaining).
-	 */
-	public RestRequest logToConsole() {
-		try {
-			interceptors(new ConsoleRestCallLogger());
-		} catch (RestCallException e) {
-			e.printStackTrace();
-		}
-		return this;
-	}
-
-	/**
 	 * Sets <c>Debug: value</c> header on this request.
 	 *
 	 * @return This object (for method chaining).
@@ -2360,6 +2328,9 @@ public final class RestRequest extends BeanSession implements HttpUriRequest, Co
 				throw e;
 			}
 
+			if (client.logRequests == DetailLevel.FULL)
+				response.getBody().cache();
+
 			for (RestCallInterceptor rci : interceptors)
 				rci.onConnect(this, response);
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
index e2fb349..6bcb096 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
@@ -619,6 +619,48 @@ public final class RestResponse implements HttpResponse {
 			return;
 		isClosed = true;
 		EntityUtils.consumeQuietly(response.getEntity());
+
+		if (client.logRequestsPredicate.test(request, this)) {
+			if (client.logRequests == DetailLevel.SIMPLE) {
+				client.log(client.logRequestsLevel, "HTTP {0} {1}, {2}", request.getMethod(), request.getURI(), this.getStatusLine());
+			} else if (client.logRequests == DetailLevel.FULL) {
+				String output = getBody().asString();
+				StringBuilder sb = new StringBuilder();
+				sb.append("\n=== HTTP Call (outgoing) ======================================================");
+				sb.append("\n=== REQUEST ===\n");
+				sb.append(request.getMethod()).append(" ").append(request.getURI());
+				sb.append("\n---request headers---");
+				for (Header h : request.getAllHeaders())
+					sb.append("\n\t").append(h);
+				if (request.hasHttpEntity()) {
+					sb.append("\n---request entity---");
+					HttpEntity e = request.getHttpEntity();
+					if (e == null)
+						sb.append("\nEntity is null");
+					else {
+						if (e.getContentType() != null)
+							sb.append("\n").append(e.getContentType());
+						if (e.getContentEncoding() != null)
+							sb.append("\n").append(e.getContentEncoding());
+						if (e.isRepeatable()) {
+							try {
+								sb.append("\n---request content---\n").append(EntityUtils.toString(e));
+							} catch (Exception ex) {
+								throw new RuntimeException(ex);
+							}
+						}
+					}
+				}
+				sb.append("\n=== RESPONSE ===\n").append(getStatusLine());
+				sb.append("\n---response headers---");
+				for (Header h : getAllHeaders())
+					sb.append("\n\t").append(h);
+				sb.append("\n---response content---\n").append(output);
+				sb.append("\n=== END =======================================================================");
+				client.log(client.logRequestsLevel, sb.toString());
+			}
+		}
+
 		for (RestCallInterceptor r : request.interceptors) {
 			try {
 				r.onClose(request, this);
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 cec732f..62a31aa 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
@@ -14,6 +14,7 @@ package org.apache.juneau.rest.client2;
 
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static java.util.logging.Level.*;
 
 import java.io.*;
 import java.lang.reflect.*;
@@ -1553,7 +1554,7 @@ public class RestResponseBody implements HttpEntity {
 				sb.append("Response did not have the expected value for body.");
 				sb.append("\nExpected: [").append(value.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\t", "\\\\t")).append("]");
 				sb.append("\nActual  : [").append(text.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\t", "\\\\t")).append("]");
-				System.err.println(sb);
+				client.log(WARNING, sb.toString());
 			}
 			throw new BasicAssertionError("Response did not have the expected value for body.\n\tExpected=[{0}]\n\tActual=[{1}]", value, text);
 		}
@@ -1597,7 +1598,7 @@ public class RestResponseBody implements HttpEntity {
 					sb.append("Response did not have the expected substring for body.");
 					sb.append("\nExpected: [").append(substring.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\t", "\\\\t")).append("]");
 					sb.append("\nActual  : [").append(text.replaceAll("\\\\", "\\\\\\\\").replaceAll("\n", "\\\\n").replaceAll("\t", "\\\\t")).append("]");
-					System.err.println(sb);
+					client.log(WARNING, sb.toString());
 				}
 				throw new BasicAssertionError("Response did not have the expected substring for body.\n\tExpected=[{0}]\n\tBody=[{1}]", substring, text);
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/BasicRestCallLogger.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/BasicRestCallLogger.java
deleted file mode 100644
index 92d2a07..0000000
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/BasicRestCallLogger.java
+++ /dev/null
@@ -1,62 +0,0 @@
-// ***************************************************************************************************************************
-// * 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.logging;
-
-import java.util.logging.*;
-
-import org.apache.juneau.rest.client2.*;
-
-/**
- * Specialized interceptor for logging calls to a log file.
- *
- * <p>
- * Causes a log entry to be created that shows all the request and response headers and content at the end of the
- * request.
- *
- * <p>
- * Use the {@link RestClientBuilder#logTo(Level, Logger)} and {@link RestRequest#logTo(Level, Logger)} methods to create
- * instances of this class.
- */
-public class BasicRestCallLogger extends RestCallLogger {
-
-	/**
-	 * Default HTTP request logger.
-	 * <p>
-	 * Logs outgoing HTTP requests to the <c>org.apache.juneau.rest.client</c> logger at <jsf>WARNING</jsf> level.
-	 */
-	public static final BasicRestCallLogger DEFAULT = new BasicRestCallLogger(Level.WARNING, Logger.getLogger("org.apache.juneau.rest.client"));
-
-	private Level level;
-	private Logger log;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param level The log level to log messages at.
-	 * @param log The logger to log to.
-	 */
-	public BasicRestCallLogger(Level level, Logger log) {
-		this.level = level;
-		this.log = log;
-	}
-
-	@Override
-	public boolean shouldLog(RestRequest req, RestResponse res) {
-		return log.isLoggable(level);
-	}
-
-	@Override
-	public void log(Throwable t, String msg) {
-		log.log(level, msg, t);
-	}
-}
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java
deleted file mode 100644
index 8bf7220..0000000
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java
+++ /dev/null
@@ -1,116 +0,0 @@
-// ***************************************************************************************************************************
-// * 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.logging;
-
-import static org.apache.juneau.internal.StringUtils.*;
-
-import java.text.*;
-
-import org.apache.http.*;
-import org.apache.http.util.*;
-import org.apache.juneau.rest.client2.*;
-
-/**
- * Specialized intercepter for logging calls to a log file.
- */
-public abstract class RestCallLogger extends BasicRestCallInterceptor {
-
-	/**
-	 * Returns <jk>true</jk> if the specified request/response should be logged.
-	 *
-	 * @param req The request.  Can be <jk>null</jk>.
-	 * @param res The response.  Can be <jk>null</jk>.
-	 * @return <jk>true</jk> if the specified request/response should be logged.
-	 */
-	public abstract boolean shouldLog(RestRequest req, RestResponse res);
-
-	/**
-	 * Logs a message.
-	 *
-	 * @param t Thrown exception.  Can be <jk>null</jk>.
-	 * @param msg The message.
-	 */
-	public abstract void log(Throwable t, String msg);
-
-	/**
-	 * Logs a message.
-	 *
-	 * @param msg The message with {@link MessageFormat}-style arguments.
-	 * @param args The arguments.
-	 */
-	protected final void log(String msg, Object...args) {
-		log(null, format(msg, args));
-	}
-
-	/**
-	 * Logs a message.
-	 *
-	 * @param t Thrown exception.  Can be <jk>null</jk>.
-	 * @param msg The message with {@link MessageFormat}-style arguments.
-	 * @param args The arguments.
-	 */
-	protected final void log(Throwable t, String msg, Object...args) {
-		log(t, format(msg, args));
-	}
-
-	@Override /* RestCallInterceptor */
-	public void onConnect(RestRequest req, RestResponse res) {
-		if (shouldLog(req, null))
-			res.getBody().cache();
-	}
-
-	@Override /* RestCallInterceptor */
-	public void onClose(RestRequest req, RestResponse res) throws Exception {
-		if (shouldLog(req, res)) {
-			String output = res == null ? null : res.getBody().asString();
-			StringBuilder sb = new StringBuilder();
-			if (req != null) {
-				sb.append("\n=== HTTP Call (outgoing) ======================================================");
-
-				sb.append("\n=== REQUEST ===\n");
-				sb.append(req.getMethod()).append(" ").append(req.getURI());
-				sb.append("\n---request headers---");
-				for (Header h : req.getAllHeaders())
-					sb.append("\n\t").append(h);
-				if (req.hasHttpEntity()) {
-					sb.append("\n---request entity---");
-					HttpEntity e = req.getHttpEntity();
-					if (e == null)
-						sb.append("\nEntity is null");
-					else {
-						if (e.getContentType() != null)
-							sb.append("\n").append(e.getContentType());
-						if (e.getContentEncoding() != null)
-							sb.append("\n").append(e.getContentEncoding());
-						if (e.isRepeatable()) {
-							try {
-								sb.append("\n---request content---\n").append(EntityUtils.toString(e));
-							} catch (Exception ex) {
-								throw new RuntimeException(ex);
-							}
-						}
-					}
-				}
-			}
-			if (res != null) {
-				sb.append("\n=== RESPONSE ===\n").append(res.getStatusLine());
-				sb.append("\n---response headers---");
-				for (Header h : res.getAllHeaders())
-					sb.append("\n\t").append(h);
-				sb.append("\n---response content---\n").append(output);
-				sb.append("\n=== END =======================================================================");
-			}
-			log(sb.toString());
-		}
-	}
-}
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/package-info.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/package-info.java
deleted file mode 100644
index 0ac65f3..0000000
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/package-info.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/***************************************************************************************************************************
- * 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.
- *
- ***************************************************************************************************************************/
-
-/**
- * REST Client API - Logging
- */
-package org.apache.juneau.rest.client2.logging;
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRemote.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRemote.java
index 1649acd..60e3852 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRemote.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRemote.java
@@ -83,7 +83,7 @@ public class MockRemote<T> {
 	 */
 	public T build() {
 		MockRest mr = mrb.build();
-		return rcb.httpClientConnectionManager(new MockHttpClientConnectionManager(mr)).rootUrl("http://localhost").headers(mr.getHeaders()).build().getRemote(intf);
+		return rcb.connectionManager(new MockHttpClientConnectionManager(mr)).rootUrl("http://localhost").headers(mr.getHeaders()).build().getRemote(intf);
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
index 6ec353c..309221b 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java
@@ -20,7 +20,6 @@ import java.util.logging.*;
 import java.lang.annotation.*;
 import java.lang.reflect.Method;
 
-import org.apache.http.conn.*;
 import org.apache.http.impl.client.*;
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
@@ -128,7 +127,7 @@ public class MockRestClient extends RestClientBuilder {
 	public RestClient build() {
 		if (peek(BeanContext.BEAN_debug) == Boolean.TRUE)
 			mrb.debug();
-		httpClientConnectionManager(new MockHttpClientConnectionManager(mrb.build()));
+		connectionManager(new MockHttpClientConnectionManager(mrb.build()));
 		return super.build();
 	}
 
@@ -363,7 +362,7 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MockRestClient bpi(Map<String,String> values) {
+	public MockRestClient bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -381,7 +380,7 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MockRestClient bpro(Map<String,String> values) {
+	public MockRestClient bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -399,7 +398,7 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MockRestClient bpwo(Map<String,String> values) {
+	public MockRestClient bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -417,7 +416,7 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public MockRestClient bpx(Map<String,String> values) {
+	public MockRestClient bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
@@ -999,6 +998,12 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
+	public MockRestClient formData(String name, Object value, HttpPartSchema schema) {
+		super.formData(name, value, schema);
+		return this;
+	}
+
+	@Override /* GENERATED - RestClientBuilder */
 	public MockRestClient formData(String name, Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
 		super.formData(name, value, serializer, schema);
 		return this;
@@ -1035,6 +1040,12 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
+	public MockRestClient header(String name, Object value, HttpPartSchema schema) {
+		super.header(name, value, schema);
+		return this;
+	}
+
+	@Override /* GENERATED - RestClientBuilder */
 	public MockRestClient header(String name, Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
 		super.header(name, value, serializer, schema);
 		return this;
@@ -1065,20 +1076,26 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
-	public MockRestClient httpClient(CloseableHttpClient value) {
-		super.httpClient(value);
+	public MockRestClient htmlDoc() {
+		super.htmlDoc();
 		return this;
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
-	public MockRestClient httpClientBuilder(HttpClientBuilder value) {
-		super.httpClientBuilder(value);
+	public MockRestClient htmlStrippedDoc() {
+		super.htmlStrippedDoc();
+		return this;
+	}
+
+	@Override /* GENERATED - RestClientBuilder */
+	public MockRestClient httpClient(CloseableHttpClient value) {
+		super.httpClient(value);
 		return this;
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
-	public MockRestClient httpClientConnectionManager(HttpClientConnectionManager httpClientConnectionManager) {
-		super.httpClientConnectionManager(httpClientConnectionManager);
+	public MockRestClient httpClientBuilder(HttpClientBuilder value) {
+		super.httpClientBuilder(value);
 		return this;
 	}
 
@@ -1192,8 +1209,8 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
-	public MockRestClient logTo(Level level, Logger log) {
-		super.logTo(level, log);
+	public MockRestClient logRequests(DetailLevel detail, Level level) {
+		super.logRequests(detail, level);
 		return this;
 	}
 
@@ -1204,6 +1221,18 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
+	public MockRestClient logToConsole(boolean value) {
+		super.logToConsole(value);
+		return this;
+	}
+
+	@Override /* GENERATED - RestClientBuilder */
+	public MockRestClient logger(Logger value) {
+		super.logger(value);
+		return this;
+	}
+
+	@Override /* GENERATED - RestClientBuilder */
 	public MockRestClient marshall(Marshall value) {
 		super.marshall(value);
 		return this;
@@ -1373,6 +1402,12 @@ public class MockRestClient extends RestClientBuilder {
 	}
 
 	@Override /* GENERATED - RestClientBuilder */
+	public MockRestClient query(String name, Object value, HttpPartSchema schema) {
+		super.query(name, value, schema);
+		return this;
+	}
+
+	@Override /* GENERATED - RestClientBuilder */
 	public MockRestClient query(String name, Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
 		super.query(name, value, serializer, schema);
 		return this;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 9980bd4..99fbad3 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -2816,7 +2816,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestContextBuilder bpi(Map<String,String> values) {
+	public RestContextBuilder bpi(Map<String,Object> values) {
 		super.bpi(values);
 		return this;
 	}
@@ -2834,7 +2834,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestContextBuilder bpro(Map<String,String> values) {
+	public RestContextBuilder bpro(Map<String,Object> values) {
 		super.bpro(values);
 		return this;
 	}
@@ -2852,7 +2852,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestContextBuilder bpwo(Map<String,String> values) {
+	public RestContextBuilder bpwo(Map<String,Object> values) {
 		super.bpwo(values);
 		return this;
 	}
@@ -2870,7 +2870,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public RestContextBuilder bpx(Map<String,String> values) {
+	public RestContextBuilder bpx(Map<String,Object> values) {
 		super.bpx(values);
 		return this;
 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
index d155d08..39dc2e1 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
@@ -12,10 +12,15 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
+import java.lang.annotation.*;
+import java.util.*;
+
 import org.apache.juneau.*;
+import org.apache.juneau.http.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.svl.*;
+import java.lang.reflect.Method;
 
 /**
  * Builder class for {@link RestMethodContext} objects.
@@ -62,4 +67,686 @@ public class RestMethodContextBuilder extends BeanContextBuilder {
 			throw new RestServletException("Exception occurred while initializing method ''{0}''", sig).initCause(e);
 		}
 	}
+
+	// <CONFIGURATION-PROPERTIES>
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder add(Map<String,Object> properties) {
+		super.add(properties);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder addTo(String name, Object value) {
+		super.addTo(name, value);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder appendTo(String name, Object value) {
+		super.appendTo(name, value);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder apply(PropertyStore copyFrom) {
+		super.apply(copyFrom);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder applyAnnotations(java.lang.Class<?>...fromClasses) {
+		super.applyAnnotations(fromClasses);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder applyAnnotations(Method...fromMethods) {
+		super.applyAnnotations(fromMethods);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder applyAnnotations(AnnotationList al, VarResolverSession r) {
+		super.applyAnnotations(al, r);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder prependTo(String name, Object value) {
+		super.prependTo(name, value);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder putAllTo(String name, Object value) {
+		super.putAllTo(name, value);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder putTo(String name, String key, Object value) {
+		super.putTo(name, key, value);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder removeFrom(String name, Object value) {
+		super.removeFrom(name, value);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder set(Map<String,Object> properties) {
+		super.set(properties);
+		return this;
+	}
+
+	@Override /* GENERATED - ContextBuilder */
+	public RestMethodContextBuilder set(String name, Object value) {
+		super.set(name, value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder annotations(Annotation...values) {
+		super.annotations(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanClassVisibility(Visibility value) {
+		super.beanClassVisibility(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanConstructorVisibility(Visibility value) {
+		super.beanConstructorVisibility(value);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanDictionary(java.lang.Class<?>...values) {
+		super.beanDictionary(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanDictionary(Object...values) {
+		super.beanDictionary(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanDictionaryRemove(java.lang.Class<?>...values) {
+		super.beanDictionaryRemove(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanDictionaryRemove(Object...values) {
+		super.beanDictionaryRemove(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanDictionaryReplace(java.lang.Class<?>...values) {
+		super.beanDictionaryReplace(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanDictionaryReplace(Object...values) {
+		super.beanDictionaryReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanFieldVisibility(Visibility value) {
+		super.beanFieldVisibility(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanFilters(Object...values) {
+		super.beanFilters(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanFiltersRemove(Object...values) {
+		super.beanFiltersRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanFiltersReplace(Object...values) {
+		super.beanFiltersReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanMapPutReturnsOldValue() {
+		super.beanMapPutReturnsOldValue();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanMapPutReturnsOldValue(boolean value) {
+		super.beanMapPutReturnsOldValue(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanMethodVisibility(Visibility value) {
+		super.beanMethodVisibility(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beanTypePropertyName(String value) {
+		super.beanTypePropertyName(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansDontRequireSomeProperties() {
+		super.beansDontRequireSomeProperties();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireDefaultConstructor() {
+		super.beansRequireDefaultConstructor();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireDefaultConstructor(boolean value) {
+		super.beansRequireDefaultConstructor(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireSerializable() {
+		super.beansRequireSerializable();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireSerializable(boolean value) {
+		super.beansRequireSerializable(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireSettersForGetters() {
+		super.beansRequireSettersForGetters();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireSettersForGetters(boolean value) {
+		super.beansRequireSettersForGetters(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder beansRequireSomeProperties(boolean value) {
+		super.beansRequireSomeProperties(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpi(Map<String,Object> values) {
+		super.bpi(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpi(Class<?> beanClass, String properties) {
+		super.bpi(beanClass, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpi(String beanClassName, String properties) {
+		super.bpi(beanClassName, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpro(Map<String,Object> values) {
+		super.bpro(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpro(Class<?> beanClass, String properties) {
+		super.bpro(beanClass, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpro(String beanClassName, String properties) {
+		super.bpro(beanClassName, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpwo(Map<String,Object> values) {
+		super.bpwo(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpwo(Class<?> beanClass, String properties) {
+		super.bpwo(beanClass, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpwo(String beanClassName, String properties) {
+		super.bpwo(beanClassName, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpx(Map<String,Object> values) {
+		super.bpx(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpx(Class<?> beanClass, String properties) {
+		super.bpx(beanClass, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder bpx(String beanClassName, String properties) {
+		super.bpx(beanClassName, properties);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder debug() {
+		super.debug();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder debug(boolean value) {
+		super.debug(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dictionary(java.lang.Class<?>...values) {
+		super.dictionary(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dictionary(Object...values) {
+		super.dictionary(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dictionaryRemove(java.lang.Class<?>...values) {
+		super.dictionaryRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dictionaryRemove(Object...values) {
+		super.dictionaryRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dictionaryReplace(java.lang.Class<?>...values) {
+		super.dictionaryReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dictionaryReplace(Object...values) {
+		super.dictionaryReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dontIgnorePropertiesWithoutSetters() {
+		super.dontIgnorePropertiesWithoutSetters();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dontIgnoreTransientFields() {
+		super.dontIgnoreTransientFields();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dontIgnoreUnknownNullBeanProperties() {
+		super.dontIgnoreUnknownNullBeanProperties();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder dontUseInterfaceProxies() {
+		super.dontUseInterfaceProxies();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public <T> RestMethodContextBuilder example(Class<T> pojoClass, T o) {
+		super.example(pojoClass, o);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public <T> RestMethodContextBuilder exampleJson(Class<T> pojoClass, String json) {
+		super.exampleJson(pojoClass, json);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder examples(String json) {
+		super.examples(json);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder excludeProperties(Map<String,String> values) {
+		super.excludeProperties(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder excludeProperties(Class<?> beanClass, String properties) {
+		super.excludeProperties(beanClass, properties);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder excludeProperties(String beanClassName, String value) {
+		super.excludeProperties(beanClassName, value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder fluentSetters() {
+		super.fluentSetters();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder fluentSetters(boolean value) {
+		super.fluentSetters(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreInvocationExceptionsOnGetters() {
+		super.ignoreInvocationExceptionsOnGetters();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+		super.ignoreInvocationExceptionsOnGetters(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreInvocationExceptionsOnSetters() {
+		super.ignoreInvocationExceptionsOnSetters();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+		super.ignoreInvocationExceptionsOnSetters(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignorePropertiesWithoutSetters(boolean value) {
+		super.ignorePropertiesWithoutSetters(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreTransientFields(boolean value) {
+		super.ignoreTransientFields(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreUnknownBeanProperties() {
+		super.ignoreUnknownBeanProperties();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreUnknownBeanProperties(boolean value) {
+		super.ignoreUnknownBeanProperties(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder ignoreUnknownNullBeanProperties(boolean value) {
+		super.ignoreUnknownNullBeanProperties(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder implClass(Class<?> interfaceClass, Class<?> implClass) {
+		super.implClass(interfaceClass, implClass);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder implClasses(Map<String,Class<?>> values) {
+		super.implClasses(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder includeProperties(Map<String,String> values) {
+		super.includeProperties(values);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder includeProperties(Class<?> beanClass, String value) {
+		super.includeProperties(beanClass, value);
+		return this;
+	}
+
+	@Deprecated @Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder includeProperties(String beanClassName, String value) {
+		super.includeProperties(beanClassName, value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder locale(Locale value) {
+		super.locale(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder mediaType(MediaType value) {
+		super.mediaType(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanClasses(java.lang.Class<?>...values) {
+		super.notBeanClasses(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanClasses(Object...values) {
+		super.notBeanClasses(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanClassesRemove(java.lang.Class<?>...values) {
+		super.notBeanClassesRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanClassesRemove(Object...values) {
+		super.notBeanClassesRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanClassesReplace(java.lang.Class<?>...values) {
+		super.notBeanClassesReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanClassesReplace(Object...values) {
+		super.notBeanClassesReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanPackages(Object...values) {
+		super.notBeanPackages(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanPackages(String...values) {
+		super.notBeanPackages(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanPackagesRemove(Object...values) {
+		super.notBeanPackagesRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanPackagesRemove(String...values) {
+		super.notBeanPackagesRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanPackagesReplace(Object...values) {
+		super.notBeanPackagesReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder notBeanPackagesReplace(String...values) {
+		super.notBeanPackagesReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder pojoSwaps(java.lang.Class<?>...values) {
+		super.pojoSwaps(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder pojoSwaps(Object...values) {
+		super.pojoSwaps(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder pojoSwapsRemove(java.lang.Class<?>...values) {
+		super.pojoSwapsRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder pojoSwapsRemove(Object...values) {
+		super.pojoSwapsRemove(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder pojoSwapsReplace(java.lang.Class<?>...values) {
+		super.pojoSwapsReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder pojoSwapsReplace(Object...values) {
+		super.pojoSwapsReplace(values);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder propertyNamer(Class<? extends org.apache.juneau.PropertyNamer> value) {
+		super.propertyNamer(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder sortProperties() {
+		super.sortProperties();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder sortProperties(boolean value) {
+		super.sortProperties(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder timeZone(TimeZone value) {
+		super.timeZone(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder useEnumNames() {
+		super.useEnumNames();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder useEnumNames(boolean value) {
+		super.useEnumNames(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder useInterfaceProxies(boolean value) {
+		super.useInterfaceProxies(value);
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder useJavaBeanIntrospector() {
+		super.useJavaBeanIntrospector();
+		return this;
+	}
+
+	@Override /* GENERATED - BeanContextBuilder */
+	public RestMethodContextBuilder useJavaBeanIntrospector(boolean value) {
+		super.useJavaBeanIntrospector(value);
+		return this;
+	}
+
+	// </CONFIGURATION-PROPERTIES>
 }
\ No newline at end of file