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 2022/06/18 20:09:54 UTC

[juneau] branch master updated: Clean up unnecessary methods in RestClient.Builder/RestRequest

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 ca64f2314 Clean up unnecessary methods in RestClient.Builder/RestRequest
ca64f2314 is described below

commit ca64f2314868385b78f9eb81aca81eda9899d23a
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sat Jun 18 16:09:30 2022 -0400

    Clean up unnecessary methods in RestClient.Builder/RestRequest
---
 juneau-doc/docs/Topics/10.juneau-rest-client.html  |  13 +-
 .../01.jrc.PojoMarshalling.html                    |   4 +-
 ...equestHeaders.html => 02.jrc.RequestParts.html} |  71 ++-
 .../03.jrc.RequestQueryParameters.html             |  96 ----
 .../04.jrc.RequestFormData.html                    |  97 ----
 ...RequestBody.html => 05.jrc.RequestContent.html} |   0
 juneau-doc/src/main/javadoc/overview.html          | 204 +++----
 juneau-doc/src/main/javadoc/resources/docs.txt     |   6 +-
 .../org/apache/juneau/rest/client/RestClient.java  | 305 ++---------
 .../org/apache/juneau/rest/client/RestRequest.java | 606 ++-------------------
 .../apache/juneau/rest/client/RestResponse.java    |   2 +-
 .../apache/juneau/rest/mock/MockRestClient.java    |  84 ---
 .../juneau/rest/Header_AcceptEncoding_Test.java    |  71 +--
 .../org/apache/juneau/rest/RestOp_Params_Test.java |  37 --
 .../rest/annotation/RestOp_ClientVersion_Test.java |  13 +-
 .../juneau/rest/annotation/Rest_Encoders_Test.java |  11 +-
 .../rest/client/RestClient_FormData_Test.java      |  17 -
 .../rest/client/RestClient_Headers_Test.java       |  79 ---
 .../juneau/rest/client/RestClient_Query_Test.java  |  18 -
 .../apache/juneau/rest/client/RestClient_Test.java |   2 +-
 20 files changed, 315 insertions(+), 1421 deletions(-)

diff --git a/juneau-doc/docs/Topics/10.juneau-rest-client.html b/juneau-doc/docs/Topics/10.juneau-rest-client.html
index 31cf16bcf..8f8dd7b3e 100644
--- a/juneau-doc/docs/Topics/10.juneau-rest-client.html
+++ b/juneau-doc/docs/Topics/10.juneau-rest-client.html
@@ -67,8 +67,8 @@ specific language governing permissions and limitations under the License.
 		|	<jv>res</jv> = <jv>codeAssertion</jv>.is(200);
 		|	FluentStringAssertion&lt;RestResponse&gt; <jv>headerAssertion</jv> = <jv>res</jv>.assertHeader(<js>"Content-Type"</js>);
 		|	<jv>res</jv> = <jv>headerAssertion</jv>.matchesSimple(<js>"application/json*"</js>);
-		|	ResponseContent <jv>body</jv> = <jv>res</jv>.getContent();
-		|	MyBean <jv>bean</jv> = <jv>body</jv>.as(MyBean.<jk>class</jk>);
+		|	ResponseContent <jv>content</jv> = <jv>res</jv>.getContent();
+		|	MyBean <jv>bean</jv> = <jv>content</jv>.as(MyBean.<jk>class</jk>);
 	</p>
 	
 	<p>
@@ -89,10 +89,11 @@ specific language governing permissions and limitations under the License.
 		|		);
 		|	}
 		|
-		|	<jc>// Use a RestClient with default Simple JSON support.</jc>
-		|	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().simpleJson().build();
-		|	
-		|	PetStore <jv>store</jv> = <jv>client</jv>.getRemote(PetStore.<jk>class</jk>, <js>"http://localhost:10000"</js>);
+		|	PetStore <jv>store</jv> = RestClient
+		|		.<jsm>create</jsm>()
+		|		.simpleJson()
+		|		.build()
+		|		.getRemote(PetStore.<jk>class</jk>, <js>"http://localhost:10000"</js>);
 		|	CreatePet <jv>createPet</jv> = <jk>new</jk> CreatePet(<js>"Fluffy"</js>, 9.99);
 		|	Pet <jv>pet</jv> = <jv>store</jv>.addPet(<jv>createPet</jv>, UUID.<jsm>randomUUID</jsm>(), <jk>true</jk>);
 	</p>
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-client/01.jrc.PojoMarshalling.html b/juneau-doc/docs/Topics/10.juneau-rest-client/01.jrc.PojoMarshalling.html
index 9eb142d62..2267ef699 100644
--- a/juneau-doc/docs/Topics/10.juneau-rest-client/01.jrc.PojoMarshalling.html
+++ b/juneau-doc/docs/Topics/10.juneau-rest-client/01.jrc.PojoMarshalling.html
@@ -13,7 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
-{title:'POJO Marshalling', created:'8.2.0', flags:'todo'}
+{title:'POJO Marshalling', created:'8.2.0', updated:'9.0.0'}
 
 <div class='topic'>
 	<p>
@@ -22,7 +22,7 @@
 	</p>
 	<ul class='javatree'>
 		<li class='jc'>{@link oajrc.RestClient.Builder}
-		<ul>
+		<ul class='javatreec'>
 			<li class='jm'>{@link oajrc.RestClient.Builder#json() json()}
 			<li class='jm'>{@link oajrc.RestClient.Builder#simpleJson() simpleJson()}
 			<li class='jm'>{@link oajrc.RestClient.Builder#xml() xml()}
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-client/02.jrc.RequestHeaders.html b/juneau-doc/docs/Topics/10.juneau-rest-client/02.jrc.RequestParts.html
similarity index 57%
rename from juneau-doc/docs/Topics/10.juneau-rest-client/02.jrc.RequestHeaders.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/02.jrc.RequestParts.html
index 4cf2d19ca..9c74a64fc 100644
--- a/juneau-doc/docs/Topics/10.juneau-rest-client/02.jrc.RequestHeaders.html
+++ b/juneau-doc/docs/Topics/10.juneau-rest-client/02.jrc.RequestParts.html
@@ -13,33 +13,72 @@
  ***************************************************************************************************************************/
  -->
 
-{title:'Request Headers', created:'8.2.0', flags:'todo'}
+{title:'Request Headers', created:'8.2.0', updated:'9.0.0'}
 
 <div class='topic'>
 	<p>
-		Per-client or per-request headers can be specified using the following methods:
+		Per-client or per-request HTTP parts (headers, query/form data, path parameters) can be manipulated via the following methods
+		that return back builders for those parts:
 	</p>
 	<ul class='javatree'>
 		<li class='jc'>{@link oajrc.RestClient.Builder}
 		<ul>
-			<li class='jm'>{@link oajrc.RestClient.Builder#header(String,Object) header(String,Object)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#header(String,Object,HttpPartSchema) header(String,Object,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#header(String,Supplier) header(String,Supplier&lt;?&gt;)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#header(String,Supplier,HttpPartSchema) header(String,Supplier&lt;?&gt;,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#header(Header) header(Header)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#headers(Object...) headers(Object...)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#headerPairs(Object...) headerPairs(Object...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#headers() headers()}
+			<li class='jm'>{@link oajrc.RestClient.Builder#formData() formData()}
+			<li class='jm'>{@link oajrc.RestClient.Builder#queryData() queryData()}
+			<li class='jm'>{@link oajrc.RestClient.Builder#pathData() pathData()}
+		</ul>
+		<li class='jc'>{@link oajrc.RestRequest}
+		<ul>
+			<li class='jm'>{@link oajrc.RestRequest#headers() headers()}
+			<li class='jm'>{@link oajrc.RestRequest#formData() formData()}
+			<li class='jm'>{@link oajrc.RestRequest#queryData() queryData()}
+			<li class='jm'>{@link oajrc.RestRequest#pathData() pathData()}
+		</ul>
+	</ul>
+	<p>
+		Convenience methods are also provided for quickly adding parts:
+	</p>
+	<ul class='javatree'>
+		<li class='jc'>{@link oajrc.RestClient.Builder}
+		<ul>
+			<li class='jm'>{@link oajrc.RestClient.Builder#header(String,String) header(String,String)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#header(String,Supplier) header(String,Supplier&lt;String&gt;)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#headers(Header...) headers(Header...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#headersDefault(Header...) headersDefault(Header...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#formData(NameValuePair...) formData(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#formData(String,String) formData(String,String)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#formData(String,Supplier) formData(String,Supplier&lt;String&gt;)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#formDataDefault(NameValuePair...) formDataDefault(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#queryData(NameValuePair...) queryData(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#queryData(String,String) queryData(String,String)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#queryData(String,Supplier) queryData(String,Supplier&lt;String&gt;)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#queryDataDefault(NameValuePair...) queryDataDefault(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#pathData(NameValuePair...) pathData(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#pathData(String,String) pathData(String,String)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#pathData(String,Supplier) pathData(String,Supplier&lt;String&gt;)}
+			<li class='jm'>{@link oajrc.RestClient.Builder#pathDataDefault(NameValuePair...) pathDataDefault(NameValuePair...)}
 		</ul>
 		<li class='jc'>{@link oajrc.RestRequest}
 		<ul>
-			<li class='jm'>{@link oajrc.RestRequest#header(String,Object) header(String,Object)}
-			<li class='jm'>{@link oajrc.RestRequest#header(String,Object,HttpPartSchema) header(String,Object,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestRequest#header(AddFlag,String,Object) header(AddFlag,String,Object)}
-			<li class='jm'>{@link oajrc.RestRequest#header(AddFlag,String,Object,HttpPartSchema) header(AddFlag,String,Object,HttpPartSchema)}
 			<li class='jm'>{@link oajrc.RestRequest#header(Header) header(Header)}
-			<li class='jm'>{@link oajrc.RestRequest#headers(Object...) headers(Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#headers(AddFlag,Object...) headers(AddFlag,Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#headerPairs(Object...) headers(Object...)}
+			<li class='jm'>{@link oajrc.RestRequest#header(String,Object) header(String,Object)}
+			<li class='jm'>{@link oajrc.RestRequest#headerPairs(String...) headerPairs(String...)}
+			<li class='jm'>{@link oajrc.RestRequest#headers(Header...) headers(Header...)}
+			<li class='jm'>{@link oajrc.RestRequest#headersBean(Object) headersBean(Object)}
+			<li class='jm'>{@link oajrc.RestRequest#formData(NameValuePair...) formData(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestRequest#formData(String,Object) formData(String,Object)}
+			<li class='jm'>{@link oajrc.RestRequest#formDataBean(Object) formDataBean(Object)}
+			<li class='jm'>{@link oajrc.RestRequest#formDataCustom(Object) formDataCustom(Object)}
+			<li class='jm'>{@link oajrc.RestRequest#formDataPairs(String...) formDataPairs(String...)}
+			<li class='jm'>{@link oajrc.RestRequest#queryData(NameValuePair...) queryData(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestRequest#queryData(String,Object) queryData(String,Object)}
+			<li class='jm'>{@link oajrc.RestRequest#queryDataBean(Object) queryDataBean(Object)}
+			<li class='jm'>{@link oajrc.RestRequest#queryDataPairs(String...) queryDataPairs(String...)}
+			<li class='jm'>{@link oajrc.RestRequest#pathData(NameValuePair...) pathData(NameValuePair...)}
+			<li class='jm'>{@link oajrc.RestRequest#pathData(String,Object) pathData(String,Object)}
+			<li class='jm'>{@link oajrc.RestRequest#pathDataBean(Object) pathDataBean(Object)}
+			<li class='jm'>{@link oajrc.RestRequest#pathDataPairs(String...) pathDataPairs(String...)}
 		</ul>
 	</ul>
 	
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-client/03.jrc.RequestQueryParameters.html b/juneau-doc/docs/Topics/10.juneau-rest-client/03.jrc.RequestQueryParameters.html
deleted file mode 100644
index f8639688c..000000000
--- a/juneau-doc/docs/Topics/10.juneau-rest-client/03.jrc.RequestQueryParameters.html
+++ /dev/null
@@ -1,96 +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.
- ***************************************************************************************************************************/
- -->
-
-{title:'Request Query Parameters', created:'8.2.0', flags:'todo'}
-
-<div class='topic'>
-	<p>
-		Per-client or per-request query parameters can be specified using the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oajrc.RestClient.Builder}
-		<ul>
-			<li class='jm'>{@link oajrc.RestClient.Builder#query(String,Object) query(String,Object)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#query(String,Object,HttpPartSchema) query(String,Object,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#query(String,Supplier) query(String,Supplier&lt;?&gt;)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#query(String,Supplier,HttpPartSchema) query(String,Supplier&lt;?&gt;,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#queries(Object...) queries(Object...)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#queryPairs(Object...) queryPairs(Object...)}
-		</ul>
-		<li class='jc'>{@link oajrc.RestRequest}
-		<ul>
-			<li class='jm'>{@link oajrc.RestRequest#query(String,Object) query(String,Object)}
-			<li class='jm'>{@link oajrc.RestRequest#query(AddFlag,String,Object) query(AddFlag,String,Object)}
-			<li class='jm'>{@link oajrc.RestRequest#queries(Object...) queries(Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#queries(AddFlag,Object...) queries(AddFlag,Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#queryPairs(Object...) queryPairs(Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#queryCustom(Object) queryCustom(Object)}
-		</ul>
-	</ul>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a client that adds a ?foo=bar query parameter to every request.</jc>
-		|	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().query(<js>"foo"</js>,<js>"bar"</js>).build();
-		|
-		|	<jc>// Or do it on every request.</jc>
-		|	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).query(<js>"foo"</js>,<js>"bar"</js>).run().getContent().asString();
-	</p>
-	
-	<p>
-		{@link oajrc.RestClient.Builder#queries(Object...) queries(Object...)} allows you to pass in a variety
-		of query parameter objects, and {@link oajrc.RestClient.Builder#queryPairs(Object...) queryPairs(Object...)} allows
-		you to specify several query parameters in a compact fashion.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a client that adds a bunch of query parameters to every request.</jc>
-		|	RestClient <jv>client</jv> = RestClient
-		|		.<jsm>create</jsm>()
-		|		.queries(
-		|			AMap.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>,<js>"baz"</js>,<js>"qux"</js>),  <jc>// Arbitrary key/value pairs.</jc>
-		|			BasicNameValuePair.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>),  <jc>// A NameValuePair object.</jc>
-		|			BasicNameValuePair.<jsm>of</jsm>(<js>"foo"</js>,()->getBar()),  <jc>// A dynamic NameValuePair object.</jc>
-		|			NameValuePairSupplier.<jsm>ofPairs</jsm>(<js>"foo"</js>,<js>"bar"</js>),  <jc>// A dynamically changing list of NameValuePair objects.</jc>
-		|			AList.<jsm>of</jsm>(BasicNameValuePair.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>))  <jc>// A list of anything else on this list.</jc>
-		|		)
-		|		.queryPairs(<js>"foo"</js>,<js>"bar"</js>,<js>"baz"</js>,<js>"qux"</js>)  <jc>// Arbitrary key/value pairs.</jc>
-		|		.build();
-	</p>
-	
-	<p>
-		The {@link oaj.httppart.HttpPartSchema} API allows you to define OpenAPI schemas to POJO data structures on query parameters.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a client that adds a query parameter "foo=bar|baz" to every request.</jc>
-		|	RestClient <jv>client</jv> = RestClient
-		|		.<jsm>create</jsm>()
-		|		.query(<js>"foo"</js>, AList.<jsm>of</jsm>(<js>"bar"</js>,<js>"baz"</js>), <jsf>T_ARRAY_PIPES</jsf>)
-		|		.build();
-	</p>
-	
-	<p>
-		The methods with {@del oaj.AddFlag} parameters allow you to control whether new query parameters get appended, prepended, or
-		replace existing query parameters with the same name.
-	</p>
-	
-	<ul class='notes'>
-		<li class='note'>Methods that pass in POJOs convert values to strings using the part serializers.  Methods that pass in <c>NameValuePair</c>
-			objects use the values returned by that bean directly.
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-client/04.jrc.RequestFormData.html b/juneau-doc/docs/Topics/10.juneau-rest-client/04.jrc.RequestFormData.html
deleted file mode 100644
index 1d9bb6e1f..000000000
--- a/juneau-doc/docs/Topics/10.juneau-rest-client/04.jrc.RequestFormData.html
+++ /dev/null
@@ -1,97 +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.
- ***************************************************************************************************************************/
- -->
-
-{title:'Request Form Data', created:'8.2.0', flags:'todo'}
-
-<div class='topic'>
-	<p>
-		Per-client or per-request form-data parameters can be specified using the following methods:
-	</p>
-	<ul class='javatree'>
-		<li class='jc'>{@link oajrc.RestClient.Builder}
-		<ul>
-			<li class='jm'>{@link oajrc.RestClient.Builder#formData(String,Object) formData(String,Object)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#formData(String,Object,HttpPartSchema) formData(String,Object,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#formData(String,Supplier) formData(String,Supplier&lt;?&gt;)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#formData(String,Supplier,HttpPartSchema) formData(String,Supplier&lt;?&gt;,HttpPartSchema)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#formDatas(Object...) formDatas(Object...)}
-			<li class='jm'>{@link oajrc.RestClient.Builder#formDataPairs(Object...) formDataPairs(Object...)}
-		</ul>
-		<li class='jc'>{@link oajrc.RestRequest}
-		<ul>
-			<li class='jm'>{@link oajrc.RestRequest#formData(String,Object) formData(String,Object)}
-			<li class='jm'>{@link oajrc.RestRequest#formData(AddFlag,String,Object) formData(AddFlag,String,Object)}
-			<li class='jm'>{@link oajrc.RestRequest#formDatas(Object...) formDatas(Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#formDatas(AddFlag,Object...) formDatas(AddFlag,Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#formDataPairs(Object...) formDataPairs(Object...)}
-			<li class='jm'>{@link oajrc.RestRequest#formDataCustom(Object) formDataCustom(Object)}
-		</ul>
-	</ul>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a client that adds a foo=bar form-data parameter to every request.</jc>
-		|	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().formData(<js>"foo"</js>,<js>"bar"</js>).build();
-		|
-		|	<jc>// Or do it on every request.</jc>
-		|	String <jv>response</jv> = <jv>client</jv>.formPost(<jsf>URI</jsf>).formData(<js>"foo"</js>,<js>"bar"</js>).run().getContent().asString();
-	</p>
-	
-	<p>
-		{@link oajrc.RestClient.Builder#formDatas(Object...) formDatas(Object...)} allows you to pass in a variety
-		of form-data parameter objects, and {@link oajrc.RestClient.Builder#formDataPairs(Object...) formDataPairs(Object...)} allows
-		you to specify several form-data parameters in a compact fashion.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a client that adds a bunch of form-data parameters to every request.</jc>
-		|	RestClient <jv>client</jv> = RestClient
-		|		.<jsm>create</jsm>()
-		|		.formDatas(
-		|			AMap.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>,<js>"baz"</js>,<js>"qux"</js>),  <jc>// Arbitrary key/value pairs.</jc>
-		|			BasicNameValuePair.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>),  <jc>// A NameValuePair object.</jc>
-		|			BasicNameValuePair.<jsm>of</jsm>(<js>"foo"</js>,()->getBar()),  <jc>// A dynamic NameValuePair object.</jc>
-		|			NameValuePairSupplier.<jsm>ofPairs</jsm>(<js>"foo"</js>,<js>"bar"</js>),  <jc>// A dynamically changing list of NameValuePair objects.</jc>
-		|			AList.<jsm>of</jsm>(BasicNameValuePair.<jsm>of</jsm>(<js>"foo"</js>,<js>"bar"</js>))  <jc>// A list of anything else on this list.</jc>
-		|		)
-		|		.formDataPairs(<js>"foo"</js>,<js>"bar"</js>,<js>"baz"</js>,<js>"qux"</js>)  <jc>// Arbitrary key/value pairs.</jc>
-		|		.build();
-	</p>
-	
-	<p>
-		The {@link oaj.httppart.HttpPartSchema} API allows you to define OpenAPI schemas to POJO data structures on form-data parameters.
-	</p>
-	
-	<h5 class='figure'>Example:</h5>
-	<p class='bjava'>
-		|	<jc>// Create a client that adds a form-data parameter "foo=bar|baz" to every request.</jc>
-		|	RestClient <jv>client</jv> = RestClient
-		|		.<jsm>create</jsm>()
-		|		.formData(<js>"foo"</js>, AList.<jsm>of</jsm>(<js>"bar"</js>,<js>"baz"</js>), <jsf>T_ARRAY_PIPES</jsf>)
-		|		.build();
-	</p>
-	
-	<p>
-		The methods with {@del oaj.AddFlag} parameters allow you to control whether new form-data parameters get appended, prepended, or
-		replace existing form-data parameters with the same name.
-	</p>
-	
-	<ul class='notes'>
-		<li class='note'>Like header values, dynamic values and OpenAPI schemas are supported.
-		<li class='note'>Methods that pass in POJOs convert values to strings using the part serializers.  Methods that pass in <c>NameValuePair</c>
-			objects use the values returned by that bean directly.
-	</ul>
-</div>
\ No newline at end of file
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-client/05.jrc.RequestBody.html b/juneau-doc/docs/Topics/10.juneau-rest-client/05.jrc.RequestContent.html
similarity index 100%
rename from juneau-doc/docs/Topics/10.juneau-rest-client/05.jrc.RequestBody.html
rename to juneau-doc/docs/Topics/10.juneau-rest-client/05.jrc.RequestContent.html
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 2bc4d0029..91aae69c9 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -439,17 +439,17 @@
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.RequestHeaders'>Request Headers</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.RequestQueryParameters'>Request Query Parameters</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.RequestFormData'>Request Form Data</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
-		<li><p><a class='doclink' href='#juneau-rest-client.jrc.RequestContent'>Request Body</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
+		<li><p><a class='doclink' href='#juneau-rest-client.jrc.RequestBody'>Request Content</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.ResponseStatus'>Response Status</a><span class='update'>created: 8.1.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.ResponseHeaders'>Response Headers</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
-		<li><p><a class='doclink' href='#juneau-rest-client.jrc.ResponseBody'>Response Body</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
+		<li><p><a class='doclink' href='#juneau-rest-client.jrc.ResponseContent'>Response Content</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.CustomCallHandlers'>Custom Call Handlers</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.Interceptors'>Interceptors</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies'>REST Proxies</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></p>
 		<ol>
 			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.Remote'>@Remote</a><span class='update'>updated: 8.1.2,8.2.0, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.RemoteMethod'>@RemoteOp</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.Body'>@Content</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.Content'>@Content</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.FormData'>@FormData</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.Query'>@Query</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.jrc.Proxies.jrc.Header'>@Header</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></p>
@@ -1266,8 +1266,8 @@
 		.run()
 		.assertStatus().code().is(200)
 		.assertHeader(<js>"Content-Type"</js>).matches(<js>"application/json*"</js>)
-		.getBody().assertValue().asString().contains(<js>"OK"</js>)
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().assertValue().asString().contains(<js>"OK"</js>)
+		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 	<ul class='seealso'>
 		<li class='link'>{@doc jm.FluentAssertions Fluent Assertions} for more information.
@@ -1923,7 +1923,7 @@
 		.run()
 		.assertStatus().code().is(200)
 		.assertHeader(<js>"Content-Type"</js>).matchesSimple(<js>"application/json*"</js>)
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 </div>
 
@@ -1968,7 +1968,7 @@
 				.run()
 				.assertStatus().is(200)
 				.assertContent().is(<js>"{foo:1}"</js>)
-				.getBody().as(MyBean.<jk>class</jk>);
+				.getContent().as(MyBean.<jk>class</jk>);
 
 			<jsm>assertEquals</jsm>(1, <jv>myBean</jv>.<jf>foo</jf>);
 		}
@@ -5616,8 +5616,8 @@
 		.run()
 		.assertStatus().code().is(200)
 		.assertHeader(<js>"Content-Type"</js>).isMatches(<js>"application/json*"</js>)
-		.getBody().assertValue().asString().isContains(<js>"OK"</js>)
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().assertValue().asString().isContains(<js>"OK"</js>)
+		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 	<ul class='notes'>
 		<li class='note'>The REST API is described later in the documentation.</i>
@@ -6551,8 +6551,8 @@
 		the REST API itself.
 	</p>
 	<ul class='javatreec'>
-		<li class='ja'>{@link org.apache.juneau.http.annotation.Content}
 		<li class='ja'>{@link org.apache.juneau.http.annotation.Contact}
+		<li class='ja'>{@link org.apache.juneau.http.annotation.Content}
 		<li class='ja'>{@link org.apache.juneau.http.annotation.ExternalDocs}
 		<li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
 		<li class='ja'>{@link org.apache.juneau.http.annotation.HasFormData}
@@ -16191,7 +16191,7 @@
 				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#defaultRequestHeaders() defaultRequestHeaders}
 				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#defaultResponseHeaders() defaultResponseHeaders}
 				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#description() description}
-				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#disableBodyParam() disableBodyParam}
+				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#disableContentParam() disableContentParam}
 				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#encoders() encoders}
 				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#fileFinder() fileFinder}
 				<li class='jma'>{@link org.apache.juneau.rest.annotation.Rest#guards() guards}
@@ -17759,7 +17759,7 @@
 	<p class='bjava'>
 	<ja>@RestPost</ja>
 	<jk>public void</jk> addPet(RestRequest <jv>req</jv>) {
-		Pet <jv>pet</jv> = <jv>req</jv>.getBody().as(Pet.<jk>class</jk>);
+		Pet <jv>pet</jv> = <jv>req</jv>.getContent().as(Pet.<jk>class</jk>);
 		...
 	}
 	</p>
@@ -17925,8 +17925,8 @@
 		The following shows the same for a request body:
 	</p>
 	<p class='bjava'>
-	<ja>@RestPost</ja>(<js>"/testBody"</js>)	
-	<jk>public void</jk> testBody(
+	<ja>@RestPost</ja>(<js>"/testContent"</js>)	
+	<jk>public void</jk> testContent(
 		<ja>@Content</ja>
 		<ja>@Schema</ja>(
 			items=<ja>@Items</ja>(
@@ -17952,27 +17952,27 @@
 		For example, instead of <c>Longs</c> in the example above, we could also define a 2-dimensional array of POJOs convertible from <c>Longs</c>:
 	</p>
 	<p class='bjava'>
-	<jc>// Body is a 2-dimensional array of POJOs convertible from Longs:</jc>
+	<jc>// Content is a 2-dimensional array of POJOs convertible from Longs:</jc>
 	<ja>@RestPost</ja>(<js>"/example1"</js>)	
-	<jk>public void</jk> testBody(<ja>@Content</ja>(...) MyPojo1[][] <jv>body</jv>) {...}
+	<jk>public void</jk> testContent(<ja>@Content</ja>(...) MyPojo1[][] <jv>body</jv>) {...}
 	
 	<jk>public class</jk> MyPojo1 {
 		<jk>public</jk> MyPojo1(Long <jv>input</jv>) {...}
 	}
 	</p>
 	<p class='bjava'>
-	<jc>// Body is a POJO that takes in a Long array:</jc>
+	<jc>// Content is a POJO that takes in a Long array:</jc>
 	<ja>@RestPost</ja>(<js>"/example2"</js>)	
-	<jk>public void</jk> testBody(<ja>@Content</ja>(...) MyPojo2[] <jv>body</jv>) {...}
+	<jk>public void</jk> testContent(<ja>@Content</ja>(...) MyPojo2[] <jv>body</jv>) {...}
 	
 	<jk>public class</jk> MyPojo2 {
 		<jk>public</jk> MyPojo2(Long[] <jv>input</jv>) {...}
 	}
 	</p>
 	<p class='bjava'>
-	<jc>// Body is a POJO that takes in the whole 2-dimensional array:</jc>
+	<jc>// Content is a POJO that takes in the whole 2-dimensional array:</jc>
 	<ja>@RestPost</ja>(<js>"/example3"</js>)	
-	<jk>public void</jk> testBody(<ja>@Content</ja>(...) MyPojo3 <jv>body</jv>) {...}
+	<jk>public void</jk>testContent<ja>@Content</ja>(...) MyPojo3 <jv>body</jv>) {...}
 	
 	<jk>public class</jk> MyPojo3 {
 		<jk>public</jk> MyPojo3(Long[][] <jv>input</jv>) {...}
@@ -18225,7 +18225,7 @@
 		
 		<jc>// Response bean converted to output based on Accept header.</jc>
 		<ja>@Content</ja>
-		<jk>public</jk> WelcomeMessageBean getBody() {
+		<jk>public</jk> WelcomeMessageBean getContent() {
 			<jk>return new</jk> WelcomeMessageBean();
 		}
 	}
@@ -18560,7 +18560,7 @@
 		underlying JEE servlet to parse the HTTP body as a form post.
 		<br>Your input bean will end up being null since there won't be any content left after the servlet 
 		has parsed the body of the request.
-		<br>This applies to WHENEVER you use <l>@Content</l> or {@link org.apache.juneau.rest.RestRequest#getBody()}
+		<br>This applies to WHENEVER you use <l>@Content</l> or {@link org.apache.juneau.rest.RestRequest#getContent()}
 	</div>
 	<div class='warn'>
 		If you want to be able to consume url-encoded form post bodies as POJOs in Spring Boot, you'll need to 
@@ -21168,13 +21168,13 @@
 	---Response Headers---
 		Foo: bar
 		Content-Type: text/plain
-	---Request Body UTF-8---
+	---Request Content UTF-8---
 	Foo
-	---Request Body Hex---
+	---Request Content Hex---
 	46 6F 6F
-	---Response Body UTF-8---
+	---Response Content UTF-8---
 	Foo
-	---Response Body Hex---
+	---Response Content Hex---
 	46 6F 6F
 	=== END ===================================================================
 	</p>
@@ -21379,7 +21379,7 @@
 			<td class='code'>&amp;body=X</td>
 			<td>
 				Pass in the HTTP body content on PUT and POST methods as a UON-encoded GET parameter.
-				<br>Can be disabled via {@link org.apache.juneau.rest.annotation.Rest#disableBodyParam() @Rest(disableBodyParam)} setting.
+				<br>Can be disabled via {@link org.apache.juneau.rest.annotation.Rest#disableContentParam() @Rest(disableContentParam)} setting.
 			</td>
 		</tr>
 		<tr>
@@ -21530,7 +21530,7 @@
 			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#defaultRequestHeaders(Header...) defaultRequestHeaders}
 			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#defaultResponseHeaders(Header...) defaultResponseHeaders}
 			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#defaultSetting(String, Object) defaultSetting}
-			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#disableBodyParam(boolean) disableBodyParam}
+			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#disableContentParam(boolean) disableContentParam}
 			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#logger(Logger) logger}
 			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#maxInput(String) maxInput}
 			<li class='jm'>{@link org.apache.juneau.rest.RestContext.Builder#path(String) path}
@@ -22793,7 +22793,7 @@
 		.run()
 		.assertStatus().code().is(200)
 		.assertHeader(<js>"Content-Type"</js>).matchesSimple(<js>"application/json*"</js>)
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 	
 	<p>
@@ -22810,7 +22810,7 @@
 	<jv>res</jv> = <jv>codeAssertion</jv>.is(200);
 	FluentStringAssertion&lt;RestResponse&gt; <jv>headerAssertion</jv> = <jv>res</jv>.assertHeader(<js>"Content-Type"</js>);
 	<jv>res</jv> = <jv>headerAssertion</jv>.matchesSimple(<js>"application/json*"</js>);
-	RestResponseBody <jv>body</jv> = <jv>res</jv>.getBody();
+	ResponseContent <jv>body</jv> = <jv>res</jv>.getContent();
 	MyBean <jv>bean</jv> = <jv>body</jv>.as(MyBean.<jk>class</jk>);
 	</p>
 	
@@ -22865,7 +22865,7 @@
 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().json().rootUri(<js>"http://localhost:10000"</js>).build();
 
 	<jc>// Use relative paths.</jc>
-	String <jv>body</jv> = <jv>client</jv>.get(<js>"/subpath"</js>).run().getBody().asString();
+	String <jv>body</jv> = <jv>client</jv>.get(<js>"/subpath"</js>).run().getContent().asString();
 	</p>
 	
 	<p>
@@ -22915,7 +22915,7 @@
 	
 	<p class='bjava'>
 	<jc>// Consuming the response, so use run().</jc>
-	String <jv>body</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).run().getBody().asString();
+	String <jv>body</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).run().getContent().asString();
 
 	<jc>// Only interested in response status code, so use complete().</jc>
 	<jk>int</jk> <jv>status</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).complete().getStatusCode();
@@ -23069,7 +23069,7 @@
 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().header(<js>"Foo"</js>,<js>"bar"</js>).build();
 
 	<jc>// Or do it on every request.</jc>
-	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).header(<js>"Foo"</js>,<js>"bar"</js>).run().getBody().asString();
+	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).header(<js>"Foo"</js>,<js>"bar"</js>).run().getContent().asString();
 	</p>
 	
 	<p>
@@ -23106,10 +23106,10 @@
 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().authorization(<js>"Foo"</js>).build();
 
 	<jc>// Or do it per-request.</jc>
-	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).authorization(<js>"Foo"</js>).run().getBody().asString();
+	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).authorization(<js>"Foo"</js>).run().getContent().asString();
 
 	<jc>// Or use an HttpHeader.</jc>
-	<jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).headers(Authorization.<jsm>of</jsm>(<js>"Foo"</js>)).run().getBody().asString();
+	<jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).headers(Authorization.<jsm>of</jsm>(<js>"Foo"</js>)).run().getContent().asString();
 	</p>
 	
 	<p>
@@ -23186,7 +23186,7 @@
 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().query(<js>"foo"</js>,<js>"bar"</js>).build();
 
 	<jc>// Or do it on every request.</jc>
-	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).query(<js>"foo"</js>,<js>"bar"</js>).run().getBody().asString();
+	String <jv>response</jv> = <jv>client</jv>.get(<jsf>URI</jsf>).query(<js>"foo"</js>,<js>"bar"</js>).run().getContent().asString();
 	</p>
 	
 	<p>
@@ -23271,7 +23271,7 @@
 	RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>().formData(<js>"foo"</js>,<js>"bar"</js>).build();
 
 	<jc>// Or do it on every request.</jc>
-	String <jv>response</jv> = <jv>client</jv>.formPost(<jsf>URI</jsf>).formData(<js>"foo"</js>,<js>"bar"</js>).run().getBody().asString();
+	String <jv>response</jv> = <jv>client</jv>.formPost(<jsf>URI</jsf>).formData(<js>"foo"</js>,<js>"bar"</js>).run().getContent().asString();
 	</p>
 	
 	<p>
@@ -23324,8 +23324,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.jrc.RequestContent' id='juneau-rest-client.jrc.RequestContent'>10.5 - Request Body</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 10.5 - juneau-rest-client.jrc.RequestContent -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.jrc.RequestBody' id='juneau-rest-client.jrc.RequestBody'>10.5 - Request Content</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 10.5 - juneau-rest-client.jrc.RequestBody -->
 <div class='topic'>
 	<p>
 		The request body can either be passed in with the client creator method (e.g. {@link org.apache.juneau.rest.client.RestClient#post(Object,Object) post(uri,body)}),
@@ -23390,7 +23390,7 @@
 			POJOs will be converted to strings using {@link org.apache.juneau.ClassMeta#toString(Object)} which typically just calls {@link java.lang.Object#toString()}.
 	</ul>
 </div>
-</div><!-- END: 10.5 - juneau-rest-client.jrc.RequestContent -->
+</div><!-- END: 10.5 - juneau-rest-client.jrc.RequestBody -->
 
 <!-- ==================================================================================================== -->
 
@@ -23447,13 +23447,13 @@
 	String <jv>body1</jv> = <jv>client</jv>.get(<jsf>URI</jsf>)
 		.run()
 		.assertStatus().code().isBetween(200,399)
-		.getBody().asString();
+		.getContent().asString();
 
 	<jc>// Status assertion using a predicate.</jc>
 	String <jv>body2</jv> = <jv>client</jv>.get(<jsf>URI</jsf>)
 		.run()
 		.assertStatus().code().passes(<jv>x</jv> -> <jv>x</jv>&lt;400)
-		.getBody().asString();
+		.getContent().asString();
 	</p>
 </div>
 </div><!-- END: 10.6 - juneau-rest-client.jrc.ResponseStatus -->
@@ -23560,15 +23560,15 @@
 	String <jv>body</jv> = <jv>client</jv>.get(<jsf>URI</jsf>)
 		.run()
 		.getHeader(<js>"Content-Type"</js>).assertString().matchesSimple(<js>"application/json*"</js>)
-		.getBody().asString();
+		.getContent().asString();
 	</p>
 </div>
 </div><!-- END: 10.7 - juneau-rest-client.jrc.ResponseHeaders -->
 
 <!-- ==================================================================================================== -->
 
-<h3 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.jrc.ResponseBody' id='juneau-rest-client.jrc.ResponseBody'>10.8 - Response Body</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3>
-<div class='topic'><!-- START: 10.8 - juneau-rest-client.jrc.ResponseBody -->
+<h3 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.jrc.ResponseContent' id='juneau-rest-client.jrc.ResponseContent'>10.8 - Response Content</a><span class='update'>created: 8.2.0, <b><red>todo</red></b></span></h3>
+<div class='topic'><!-- START: 10.8 - juneau-rest-client.jrc.ResponseContent -->
 <div class='topic'>
 	<p>
 		The response body is accessed through the following method:
@@ -23577,34 +23577,34 @@
 	<ul class='javatree'>
 		<li class='jc'>{@link org.apache.juneau.rest.client.RestResponse}
 		<ul>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponse#getBody() getBody()} <jk>returns</jk> {@link org.apache.juneau.rest.client.RestResponseBody}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponse#getContent() getContent()} <jk>returns</jk> {@link org.apache.juneau.rest.client.ResponseContent}</c>
 		</ul>
 	</ul>
 	
 	<p>
-		The {@link org.apache.juneau.rest.client.RestResponseBody} class extends from the HttpClient {@link org.apache.http.HttpEntity} class and provides several convenience
+		The {@link org.apache.juneau.rest.client.ResponseContent} class extends from the HttpClient {@link org.apache.http.HttpEntity} class and provides several convenience
 		methods:
 	</p>
 	
 	<ul class='javatree'>
-		<li class='jc'>{@link org.apache.juneau.rest.client.RestResponseBody}
+		<li class='jc'>{@link org.apache.juneau.rest.client.ResponseContent}
 		<ul>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asInputStream() asInputStream()} <jk>returns</jk> InputStream</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asReader() asReader()} <jk>returns</jk> Reader</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asReader(Charset) asReader(Charset)} <jk>returns</jk> Reader</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#pipeTo(OutputStream) pipeTo(OutputStream)} <jk>returns</jk> {@link org.apache.juneau.rest.client.RestResponse}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#pipeTo(Writer) pipeTo(Writer)} <jk>returns</jk> {@link org.apache.juneau.rest.client.RestResponse}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#as(Type,Type...) as(Type,Type...)} <jk>returns</jk> T</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#as(Class) as(Class&lt;T&gt;)} <jk>returns</jk> T</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asFuture(Class) asFuture(Class&lt;T&gt;)} <jk>returns</jk> Future&lt;T&gt;</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asFuture(Type,Type...) asFuture(Type,Type...)} <jk>returns</jk> Future&lt;T&gt;</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asString() asString()} <jk>returns</jk> String</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asStringFuture() asStringFuture()} <jk>returns</jk> Future&lt;String&gt;</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asAbbreviatedString(int) asAbbreviatedString(int)} <jk>returns</jk> String</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asPojoRest(Class) asPojoRest(Class&lt;?&gt;)} <jk>returns</jk> {@link org.apache.juneau.utils.PojoRest}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asPojoRest() asPojoRest()} <jk>returns</jk> {@link org.apache.juneau.utils.PojoRest}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asMatcher(Pattern) asMatcher(Pattern)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#asMatcher(String) asMatcher(String)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asInputStream() asInputStream()} <jk>returns</jk> InputStream</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asReader() asReader()} <jk>returns</jk> Reader</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asReader(Charset) asReader(Charset)} <jk>returns</jk> Reader</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#pipeTo(OutputStream) pipeTo(OutputStream)} <jk>returns</jk> {@link org.apache.juneau.rest.client.RestResponse}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#pipeTo(Writer) pipeTo(Writer)} <jk>returns</jk> {@link org.apache.juneau.rest.client.RestResponse}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#as(Type,Type...) as(Type,Type...)} <jk>returns</jk> T</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#as(Class) as(Class&lt;T&gt;)} <jk>returns</jk> T</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asFuture(Class) asFuture(Class&lt;T&gt;)} <jk>returns</jk> Future&lt;T&gt;</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asFuture(Type,Type...) asFuture(Type,Type...)} <jk>returns</jk> Future&lt;T&gt;</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asString() asString()} <jk>returns</jk> String</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asStringFuture() asStringFuture()} <jk>returns</jk> Future&lt;String&gt;</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asAbbreviatedString(int) asAbbreviatedString(int)} <jk>returns</jk> String</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asPojoRest(Class) asPojoRest(Class&lt;?&gt;)} <jk>returns</jk> {@link org.apache.juneau.utils.PojoRest}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asPojoRest() asPojoRest()} <jk>returns</jk> {@link org.apache.juneau.utils.PojoRest}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asMatcher(Pattern) asMatcher(Pattern)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#asMatcher(String) asMatcher(String)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
 		</ul>
 	</ul>
 	
@@ -23614,44 +23614,44 @@
 	MyBean <jv>bean</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().as(MyBean.<jk>class</jk>);
 
 	<jc>// Parse into a linked-list of strings.</jc>
 	List&lt;String&gt; <jv>list1</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().as(LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+		.getContent().as(LinkedList.<jk>class</jk>, String.<jk>class</jk>);
 
 	<jc>// Parse into a linked-list of beans.</jc>
 	List&lt;MyBean&gt; <jv>list2</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().as(LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
+		.getContent().as(LinkedList.<jk>class</jk>, MyBean.<jk>class</jk>);
 
 	<jc>// Parse into a linked-list of linked-lists of strings.</jc>
 	List&lt;List&lt;String&gt;&gt; <jv>list3</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().as(LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
+		.getContent().as(LinkedList.<jk>class</jk>, LinkedList.<jk>class</jk>, String.<jk>class</jk>);
 
 	<jc>// Parse into a map of string keys/values.</jc>
 	Map&lt;String,String&gt; <jv>map1</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().as(TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
+		.getContent().as(TreeMap.<jk>class</jk>, String.<jk>class</jk>, String.<jk>class</jk>);
 
 	<jc>// Parse into a map containing string keys and values of lists containing beans.</jc>
 	Map&lt;String,List&lt;MyBean&gt;&gt; <jv>map2</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().as(TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
+		.getContent().as(TreeMap.<jk>class</jk>, String.<jk>class</jk>, List.<jk>class</jk>, MyBean.<jk>class</jk>);
 	</p>
 	
 	<p>
 		The response body can only be consumed once unless it has been cached into memory.  In many cases, the body is
-		automatically cached when using the assertions methods or methods such as {@link org.apache.juneau.rest.client.RestResponseBody#asString()}.
+		automatically cached when using the assertions methods or methods such as {@link org.apache.juneau.rest.client.ResponseContent#asString()}.
 		However, methods that involve reading directly from the input stream cannot be called twice.
-		In these cases, the {@link org.apache.juneau.rest.client.RestResponse#cacheBody()} and {@link org.apache.juneau.rest.client.RestResponseBody#cache()} methods are provided
+		In these cases, the {@link org.apache.juneau.rest.client.RestResponse#cacheContent()} and {@link org.apache.juneau.rest.client.ResponseContent#cache()} methods are provided
 		to cache the response body in memory so that you can perform several operations against it.
 	</p>
 	
@@ -23660,9 +23660,9 @@
 	InputStream <jv>inputStream</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.cacheBody()
-		.getBody().pipeTo(<jv>someOtherStream</jv>)
-		.getBody().asInputStream();
+		.cacheContent()
+		.getContent().pipeTo(<jv>someOtherStream</jv>)
+		.getContent().asInputStream();
 	</p>
 	
 	<p>
@@ -23670,11 +23670,11 @@
 	</p>
 	
 	<ul class='javatree'>
-		<li class='jc'>{@link org.apache.juneau.rest.client.RestResponseBody}
+		<li class='jc'>{@link org.apache.juneau.rest.client.ResponseContent}
 		<ul>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#assertString() assertString()} <jk>returns</jk> {@link org.apache.juneau.assertions.FluentStringAssertion}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#assertObject(Class) assertObject(Class&lt;?&gt;)} <jk>returns</jk> {@link org.apache.juneau.assertions.FluentObjectAssertion}</c>
-			<li class='jm'><c>{@link org.apache.juneau.rest.client.RestResponseBody#assertBytes() assertBytes()} <jk>returns</jk> {@link org.apache.juneau.assertions.FluentByteArrayAssertion}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#assertString() assertString()} <jk>returns</jk> {@link org.apache.juneau.assertions.FluentStringAssertion}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#assertObject(Class) assertObject(Class&lt;?&gt;)} <jk>returns</jk> {@link org.apache.juneau.assertions.FluentObjectAssertion}</c>
+			<li class='jm'><c>{@link org.apache.juneau.rest.client.ResponseContent#assertBytes() assertBytes()} <jk>returns</jk> {@link org.apache.juneau.assertions.FluentByteArrayAssertion}</c>
 		</ul>
 	</ul>
 	
@@ -23684,8 +23684,8 @@
 	String <jv>body</jv> = <jv>client</jv>
 		.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().assertString().contains(<js>"Success"</js>)
-		.getBody().asString();
+		.getContent().assertString().contains(<js>"Success"</js>)
+		.getContent().asString();
 	</p>
 	
 	<p>
@@ -23698,11 +23698,11 @@
 	<jc>// Parse bean into POJO and then validate that it was parsed correctly.</jc>
 	MyBean <jv>bean</jv> = <jv>client</jv>.get(<jsf>URI</jsf>)
 		.run()
-		.getBody().assertObject(MyBean.<jk>class</jk>).asJson().is(<js>"{foo:'bar'}"</js>)
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().assertObject(MyBean.<jk>class</jk>).asJson().is(<js>"{foo:'bar'}"</js>)
+		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 </div>
-</div><!-- END: 10.8 - juneau-rest-client.jrc.ResponseBody -->
+</div><!-- END: 10.8 - juneau-rest-client.jrc.ResponseContent -->
 
 <!-- ==================================================================================================== -->
 
@@ -24250,8 +24250,8 @@
 
 <!-- ==================================================================================================== -->
 
-<h5 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.jrc.Proxies.jrc.Body' id='juneau-rest-client.jrc.Proxies.jrc.Body'>10.11.3 - @Content</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 10.11.3 - juneau-rest-client.jrc.Proxies.jrc.Body -->
+<h5 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.jrc.Proxies.jrc.Content' id='juneau-rest-client.jrc.Proxies.jrc.Content'>10.11.3 - @Content</a><span class='update'>updated: 8.2.0, <b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 10.11.3 - juneau-rest-client.jrc.Proxies.jrc.Content -->
 <div class='topic'>
 	<p>
 		The {@link org.apache.juneau.http.annotation.Content @Content} annotation can be applied to arguments of <ja>@RemoteOp</ja>-annotated methods
@@ -24357,7 +24357,7 @@
 		string using the rules defined in {@doc jm.PojoCategories}.
 	</p>
 </div>
-</div><!-- END: 10.11.3 - juneau-rest-client.jrc.Proxies.jrc.Body -->
+</div><!-- END: 10.11.3 - juneau-rest-client.jrc.Proxies.jrc.Content -->
 
 <!-- ==================================================================================================== -->
 
@@ -24733,7 +24733,7 @@
 		}
 		
 		<ja>@Content</ja>
-		<jk>public</jk> CreatePet getBody() {
+		<jk>public</jk> CreatePet getContent() {
 			<jk>return</jk> <jk>this</jk>.<jf>pet</jf>;
 		}
 	
@@ -24784,7 +24784,7 @@
 	<jk>public interface</jk> CreatePetRequest {
 	
 		<ja>@Content</ja>
-		CreatePet getBody();
+		CreatePet getContent();
 	
 		<ja>@Query</ja>
 	Map&lt;String,Object&gt; getQueryParams();
@@ -24799,7 +24799,7 @@
 		<jk>public</jk> CreatePetRequestImpl(String <jv>name</jv>, <jk>float</jk> <jv>price</jv>) {...}
 
 		<ja>@Override</ja>
-		<jk>public</jk> CreatePet getBody() {
+		<jk>public</jk> CreatePet getContent() {
 			<jk>return</jk> <jk>this</jk>.<jf>pet</jf>;
 		}
 	
@@ -24848,7 +24848,7 @@
 	<jk>public interface</jk> CreatePetResponse {
 	
 		<ja>@Content</ja>
-		Pet getBody();
+		Pet getContent();
 	
 		<ja>@Header</ja>(<js>"E-Tag"</js>)
 		UUID getUUID();
@@ -24861,7 +24861,7 @@
 	PetStore <jv>store</jv> = <jv>client</jv>.getRemote(PetStore.<jk>class</jk>, <js>"http://localhost:10000"</js>);
 	
 	CreatePetResponse <jv>response</jv> = <jv>store</jv>.postPet(...);
-	Pet <jv>pet</jv> = <jv>response</jv>.getBody();
+	Pet <jv>pet</jv> = <jv>response</jv>.getContent();
 	UUID <jv>uuid</jv> = <jv>response</jv>.getUUID();
 	<jk>int</jk> <jv>status</jv> = <jv>response</jv>.getStatus();
 	</p>
@@ -25025,7 +25025,7 @@
 		.build()
 		.post(<js>"http://localhost/bean"</js>, <jv>bean</jv>)
 		.run()
-		.getBody().as(MyBean.<jk>class</jk>);
+		.getContent().as(MyBean.<jk>class</jk>);
 	</p>
 	
 	<p>
@@ -25505,7 +25505,7 @@
 				.run()
 				.assertStatus().is(200)
 				.assertContent().is(<js>"{foo:1}"</js>)
-				.getBody().as(MyBean.<jk>class</jk>);
+				.getContent().as(MyBean.<jk>class</jk>);
 
 			<jsm>assertEquals</jsm>(1, <jv>myBean</jv>.<jf>foo</jf>);
 		}
@@ -25534,7 +25534,7 @@
 		<jv>res</jv>.assertStatus().is(200);
 		<jv>res</jv>.assertContent().is(<js>"'foo'"</js>);
 
-		<jv>myBean</jv> = <jv>res</jv>.getBody().as(MyBean.<jk>class</jk>);
+		<jv>myBean</jv> = <jv>res</jv>.getContent().as(MyBean.<jk>class</jk>);
 	}
 	</p>
 	<p>
@@ -25582,7 +25582,7 @@
 				.run()
 				.assertStatus().is(200)
 				.assertContent().is(<js>"{foo:1}"</js>)
-				.getBody().as(MyBean.<jk>class</jk>);
+				.getContent().as(MyBean.<jk>class</jk>);
 
 			<jsm>assertEquals</jsm>(1, <jv>myBean</jv>.<jf>foo</jf>);
 		}
@@ -31874,7 +31874,7 @@
 		<li>OPTIONS pages replaced with Swagger documents.
 			Lots of changes related to supporting Swagger.
 			<ul>
-				<li>Annotation name changes to conform to Swagger specs:  <ja>@Attr</ja>-><ja>@Path</ja>, <ja>@QParam</ja>-><ja>@Query</ja>, <ja>@Param</ja>-><ja>@FormData</ja>, <ja>@Content</ja>-><ja>@Content</ja>
+				<li>Annotation name changes to conform to Swagger specs:  <ja>@Attr</ja>-><ja>@Path</ja>, <ja>@QParam</ja>-><ja>@Query</ja>, <ja>@Param</ja>-><ja>@FormData</ja>, <ja>@Content</ja>-><ja>@Body</ja>
 				<li>Eliminated <c>ResourceOptions</c> and related code.
 				<li>New annotations and related methods:
 					<ul>
@@ -32667,7 +32667,7 @@
 			</ul>	
 			The following classes have been introduced:
 			<ul>
-				<li>{@del org.apache.juneau.rest.RequestContent}
+				<li>{@del org.apache.juneau.rest.RequestBody}
 				<li>{@del org.apache.juneau.rest.RequestHeaders}
 				<li>{@del org.apache.juneau.rest.RequestQuery}
 				<li>{@del org.apache.juneau.rest.RequestFormData}
@@ -32726,7 +32726,7 @@
 				<li>{@del org.apache.juneau.rest.RequestQuery} - API for accessing request query parameters.
 				<li>{@del org.apache.juneau.rest.RequestFormData} - API for accessing request form data.
 				<li>{@del org.apache.juneau.rest.RequestPath} - API for accessing path variables.
-				<li>{@del org.apache.juneau.rest.RequestContent} - API for accessing request body.
+				<li>{@del org.apache.juneau.rest.RequestBody} - API for accessing request body.
 				<li>{@link org.apache.juneau.http.HttpMethod} - The method name matched (when using <c><ja>@RestMethod</ja>(name=<js>"*"</js>)</c>)
 				<li>{@link java.util.logging.Logger} - The logger to use for logging.
 				<li>{@del org.apache.juneau.internal.JuneauLogger} - Logger with additional features.
@@ -34269,7 +34269,7 @@
 			<br>This fixes a long-standing problem where it was easy to mix up using client-side annotations in server-side code, and vis-versa.
 			<br>Additionally, much work has been done on these annotations to add support for Swagger-style validations and documentation.
 			<ul class='doctree'>
-				<li class='ja'>{@link org.apache.juneau.http.annotation.Content}
+				<li class='ja'>{@link org.apache.juneau.http.annotation.Body}
 				<li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
 				<li class='ja'>{@link org.apache.juneau.http.annotation.Header}
 				<li class='ja'>{@link org.apache.juneau.http.annotation.Path}
@@ -34509,7 +34509,7 @@
 		<li>
 			Swagger fields added to the following annotations:
 			<ul class='doctree'>
-				<li class='ja'>{@link org.apache.juneau.http.annotation.Content}
+				<li class='ja'>{@link org.apache.juneau.http.annotation.Body}
 				<li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
 				<li class='ja'>{@link org.apache.juneau.http.annotation.Header}
 				<li class='ja'>{@link org.apache.juneau.http.annotation.Path}
@@ -35463,7 +35463,7 @@
 			which would typically result in getting a <c>List&lt;ObjectMap&gt;<c> and subsequent <c>ClassCastExceptions</c>.   
 			<p class='bcode'>
 		<ja>@RestMethod</ja>
-		<jk>public void</jk> doFoo(<ja>@Content</ja> List&lt;MyBean&gt; beans) {...}
+		<jk>public void</jk> doFoo(<ja>@Body</ja> List&lt;MyBean&gt; beans) {...}
 			</p>
 			The fix involves resolving the original bean class for resolving parameterized type while leaving
 			method invocation on the proxy method so as not to bypass Spring features.
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt
index 5bf678509..5b42e9784 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -212,7 +212,7 @@ jrc.Authentication = #juneau-rest-client.jrc.Authentication, Overview > juneau-r
 jrc.AuthenticationBASIC = #juneau-rest-client.jrc.Authentication.jrc.AuthenticationBASIC, Overview > juneau-rest-client > Authentication > BASIC Authentication
 jrc.AuthenticationForm = #juneau-rest-client.jrc.Authentication.jrc.AuthenticationForm, Overview > juneau-rest-client > Authentication > FORM-based Authentication
 jrc.AuthenticationOIDC = #juneau-rest-client.jrc.Authentication.jrc.AuthenticationOIDC, Overview > juneau-rest-client > Authentication > OIDC Authentication
-jrc.Body = #juneau-rest-client.jrc.Proxies.jrc.Body, Overview > juneau-rest-client > REST Proxies > @Content
+jrc.Content = #juneau-rest-client.jrc.Proxies.jrc.Content, Overview > juneau-rest-client > REST Proxies > @Content
 jrc.CustomCallHandlers = #juneau-rest-client.jrc.CustomCallHandlers, Overview > juneau-rest-client > Custom Call Handlers
 jrc.CustomizingHttpClient = #juneau-rest-client.jrc.CustomizingHttpClient, Overview > juneau-rest-client > Customizing HttpClient
 jrc.DualPurposeInterfaces = #juneau-rest-client.jrc.Proxies.jrc.DualPurposeInterfaces, Overview > juneau-rest-client > REST Proxies > Dual-purpose (end-to-end) interfaces
@@ -228,12 +228,12 @@ jrc.Query = #juneau-rest-client.jrc.Proxies.jrc.Query, Overview > juneau-rest-cl
 jrc.Remote = #juneau-rest-client.jrc.Proxies.jrc.Remote, Overview > juneau-rest-client > REST Proxies > @Remote
 jrc.RemoteMethod = #juneau-rest-client.jrc.Proxies.jrc.RemoteMethod, Overview > juneau-rest-client > REST Proxies > @RemoteOp
 jrc.Request = #juneau-rest-client.jrc.Proxies.jrc.Request, Overview > juneau-rest-client > REST Proxies > @Request
-jrc.RequestContent = #juneau-rest-client.jrc.RequestContent, Overview > juneau-rest-client > Request Body
+jrc.RequestBody = #juneau-rest-client.jrc.RequestBody, Overview > juneau-rest-client > Request Content
 jrc.RequestFormData = #juneau-rest-client.jrc.RequestFormData, Overview > juneau-rest-client > Request Form Data
 jrc.RequestHeaders = #juneau-rest-client.jrc.RequestHeaders, Overview > juneau-rest-client > Request Headers
 jrc.RequestQueryParameters = #juneau-rest-client.jrc.RequestQueryParameters, Overview > juneau-rest-client > Request Query Parameters
 jrc.Response = #juneau-rest-client.jrc.Proxies.jrc.Response, Overview > juneau-rest-client > REST Proxies > @Response
-jrc.ResponseBody = #juneau-rest-client.jrc.ResponseBody, Overview > juneau-rest-client > Response Body
+jrc.ResponseContent = #juneau-rest-client.jrc.ResponseContent, Overview > juneau-rest-client > Response Content
 jrc.ResponseHeaders = #juneau-rest-client.jrc.ResponseHeaders, Overview > juneau-rest-client > Response Headers
 jrc.ResponseStatus = #juneau-rest-client.jrc.ResponseStatus, Overview > juneau-rest-client > Response Status
 jrm.MockRestClient = #juneau-rest-mock.jrm.MockRestClient, Overview > juneau-rest-mock > MockRestClient
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 1d9af33f7..3580036a5 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -341,7 +341,7 @@ import org.apache.juneau.xml.*;
  * <ul class='javatree'>
  * 	<li class='jc'>{@link Builder}
  * 	<ul>
- * 		<li class='jm'>{@link Builder#headerData() headerData()}
+ * 		<li class='jm'>{@link Builder#headers() headerData()}
  * 		<li class='jm'>{@link Builder#header(String,String) header(String,Object)}
  * 		<li class='jm'>{@link Builder#header(String,Supplier) header(String,Supplier&lt;?&gt;)}
  * 		<li class='jm'>{@link Builder#headers(Header...) headers(Header...)}
@@ -351,7 +351,6 @@ import org.apache.juneau.xml.*;
  * 	<ul>
  * 		<li class='jm'>{@link RestRequest#header(String,Object) header(String,Object)}
  * 		<li class='jm'>{@link RestRequest#headers(Header...) headers(Header...)}
- * 		<li class='jm'>{@link RestRequest#headers(ListOperation,Header...) headers(ListOperation,Header...)}
  * 		<li class='jm'>{@link RestRequest#headersBean(Object) headersBean(Object)}
  * 		<li class='jm'>{@link RestRequest#headerPairs(String...) headerPairs(String...)}
  * 	</ul>
@@ -406,7 +405,6 @@ import org.apache.juneau.xml.*;
  * 	<ul>
  * 		<li class='jm'>{@link RestRequest#queryData(String,Object) queryData(String,Object)}
  * 		<li class='jm'>{@link RestRequest#queryData(NameValuePair...) queryData(NameValuePair...)}
- * 		<li class='jm'>{@link RestRequest#queryData(ListOperation,NameValuePair...) queryData(ListOperation,NameValuePair...)}
  * 		<li class='jm'>{@link RestRequest#queryDataBean(Object) queryDataBean(Object)}
  * 		<li class='jm'>{@link RestRequest#queryCustom(Object) queryCustom(Object)}
  * 		<li class='jm'>{@link RestRequest#queryDataPairs(String...) queryDataPairs(String...)}
@@ -446,7 +444,6 @@ import org.apache.juneau.xml.*;
  * 	<ul>
  * 		<li class='jm'>{@link RestRequest#formData(String,Object) formData(String,Object)}
  * 		<li class='jm'>{@link RestRequest#formData(NameValuePair...) formData(NameValuePair...)}
- * 		<li class='jm'>{@link RestRequest#formData(ListOperation,NameValuePair...) formData(ListOperation,NameValuePair...)}
  * 		<li class='jm'>{@link RestRequest#formDataBean(Object) formDataBean(Object)}
  * 		<li class='jm'>{@link RestRequest#formDataCustom(Object) formDataCustom(Object)}
  * 		<li class='jm'>{@link RestRequest#formDataPairs(String...) formDataPairs(String...)}
@@ -1122,10 +1119,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"application/json"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"application/json"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #xml()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1169,10 +1166,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"application/json"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"application/json+simple"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #xml()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1212,10 +1209,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/xml"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/xml"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1258,10 +1255,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/html"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/html"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1304,10 +1301,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/html"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/html"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1350,10 +1347,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/html+stripped"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/html+stripped"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1397,10 +1394,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/plain"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/plain"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1443,10 +1440,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"octal/msgpack"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"octal/msgpack"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1490,10 +1487,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/uon"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/uon"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1535,10 +1532,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"application/x-www-form-urlencoded"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"application/x-www-form-urlencoded"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1584,10 +1581,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	</ul>
 		 * <p>
 		 * 	<c>Accept</c> request header will be set to <js>"text/openapi"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	<c>Content-Type</c> request header will be set to <js>"text/openapi"</js> unless overridden
-		 * 		via {@link #headerData()}, or per-request via {@link RestRequest#header(Header)}.
+		 * 		via {@link #headers()}, or per-request via {@link RestRequest#header(Header)}.
 		 * <p>
 		 * 	Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages.
 		 * 	<ul>
@@ -1626,10 +1623,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 			bean context property setters (e.g. {@link #swaps(Class...)}) defined on this builder class.
 		 * 	</ul>
 		 * <p>
-		 * 	<c>Accept</c> request header must be set via {@link #headerData()}, or per-request
+		 * 	<c>Accept</c> request header must be set via {@link #headers()}, or per-request
 		 * 		via {@link RestRequest#header(Header)} in order for the correct parser to be selected.
 		 * <p>
-		 * 	<c>Content-Type</c> request header must be set via {@link #headerData()},
+		 * 	<c>Content-Type</c> request header must be set via {@link #headers()},
 		 * 		or per-request via {@link RestRequest#header(Header)} in order for the correct serializer to be selected.
 		 * <p>
 		 * 	Similar to calling <c>json().simpleJson().html().xml().uon().urlEnc().openApi().msgPack().plainText()</c>.
@@ -2459,31 +2456,18 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * 	<li class='jm'>{@link #mediaType(MediaType)}
 		 * 	<li class='jm'>{@link #accept(String)}
 		 * 	<li class='jm'>{@link #acceptCharset(String)}
-		 * 	<li class='jm'>{@link #acceptEncoding(String)}
-		 * 	<li class='jm'>{@link #acceptLanguage(String)}
-		 * 	<li class='jm'>{@link #authorization(String)}
-		 * 	<li class='jm'>{@link #cacheControl(String)}
 		 * 	<li class='jm'>{@link #clientVersion(String)}
-		 * 	<li class='jm'>{@link #connection(String)}
 		 * 	<li class='jm'>{@link #contentType(String)}
-		 * 	<li class='jm'>{@link #contentEncoding(String)}
 		 * 	<li class='jm'>{@link #debug()}
-		 * 	<li class='jm'>{@link #from(String)}
-		 * 	<li class='jm'>{@link #host(String)}
-		 * 	<li class='jm'>{@link #maxForwards(Integer)}
 		 * 	<li class='jm'>{@link #noTrace()}
-		 * 	<li class='jm'>{@link #origin(String)}
-		 * 	<li class='jm'>{@link #pragma(String)}
-		 * 	<li class='jm'>{@link #proxyAuthorization(String)}
-		 * 	<li class='jm'>{@link #userAgent(String)}
 		 * </ul>
 		 *
 		 * <p>
-		 * Note that the {@link #headerData(Consumer)} method can be used to call this method without breaking fluent call chains.
+		 * Note that the {@link #headers(Consumer)} method can be used to call this method without breaking fluent call chains.
 		 *
 		 * @return The header list builder.
 		 */
-		public final HeaderList.Builder headerData() {
+		public final HeaderList.Builder headers() {
 			if (headerData == null)
 				headerData = createHeaderData();
 			return headerData;
@@ -2506,8 +2490,8 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * @param operation The operation to apply.
 		 * @return This object.
 		 */
-		public final Builder headerData(Consumer<HeaderList.Builder> operation) {
-			operation.accept(headerData());
+		public final Builder headers(Consumer<HeaderList.Builder> operation) {
+			operation.accept(headers());
 			return this;
 		}
 
@@ -2521,7 +2505,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * The default behavior creates an empty builder.
 		 *
 		 * @return The header list builder.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		protected HeaderList.Builder createHeaderData() {
 			return HeaderList.create();
@@ -2549,11 +2533,11 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * @param parts
 		 * 	The header to set.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder headers(Header...parts) {
-			headerData().append(parts);
+			headers().append(parts);
 			return this;
 		}
 
@@ -2576,10 +2560,10 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 *
 		 * @param parts The header values.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		public Builder headersDefault(Header...parts) {
-			headerData().setDefault(parts);
+			headers().setDefault(parts);
 			return this;
 		}
 
@@ -2600,11 +2584,11 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * @param name The header name.
 		 * @param value The header value.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder header(String name, String value) {
-			headerData().append(name, value);
+			headers().append(name, value);
 			return this;
 		}
 
@@ -2625,11 +2609,11 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * @param name The header name.
 		 * @param value The header value supplier.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder header(String name, Supplier<String> value) {
-			headerData().append(name, value);
+			headers().append(name, value);
 			return this;
 		}
 
@@ -2644,7 +2628,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 *
 		 * @param value The new header values.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder mediaType(String value) {
@@ -2663,7 +2647,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 *
 		 * @param value The new header values.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@Override
 		@FluentSetter
@@ -2681,7 +2665,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * @param value
 		 * 	The new header value.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder accept(String value) {
@@ -2696,73 +2680,13 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 *
 		 * @param value The new header value.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder acceptCharset(String value) {
 			return headers(AcceptCharset.of(value));
 		}
 
-		/**
-		 * Sets the value for the <c>Accept-Encoding</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(AcceptEncoding.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder acceptEncoding(String value) {
-			return headers(AcceptEncoding.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Accept-Language</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(AcceptLanguage.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder acceptLanguage(String value) {
-			return headers(AcceptLanguage.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Authorization</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(Authorization.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder authorization(String value) {
-			return headers(Authorization.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Cache-Control</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(CacheControl.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder cacheControl(String value) {
-			return headers(CacheControl.of(value));
-		}
-
 		/**
 		 * Sets the client version by setting the value for the <js>"Client-Version"</js> header.
 		 *
@@ -2771,28 +2695,13 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 *
 		 * @param value The version string (e.g. <js>"1.2.3"</js>)
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder clientVersion(String value) {
 			return headers(ClientVersion.of(value));
 		}
 
-		/**
-		 * Sets the value for the <c>Connection</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(Connection.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder connection(String value) {
-			return headers(Connection.of(value));
-		}
-
 		/**
 		 * Sets the value for the <c>Content-Type</c> request header on all requests.
 		 *
@@ -2804,28 +2713,13 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 *
 		 * @param value The new header value.
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder contentType(String value) {
 			return headers(ContentType.of(value));
 		}
 
-		/**
-		 * Sets the value for the <c>Content-Encoding</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(ContentEncoding.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder contentEncoding(String value) {
-			return headers(ContentEncoding.of(value));
-		}
-
 		/**
 		 * Sets the value for the <c>Debug</c> request header on all requests.
 		 *
@@ -2833,7 +2727,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * This is a shortcut for calling <c>headerData().append(Debug.<jsm>of</jsm>(<jv>value</jv>))</c>.
 		 *
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@Override
 		@FluentSetter
@@ -2843,51 +2737,6 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 			return headers(Debug.TRUE);
 		}
 
-		/**
-		 * Sets the value for the <c>From</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(From.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder from(String value) {
-			return headers(From.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Host</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(Host.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder host(String value) {
-			return headers(Host.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Max-Forwards</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(MaxForwards.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder maxForwards(Integer value) {
-			return headers(MaxForwards.of(value));
-		}
-
 		/**
 		 * When called, <c>No-Trace: true</c> is added to requests.
 		 *
@@ -2902,73 +2751,13 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 * prevent needless logging of test scenarios.
 		 *
 		 * @return This object.
-		 * @see #headerData()
+		 * @see #headers()
 		 */
 		@FluentSetter
 		public Builder noTrace() {
 			return headers(NoTrace.of(true));
 		}
 
-		/**
-		 * Sets the value for the <c>Origin</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(Origin.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder origin(String value) {
-			return headers(Origin.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Pragma</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(Pragma.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder pragma(String value) {
-			return headers(Pragma.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>Proxy-Authorization</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(ProxyAuthorization.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder proxyAuthorization(String value) {
-			return headers(ProxyAuthorization.of(value));
-		}
-
-		/**
-		 * Sets the value for the <c>User-Agent</c> request header on all requests.
-		 *
-		 * <p>
-		 * This is a shortcut for calling <c>headerData().append(UserAgent.<jsm>of</jsm>(<jv>value</jv>))</c>.
-		 *
-		 * @param value The new header value.
-		 * @return This object.
-		 * @see #headerData()
-		 */
-		@FluentSetter
-		public Builder userAgent(String value) {
-			return headers(UserAgent.of(value));
-		}
-
 		//------------------------------------------------------------------------------------------------------------------
 		// queryData
 		//------------------------------------------------------------------------------------------------------------------
@@ -6758,7 +6547,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 			.addBean(RestClient.class, this);
 
 		httpClient = builder.getHttpClient();
-		headerData = builder.headerData().build().copy();
+		headerData = builder.headers().build().copy();
 		queryData = builder.queryData().build().copy();
 		formData = builder.formData().build().copy();
 		pathData = builder.pathData().build().copy();
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
index 00c9c5155..669f89174 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
@@ -28,7 +28,6 @@ import java.io.*;
 import java.lang.reflect.*;
 import java.net.*;
 import java.text.*;
-import java.time.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
@@ -51,7 +50,6 @@ import org.apache.juneau.http.*;
 import org.apache.juneau.http.HttpHeaders;
 import org.apache.juneau.http.entity.*;
 import org.apache.juneau.http.header.*;
-import org.apache.juneau.http.header.Date;
 import org.apache.juneau.http.part.*;
 import org.apache.juneau.http.resource.*;
 import org.apache.juneau.httppart.*;
@@ -696,7 +694,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override
 	public boolean isDebug() {
-		return getHeaderData().get("Debug", Boolean.class).orElse(false);
+		return getHeaderList().get("Debug", Boolean.class).orElse(false);
 	}
 
 	/**
@@ -753,7 +751,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return The header data builder.
 	 */
-	public HeaderList.Builder getHeaderDataBuilder() {
+	public HeaderList.Builder headers() {
 		headerData = null;
 		return headerDataBuilder;
 	}
@@ -763,7 +761,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return An immutable list of headers to send on the request.
 	 */
-	public HeaderList getHeaderData() {
+	public HeaderList getHeaderList() {
 		if (headerData == null)
 			headerData = headerDataBuilder.build();
 		return headerData;
@@ -778,7 +776,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return The query data builder.
 	 */
-	public PartList.Builder getQueryDataBuilder() {
+	public PartList.Builder queryData() {
 		queryData = null;
 		return queryDataBuilder;
 	}
@@ -788,7 +786,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return An immutable list of query data to send on the request.
 	 */
-	public PartList getQueryData() {
+	public PartList getQueryDataList() {
 		if (queryData == null)
 			queryData = queryDataBuilder.build();
 		return queryData;
@@ -803,7 +801,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return The form data builder.
 	 */
-	public PartList.Builder getFormDataBuilder() {
+	public PartList.Builder formData() {
 		formData = null;
 		return formDataBuilder;
 	}
@@ -813,7 +811,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return An immutable list of form data to send on the request.
 	 */
-	public PartList getFormData() {
+	public PartList getFormDataList() {
 		if (formData == null)
 			formData = formDataBuilder.build();
 		return formData;
@@ -828,7 +826,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return The path data builder.
 	 */
-	public PartList.Builder getPathDataBuilder() {
+	public PartList.Builder pathData() {
 		pathData = null;
 		return pathDataBuilder;
 	}
@@ -838,7 +836,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 *
 	 * @return An immutable list of path data to send on the request.
 	 */
-	public PartList getPathData() {
+	public PartList getPathDataList() {
 		if (pathData == null)
 			pathData = pathDataBuilder.build();
 		return pathData;
@@ -890,7 +888,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest headers(Header...parts) {
-		getHeaderDataBuilder().append(parts);
+		headers().append(parts);
 		return this;
 	}
 
@@ -915,7 +913,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest queryData(NameValuePair...parts) {
-		getQueryDataBuilder().append(parts);
+		queryData().append(parts);
 		return this;
 	}
 
@@ -940,7 +938,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest formData(NameValuePair...parts) {
-		getFormDataBuilder().append(parts);
+		formData().append(parts);
 		return this;
 	}
 
@@ -965,112 +963,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest pathData(NameValuePair...parts) {
-		getPathDataBuilder().set(parts);
-		return this;
-	}
-
-	/**
-	 * Adds multiple headers to the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Replaces headers "Foo: bar" and "Accept: text/xml".</jc>
-	 * 	<jv>client</jv>
-	 * 		.get(<jsf>URI</jsf>)
-	 * 		.headers(
-	 * 			<jsf>REPLACE</jsf>,
-	 * 			BasicHeader.<jsm>of</jsm>(<js>"Foo"</js>, <js>"bar"</js>),
-	 * 			Accept.<jsf>TEXT_XML</jsf>
-	 * 		)
-	 * 		.run();
-	 * </p>
-	 *
-	 * @param flag
-	 * 	The operation to perform.
-	 * 	<br>Possible operations:
-	 * 	<ul>
-	 * 		<li><c>APPEND</c> - Add to the end of the list.
-	 * 		<li><c>PREPEND</c> - Add to the beginning of the list.
-	 * 		<li><c>REPLACE</c> - Replace inline or append to the end of the list if not present.
-	 * 		<li><c>DEFAULT</c> - Add as a default value if not otherwise set.
-	 * 	</ul>
-	 * @param parts
-	 * 	The parameters to set.
-	 * 	<jk>null</jk> values are ignored.
-	 * @return This object.
-	 */
-	public RestRequest headers(ListOperation flag, Header...parts) {
-		getHeaderDataBuilder().add(flag, parts);
-		return this;
-	}
-
-	/**
-	 * Adds multiple query parameters to the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Sets query parameters "foo=bar" and "baz=true".</jc>
-	 * 	<jv>client</jv>
-	 * 		.get(<jsf>URI</jsf>)
-	 * 		.queryData(
-	 * 			<jsf>REPLACE</jsf>,
-	 * 			BasicStringPart.<jsm>of</jsm>(<js>"foo"</js>, <js>"bar"</js>),
-	 * 			BasicBooleanPart.<jsm>of</jsm>(<js>"baz"</js>, <jk>true</jk>)
-	 * 		)
-	 * 		.run();
-	 * </p>
-	 *
-	 * @param flag
-	 * 	The operation to perform.
-	 * 	<br>Possible operations:
-	 * 	<ul>
-	 * 		<li><c>APPEND</c> - Add to the end of the list.
-	 * 		<li><c>PREPEND</c> - Add to the beginning of the list.
-	 * 		<li><c>REPLACE</c> - Replace inline or append to the end of the list if not present.
-	 * 		<li><c>DEFAULT</c> - Add as a default value if not otherwise set.
-	 * 	</ul>
-	 * @param parts
-	 * 	The parameters to set.
-	 * 	<jk>null</jk> values are ignored.
-	 * @return This object.
-	 */
-	public RestRequest queryData(ListOperation flag, NameValuePair...parts) {
-		getQueryDataBuilder().add(flag, parts);
-		return this;
-	}
-
-	/**
-	 * Adds multiple form-data parameters to the request.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bjava'>
-	 * 	<jc>// Sets form-data parameters "foo=bar" and "baz=true".</jc>
-	 * 	<jv>client</jv>
-	 * 		.get(<jsf>URI</jsf>)
-	 * 		.formData(
-	 * 			<jsf>REPLACE</jsf>,
-	 * 			BasicStringPart.<jsm>of</jsm>(<js>"foo"</js>, <js>"bar"</js>),
-	 * 			BasicBooleanPart.<jsm>of</jsm>(<js>"baz"</js>, <jk>true</jk>)
-	 * 		)
-	 * 		.run();
-	 * </p>
-	 *
-	 * @param flag
-	 * 	The operation to perform.
-	 * 	<br>Possible operations:
-	 * 	<ul>
-	 * 		<li><c>APPEND</c> - Add to the end of the list.
-	 * 		<li><c>PREPEND</c> - Add to the beginning of the list.
-	 * 		<li><c>REPLACE</c> - Replace inline or append to the end of the list if not present.
-	 * 		<li><c>DEFAULT</c> - Add as a default value if not otherwise set.
-	 * 	</ul>
-	 * @param parts
-	 * 	The parameters to set.
-	 * 	<jk>null</jk> values are ignored.
-	 * @return This object.
-	 */
-	public RestRequest formData(ListOperation flag, NameValuePair...parts) {
-		getFormDataBuilder().add(flag, parts);
+		pathData().set(parts);
 		return this;
 	}
 
@@ -1094,7 +987,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest header(String name, Object value) {
-		getHeaderDataBuilder().append(createHeader(name, value));
+		headers().append(createHeader(name, value));
 		return this;
 	}
 
@@ -1118,7 +1011,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest queryData(String name, Object value) {
-		getQueryDataBuilder().append(createPart(QUERY, name, value));
+		queryData().append(createPart(QUERY, name, value));
 		return this;
 	}
 
@@ -1142,7 +1035,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest formData(String name, Object value) {
-		getFormDataBuilder().append(createPart(FORMDATA, name, value));
+		formData().append(createPart(FORMDATA, name, value));
 		return this;
 	}
 
@@ -1166,7 +1059,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 * @return This object.
 	 */
 	public RestRequest pathData(String name, Object value) {
-		getPathDataBuilder().set(createPart(PATH, name, value));
+		pathData().set(createPart(PATH, name, value));
 		return this;
 	}
 
@@ -1188,7 +1081,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest headerPairs(String...pairs) {
 		if (pairs.length % 2 != 0)
 			throw runtimeException("Odd number of parameters passed into headerPairs(String...)");
-		HeaderList.Builder b = getHeaderDataBuilder();
+		HeaderList.Builder b = headers();
 		for (int i = 0; i < pairs.length; i+=2)
 			b.append(pairs[i], pairs[i+1]);
 		return this;
@@ -1217,7 +1110,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest queryDataPairs(String...pairs) throws RestCallException {
 		if (pairs.length % 2 != 0)
 			throw runtimeException("Odd number of parameters passed into queryDataPairs(String...)");
-		PartList.Builder b = getQueryDataBuilder();
+		PartList.Builder b = queryData();
 		for (int i = 0; i < pairs.length; i+=2)
 			b.append(pairs[i], pairs[i+1]);
 		return this;
@@ -1246,7 +1139,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest formDataPairs(String...pairs) throws RestCallException {
 		if (pairs.length % 2 != 0)
 			throw runtimeException("Odd number of parameters passed into formDataPairs(String...)");
-		PartList.Builder b = getFormDataBuilder();
+		PartList.Builder b = formData();
 		for (int i = 0; i < pairs.length; i+=2)
 			b.append(pairs[i], pairs[i+1]);
 		return this;
@@ -1277,7 +1170,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest pathDataPairs(String...pairs) {
 		if (pairs.length % 2 != 0)
 			throw runtimeException("Odd number of parameters passed into pathDataPairs(String...)");
-		PartList.Builder b = getPathDataBuilder();
+		PartList.Builder b = pathData();
 		for (int i = 0; i < pairs.length; i+=2)
 			b.set(pairs[i], pairs[i+1]);
 		return this;
@@ -1310,7 +1203,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest headersBean(Object value) {
 		if (! isBean(value))
 			throw runtimeException("Object passed into headersBean(Object) is not a bean.");
-		HeaderList.Builder b = getHeaderDataBuilder();
+		HeaderList.Builder b = headers();
 		toBeanMap(value, PropertyNamerDUCS.INSTANCE).forEach((k,v) -> b.append(createHeader(k, v)));
 		return this;
 	}
@@ -1338,7 +1231,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest queryDataBean(Object value) {
 		if (! isBean(value))
 			throw runtimeException("Object passed into queryDataBean(Object) is not a bean.");
-		PartList.Builder b = getQueryDataBuilder();
+		PartList.Builder b = queryData();
 		toBeanMap(value).forEach((k,v) -> b.append(createPart(QUERY, k, v)));
 		return this;
 	}
@@ -1366,7 +1259,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest formDataBean(Object value) {
 		if (! isBean(value))
 			throw runtimeException("Object passed into formDataBean(Object) is not a bean.");
-		PartList.Builder b = getFormDataBuilder();
+		PartList.Builder b = formData();
 		toBeanMap(value).forEach((k,v) -> b.append(createPart(FORMDATA, k, v)));
 		return this;
 	}
@@ -1394,7 +1287,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	public RestRequest pathDataBean(Object value) {
 		if (! isBean(value))
 			throw runtimeException("Object passed into pathDataBean(Object) is not a bean.");
-		PartList.Builder b = getPathDataBuilder();
+		PartList.Builder b = pathData();
 		toBeanMap(value).forEach((k,v) -> b.set(createPart(PATH, k, v)));
 		return this;
 	}
@@ -1645,7 +1538,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 		if (skipIfEmpty)
 			l.removeIf(x -> isEmpty(x.getValue()));
 
-		getHeaderDataBuilder().append(l);
+		headers().append(l);
 
 		return this;
 	}
@@ -1682,7 +1575,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 		if (skipIfEmpty)
 			l.removeIf(x -> isEmpty(x.getValue()));
 
-		getQueryDataBuilder().append(l);
+		queryData().append(l);
 
 		return this;
 	}
@@ -1719,7 +1612,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 		if (skipIfEmpty)
 			l.removeIf(x -> isEmpty(x.getValue()));
 
-		getFormDataBuilder().append(l);
+		formData().append(l);
 
 		return this;
 	}
@@ -1749,7 +1642,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 			throw runtimeException("Invalid value type for path arg ''{0}'': {1}", name, className(value));
 		}
 
-		getPathDataBuilder().append(l);
+		pathData().append(l);
 
 		return this;
 	}
@@ -1892,101 +1785,6 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 		return header(AcceptCharset.of(value));
 	}
 
-	/**
-	 * Sets the value for the <c>Accept-Encoding</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Accept-Encoding"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest acceptEncoding(String value) throws RestCallException {
-		return header(AcceptEncoding.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Accept-Language</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Accept-Language"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest acceptLanguage(String value) throws RestCallException {
-		return header(AcceptLanguage.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Authorization</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Authorization"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest authorization(String value) throws RestCallException {
-		return header(Authorization.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Cache-Control</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Cache-Control"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest cacheControl(String value) throws RestCallException {
-		return header(CacheControl.of(value));
-	}
-
-	/**
-	 * Sets the client version by setting the value for the <js>"Client-Version"</js> header.
-	 *
-	 * @param value The version string (e.g. <js>"1.2.3"</js>)
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest clientVersion(String value) throws RestCallException {
-		return header(ClientVersion.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Connection</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Connection"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest connection(String value) throws RestCallException {
-		return header(Connection.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Content-Length</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Content-Length"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest contentLength(Long value) throws RestCallException {
-		return header(ContentLength.of(value));
-	}
-
 	/**
 	 * Sets the value for the <c>Content-Type</c> request header.
 	 *
@@ -2013,174 +1811,6 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 		return header(Accept.of(value)).header(ContentType.of(value));
 	}
 
-	/**
-	 * Sets the value for the <c>Content-Encoding</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Content-Encoding"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest contentEncoding(String value) throws RestCallException {
-		return header(ContentEncoding.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Date</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Date"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest date(ZonedDateTime value) throws RestCallException {
-		return header(Date.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Expect</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Expect"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest expect(String value) throws RestCallException {
-		return header(Expect.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Forwarded</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Forwarded"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest forwarded(String value) throws RestCallException {
-		return header(Forwarded.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>From</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"From"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest from(String value) throws RestCallException {
-		return header(From.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Host</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Host"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest hostHeader(String value) throws RestCallException {
-		return header(Host.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>If-Match</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"If-Match"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest ifMatch(String value) throws RestCallException {
-		return header(IfMatch.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>If-Modified-Since</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"If-Modified-Since"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest ifModifiedSince(ZonedDateTime value) throws RestCallException {
-		return header(IfModifiedSince.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>If-None-Match</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"If-None-Match"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest ifNoneMatch(String value) throws RestCallException {
-		return header(IfNoneMatch.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>If-Range</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"If-Range"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest ifRange(String value) throws RestCallException {
-		return header(IfRange.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>If-Unmodified-Since</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"If-Unmodified-Since"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest ifUnmodifiedSince(ZonedDateTime value) throws RestCallException {
-		return header(IfUnmodifiedSince.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Max-Forwards</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Max-Forwards"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest maxForwards(Integer value) throws RestCallException {
-		return header(MaxForwards.of(value));
-	}
-
 	/**
 	 * When called, <c>No-Trace: true</c> is added to requests.
 	 *
@@ -2196,146 +1826,6 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 		return header(NoTrace.TRUE);
 	}
 
-	/**
-	 * Sets the value for the <c>Origin</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Origin"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest origin(String value) throws RestCallException {
-		return header(Origin.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Pragma</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Pragma"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest pragma(String value) throws RestCallException {
-		return header(Pragma.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Proxy-Authorization</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Proxy-Authorization"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest proxyAuthorization(String value) throws RestCallException {
-		return header(ProxyAuthorization.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Range</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Range"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest range(String value) throws RestCallException {
-		return header(Range.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Referer</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Referer"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest referer(String value) throws RestCallException {
-		return header(Referer.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>TE</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"TE"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest te(String value) throws RestCallException {
-		return header(TE.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>User-Agent</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"User-Agent"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest userAgent(String value) throws RestCallException {
-		return header(UserAgent.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Upgrade</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Upgrade"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest upgrade(String value) throws RestCallException {
-		return header(Upgrade.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Via</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Via"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest via(String value) throws RestCallException {
-		return header(Via.of(value));
-	}
-
-	/**
-	 * Sets the value for the <c>Warning</c> request header.
-	 *
-	 * <p>
-	 * This is a shortcut for calling <code>header(<js>"Warning"</js>, value);</code>
-	 *
-	 * @param value The new header value.
-	 * @return This object.
-	 * @throws RestCallException Invalid input.
-	 */
-	public RestRequest warning(String value) throws RestCallException {
-		return header(Warning.of(value));
-	}
-
 	//------------------------------------------------------------------------------------------------------------------
 	// Execution methods.
 	//------------------------------------------------------------------------------------------------------------------
@@ -2370,11 +1860,11 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 
 		try {
 
-			getQueryData().stream().map(SimpleQuery::new).filter(SimplePart::isValid).forEach(
+			getQueryDataList().stream().map(SimpleQuery::new).filter(SimplePart::isValid).forEach(
 				x -> uriBuilder.addParameter(x.name, x.value)
 			);
 
-			getPathData().stream().map(SimplePath::new).forEach(x ->
+			getPathDataList().stream().map(SimplePath::new).forEach(x ->
 				{
 					String path = uriBuilder.getPath();
 					String name = x.name, value = x.value;
@@ -2393,7 +1883,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 			request.setURI(uriBuilder.build());
 
 			// Pick the serializer if it hasn't been overridden.
-			HeaderList.Builder hl = getHeaderDataBuilder();
+			HeaderList.Builder hl = headers();
 			Optional<Header> h = hl.getLast("Content-Type");
 			String contentType = h.isPresent() ? h.get().getValue() : null;
 			Serializer serializer = this.serializer;
@@ -2411,7 +1901,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 			if (accept == null && parser != null)
 				hl.set(Accept.of( parser.getPrimaryMediaType()));
 
-			getHeaderData().stream().map(SimpleHeader::new).filter(SimplePart::isValid).forEach(x -> request.addHeader(x));
+			getHeaderList().stream().map(SimpleHeader::new).filter(SimplePart::isValid).forEach(x -> request.addHeader(x));
 
 			if (request2 == null && content != NO_BODY)
 				throw new RestCallException(null, null, "Method does not support content entity.  Method={0}, URI={1}", getMethod(), getURI());
@@ -2422,7 +1912,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 				if (content != NO_BODY) {
 					input2 = content;
 				} else {
-					input2 = new UrlEncodedFormEntity(getFormData().stream().map(SimpleFormData::new).filter(SimplePart::isValid).collect(toList()));
+					input2 = new UrlEncodedFormEntity(getFormDataList().stream().map(SimpleFormData::new).filter(SimplePart::isValid).collect(toList()));
 				}
 
 				if (input2 instanceof Supplier)
@@ -2780,7 +2270,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public boolean containsHeader(String name) {
-		return getHeaderData().contains(name);
+		return getHeaderList().contains(name);
 	}
 
 	/**
@@ -2794,7 +2284,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public Header[] getHeaders(String name) {
-		return getHeaderData().getAll(name);
+		return getHeaderList().getAll(name);
 	}
 
 	/**
@@ -2809,7 +2299,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public Header getFirstHeader(String name) {
-		return getHeaderData().getFirst(name).orElse(null);
+		return getHeaderList().getFirst(name).orElse(null);
 	}
 
 	/**
@@ -2824,7 +2314,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public Header getLastHeader(String name) {
-		return getHeaderData().getLast(name).orElse(null);
+		return getHeaderList().getLast(name).orElse(null);
 	}
 
 	/**
@@ -2836,7 +2326,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public Header[] getAllHeaders() {
-		return getHeaderData().getAll();
+		return getHeaderList().getAll();
 	}
 
 	/**
@@ -2852,7 +2342,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void addHeader(Header header) {
-		getHeaderDataBuilder().append(header);
+		headers().append(header);
 	}
 
 	/**
@@ -2869,7 +2359,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void addHeader(String name, String value) {
-		getHeaderDataBuilder().append(stringHeader(name, value));
+		headers().append(stringHeader(name, value));
 	}
 
 	/**
@@ -2881,7 +2371,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void setHeader(Header header) {
-		getHeaderDataBuilder().set(header);
+		headers().set(header);
 	}
 
 	/**
@@ -2894,7 +2384,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void setHeader(String name, String value) {
-		getHeaderDataBuilder().set(stringHeader(name, value));
+		headers().set(stringHeader(name, value));
 	}
 
 	/**
@@ -2904,7 +2394,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void setHeaders(Header[] headers) {
-		getHeaderDataBuilder().set(headers);
+		headers().set(headers);
 	}
 
 	/**
@@ -2914,7 +2404,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void removeHeader(Header header) {
-		getHeaderDataBuilder().remove(header);
+		headers().remove(header);
 	}
 
 	/**
@@ -2924,7 +2414,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public void removeHeaders(String name) {
-		getHeaderDataBuilder().remove(name);
+		headers().remove(name);
 	}
 
 	/**
@@ -2934,7 +2424,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public HeaderIterator headerIterator() {
-		return getHeaderData().iterator();
+		return getHeaderList().iterator();
 	}
 
 	/**
@@ -2945,7 +2435,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	 */
 	@Override /* HttpMessage */
 	public HeaderIterator headerIterator(String name) {
-		return getHeaderData().iterator(name);
+		return getHeaderList().iterator(name);
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
index 8bf0b80c4..309011a45 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestResponse.java
@@ -841,7 +841,7 @@ public class RestResponse implements HttpResponse {
 				sb.append("\n=== REQUEST ===\n");
 				sb.append(request.getMethod()).append(" ").append(request.getURI());
 				sb.append("\n---request headers---");
-				request.getHeaderData().forEach(x -> sb.append("\n\t").append(x));
+				request.getHeaderList().forEach(x -> sb.append("\n\t").append(x));
 				if (request.hasHttpEntity()) {
 					sb.append("\n---request entity---");
 					HttpEntity e = request.getHttpEntity();
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index 75a6b8c0e..a54145f85 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -991,18 +991,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder acceptEncoding(String value) {
-			super.acceptEncoding(value);
-			return this;
-		}
-
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder acceptLanguage(String value) {
-			super.acceptLanguage(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder addBeanTypes() {
 			super.addBeanTypes();
@@ -1039,12 +1027,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder authorization(String value) {
-			super.authorization(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder backoffManager(BackoffManager backoffManager) {
 			super.backoffManager(backoffManager);
@@ -1057,12 +1039,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder cacheControl(String value) {
-			super.cacheControl(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder callHandler(Class<? extends org.apache.juneau.rest.client.RestCallHandler> value) {
 			super.callHandler(value);
@@ -1075,12 +1051,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder connection(String value) {
-			super.connection(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder connectionBackoffStrategy(ConnectionBackoffStrategy connectionBackoffStrategy) {
 			super.connectionBackoffStrategy(connectionBackoffStrategy);
@@ -1123,12 +1093,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder contentEncoding(String value) {
-			super.contentEncoding(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder contentType(String value) {
 			super.contentType(value);
@@ -1273,12 +1237,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder from(String value) {
-			super.from(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder header(String name, String value) {
 			super.header(name, value);
@@ -1297,12 +1255,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder host(String value) {
-			super.host(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder html() {
 			super.html();
@@ -1441,12 +1393,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder maxForwards(Integer value) {
-			super.maxForwards(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder maxIndent(int value) {
 			super.maxIndent(value);
@@ -1489,12 +1435,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder origin(String value) {
-			super.origin(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder paramFormat(ParamFormat value) {
 			super.paramFormat(value);
@@ -1586,30 +1526,12 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder pragma(String value) {
-			super.pragma(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder proxy(HttpHost proxy) {
 			super.proxy(proxy);
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder proxyAuthenticationStrategy(AuthenticationStrategy proxyAuthStrategy) {
-			super.proxyAuthenticationStrategy(proxyAuthStrategy);
-			return this;
-		}
-
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder proxyAuthorization(String value) {
-			super.proxyAuthorization(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder publicSuffixMatcher(PublicSuffixMatcher publicSuffixMatcher) {
 			super.publicSuffixMatcher(publicSuffixMatcher);
@@ -1863,12 +1785,6 @@ public class MockRestClient extends RestClient implements HttpClientConnection {
 			return this;
 		}
 
-		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
-		public Builder userAgent(String value) {
-			super.userAgent(value);
-			return this;
-		}
-
 		@Override /* GENERATED - org.apache.juneau.rest.client.RestClient.Builder */
 		public Builder userTokenHandler(UserTokenHandler userTokenHandler) {
 			super.userTokenHandler(userTokenHandler);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
index 599d13c7e..4b36ad533 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/Header_AcceptEncoding_Test.java
@@ -18,6 +18,7 @@ import static org.junit.runners.MethodSorters.*;
 import java.io.*;
 
 import org.apache.juneau.encoders.*;
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.*;
@@ -43,48 +44,48 @@ public class Header_AcceptEncoding_Test {
 	public void a01_noCompression() throws Exception {
 		RestClient a = MockRestClient.buildLax(A.class);
 		a.get("/").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("*").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("identity").run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("")).run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("*")).run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("identity")).run().assertContent().is("foo");
 
 		// The following should all match identity.
-		a.get("/").acceptEncoding("mycoding").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("identity;q=0.8,mycoding;q=0.6").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("mycoding;q=0.8,identity;q=0.6").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("mycoding;q=0.8,*;q=0.6").run().assertContent().is("foo");
-		a.get("/").acceptEncoding("*;q=0.8,myencoding;q=0.6").run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("mycoding")).run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("identity;q=0.8,mycoding;q=0.6")).run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("mycoding;q=0.8,identity;q=0.6")).run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("mycoding;q=0.8,*;q=0.6")).run().assertContent().is("foo");
+		a.get("/").header(AcceptEncoding.of("*;q=0.8,myencoding;q=0.6")).run().assertContent().is("foo");
 
-		a.get("?noTrace=true").acceptEncoding("mycoding,identity;q=0").run()
+		a.get("?noTrace=true").header(AcceptEncoding.of("mycoding,identity;q=0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': 'mycoding,identity;q=0'",
 				"Supported codings: ['identity']"
 			);
-		a.get("?noTrace=true").acceptEncoding("mycoding,*;q=0").run()
+		a.get("?noTrace=true").header(AcceptEncoding.of("mycoding,*;q=0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': 'mycoding,*;q=0'",
 				"Supported codings: ['identity']"
 			);
-		a.get("?noTrace=true").acceptEncoding("identity;q=0").run()
+		a.get("?noTrace=true").header(AcceptEncoding.of("identity;q=0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': 'identity;q=0'",
 				"Supported codings: ['identity']"
 			);
-		a.get("?noTrace=true").acceptEncoding("identity;q=0.0").run()
+		a.get("?noTrace=true").header(AcceptEncoding.of("identity;q=0.0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': 'identity;q=0.0'",
 				"Supported codings: ['identity']"
 			);
-		a.get("?noTrace=true").acceptEncoding("*;q=0").run()
+		a.get("?noTrace=true").header(AcceptEncoding.of("*;q=0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': '*;q=0'",
 				"Supported codings: ['identity']"
 			);
-		a.get("?noTrace=true").acceptEncoding("*;q=0.0").run()
+		a.get("?noTrace=true").header(AcceptEncoding.of("*;q=0.0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': '*;q=0.0'",
@@ -108,37 +109,37 @@ public class Header_AcceptEncoding_Test {
 	public void b01_withCompression() throws Exception {
 		RestClient b = MockRestClient.buildLax(B.class);
 		b.get("/").run().assertContent().is("foo");
-		b.get("/").acceptEncoding("").run().assertContent().is("foo");
-		b.get("/").acceptEncoding("identity").run().assertContent().is("foo");
-		b.get("/").acceptEncoding("identity;q=0.8,mycoding;q=0.6").run().assertContent().is("foo");
+		b.get("/").header(AcceptEncoding.of("")).run().assertContent().is("foo");
+		b.get("/").header(AcceptEncoding.of("identity")).run().assertContent().is("foo");
+		b.get("/").header(AcceptEncoding.of("identity;q=0.8,mycoding;q=0.6")).run().assertContent().is("foo");
 
-		assertEquals("foo", StringUtils.decompress(b.get("/").acceptEncoding("*").run().getContent().asBytes()));
-		assertEquals("foo", StringUtils.decompress(b.get("/").acceptEncoding("mycoding").run().getContent().asBytes()));
+		assertEquals("foo", StringUtils.decompress(b.get("/").header(AcceptEncoding.of("*")).run().getContent().asBytes()));
+		assertEquals("foo", StringUtils.decompress(b.get("/").header(AcceptEncoding.of("mycoding")).run().getContent().asBytes()));
 
-		assertEquals("foo", StringUtils.decompress(b.get("/").acceptEncoding("mycoding,identity;q=0").run().getContent().asBytes()));
-		assertEquals("foo", StringUtils.decompress(b.get("/").acceptEncoding("mycoding,*;q=0").run().getContent().asBytes()));
-		assertEquals("foo", StringUtils.decompress(b.get("/").acceptEncoding("mycoding;q=0.8,identity;q=0.6").run().getContent().asBytes()));
-		assertEquals("foo", StringUtils.decompress(b.get("/").acceptEncoding("mycoding;q=0.8,*;q=0.6").run().getContent().asBytes()));
+		assertEquals("foo", StringUtils.decompress(b.get("/").header(AcceptEncoding.of("mycoding,identity;q=0")).run().getContent().asBytes()));
+		assertEquals("foo", StringUtils.decompress(b.get("/").header(AcceptEncoding.of("mycoding,*;q=0")).run().getContent().asBytes()));
+		assertEquals("foo", StringUtils.decompress(b.get("/").header(AcceptEncoding.of("mycoding;q=0.8,identity;q=0.6")).run().getContent().asBytes()));
+		assertEquals("foo", StringUtils.decompress(b.get("/").header(AcceptEncoding.of("mycoding;q=0.8,*;q=0.6")).run().getContent().asBytes()));
 
-		b.get("?noTrace=true").acceptEncoding("identity;q=0").run()
+		b.get("?noTrace=true").header(AcceptEncoding.of("identity;q=0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': 'identity;q=0'",
 				"Supported codings: ['mycoding','identity']"
 			);
-		b.get("?noTrace=true").acceptEncoding("identity;q=0.0").run()
+		b.get("?noTrace=true").header(AcceptEncoding.of("identity;q=0.0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': 'identity;q=0.0'",
 				"Supported codings: ['mycoding','identity']"
 			);
-		b.get("?noTrace=true").acceptEncoding("*;q=0").run()
+		b.get("?noTrace=true").header(AcceptEncoding.of("*;q=0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': '*;q=0'",
 				"Supported codings: ['mycoding','identity']"
 			);
-		b.get("?noTrace=true").acceptEncoding("*;q=0.0").run()
+		b.get("?noTrace=true").header(AcceptEncoding.of("*;q=0.0")).run()
 			.assertCode().is(406)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Accept-Encoding': '*;q=0.0'",
@@ -192,50 +193,50 @@ public class Header_AcceptEncoding_Test {
 		RestClient c = MockRestClient.build(C.class);
 
 		c.get("/a")
-			.acceptEncoding("mycoding")
+			.header(AcceptEncoding.of("mycoding"))
 			.run()
 			.assertHeader("Content-Encoding").isNull() // Should not be set
 			.assertHeader("Content-Type").is("text/direct")
 			.assertContent().is("foo");
 		c.get("/a")
-			.acceptEncoding("*")
+			.header(AcceptEncoding.of("*"))
 			.run()
 			.assertHeader("Content-Encoding").isNull() // Should not be set
 			.assertHeader("Content-Type").is("text/direct")
 			.assertContent().is("foo");
 
 		c.get("/b")
-			.acceptEncoding("mycoding")
+			.header(AcceptEncoding.of("mycoding"))
 			.run()
 			.assertHeader("Content-Encoding").isNull() // Should not be set
 			.assertContent().is("foo");
 		c.get("/b")
-			.acceptEncoding("*")
+			.header(AcceptEncoding.of("*"))
 			.run()
 			.assertHeader("Content-Encoding").isNull() // Should not be set
 			.assertContent().is("foo");
 
 		byte[] body;
 		body = c.get("/c")
-			.acceptEncoding("mycoding")
+			.header(AcceptEncoding.of("mycoding"))
 			.run()
 			.assertHeader("Content-Encoding").is("mycoding")
 			.getContent().asBytes();
 		assertEquals("foo", StringUtils.decompress(body));
 		body = c.get("/c")
-			.acceptEncoding("*")
+			.header(AcceptEncoding.of("*"))
 			.run()
 			.assertHeader("Content-Encoding").is("mycoding")
 			.getContent().asBytes();
 		assertEquals("foo", StringUtils.decompress(body));
 
 		c.get("/d")
-			.acceptEncoding("mycoding")
+			.header(AcceptEncoding.of("mycoding"))
 			.run()
 			.assertHeader("Content-Encoding").isNull() // Should not be set
 			.assertContent().is("foo");
 		c.get("/d")
-			.acceptEncoding("*")
+			.header(AcceptEncoding.of("*"))
 			.run()
 			.assertHeader("Content-Encoding").isNull() // Should not be set
 			.assertContent().is("foo");
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
index a6edcb87c..751a87c7a 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
@@ -17,7 +17,6 @@ import static org.apache.juneau.internal.IOUtils.*;
 import static org.junit.runners.MethodSorters.*;
 
 import java.io.*;
-import java.time.*;
 import java.util.*;
 
 import javax.servlet.*;
@@ -127,10 +126,6 @@ public class RestOp_Params_Test {
 	@Test
 	public void a01_params() throws Exception {
 		RestClient a = MockRestClient.build(A.class);
-		a.get("/a").acceptLanguage("en-US").run().assertContent().is("bar");
-		a.get("/a").acceptLanguage("ja-JP").run().assertContent().is("baz");
-		a.get("/b").acceptLanguage("en-US").run().assertContent().is("bar");
-		a.get("/b").acceptLanguage("ja-JP").run().assertContent().is("baz");
 		a.post("/c", "foo").run().assertContent().is("foo");
 		a.post("/d", "foo").run().assertContent().is("foo");
 		a.post("/e", "foo").run().assertContent().is("foo");
@@ -143,8 +138,6 @@ public class RestOp_Params_Test {
 		a.get("/l").run().assertContent().is("GET");
 		a.get("/n").run().assertContent().is("true");
 		a.get("/o").contentType("application/json").run().assertContent().is("org.apache.juneau.json.JsonParser");
-		a.get("/p").acceptLanguage("en-US").run().assertContent().is("en_US");
-		a.get("/p").acceptLanguage("ja-JP").run().assertContent().is("ja_JP");
 		a.get("/q").run().assertContent().is("true");
 		a.get("/r").run().assertContent().is("true");
 		a.get("/s").run().assertContent().is("true");
@@ -295,7 +288,6 @@ public class RestOp_Params_Test {
 	@Test
 	public void b01_headers() throws Exception {
 		RestClient b = MockRestClient.build(B1.class);
-		ZonedDateTime zdt = ZonedDateTime.parse("2007-12-03T10:15:30Z");
 
 		b.get("/accept").accept("text/foo").run().assertContent().is("text/foo");
 		b.get("/accept").accept("text/foo+bar").run().assertContent().is("text/foo+bar");
@@ -307,60 +299,31 @@ public class RestOp_Params_Test {
 		b.get("/accept?Accept=text/foo").run().assertContent().is("text/foo");
 		b.get("/acceptCharset").acceptCharset("UTF-8").run().assertContent().is("UTF-8");
 		b.get("/acceptCharset?Accept-Charset=UTF-8").run().assertContent().is("UTF-8");
-		b.get("/acceptEncoding").acceptEncoding("foo").run().assertContent().is("foo");
-		b.get("/acceptEncoding").acceptEncoding("*").run().assertContent().is("*");
 		b.get("/acceptEncoding?Accept-Encoding=*").run().assertContent().is("*");
-		b.get("/acceptLanguage").acceptLanguage("foo").run().assertContent().is("foo");
-		b.get("/acceptLanguage?Accept-Language=foo").acceptLanguage("foo").run().assertContent().is("foo");
-		b.get("/authorization").authorization("foo").run().assertContent().is("foo");
 		b.get("/authorization?Authorization=foo").run().assertContent().is("foo");
-		b.get("/cacheControl").cacheControl("foo").run().assertContent().is("foo");
 		b.get("/cacheControl?Cache-Control=foo").run().assertContent().is("foo");
-		b.get("/connection").connection("foo").run().assertContent().is("foo");
 		b.get("/connection?Connection=foo").run().assertContent().is("foo");
-		b.get("/contentLength").contentLength(0l).run().assertContent().is("0");
 		b.get("/contentLength?Content-Length=0").run().assertContent().is("0");
 		b.get("/contentType").contentType("text/foo").run().assertContent().is("text/foo");
 		b.get("/contentType?Content-Type=text/foo").run().assertContent().is("text/foo");
-		b.get("/date").date(zdt).run().assertContent().is("Mon, 3 Dec 2007 10:15:30 GMT");
 		b.get("/date?Date=Mon, 3 Dec 2007 10:15:30 GMT").run().assertContent().is("Mon, 3 Dec 2007 10:15:30 GMT");
-		b.get("/expect").expect("100-continue").run().assertContent().is("100-continue");
 		b.get("/expect?Expect=100-continue").run().assertContent().is("100-continue");
-		b.get("/from").from("foo").run().assertContent().is("foo");
 		b.get("/from?From=foo").run().assertContent().is("foo");
 		b.get("/host").uriHost("localhost").run().assertContent().is("localhost");
 		b.get("/host?Host=localhost").run().assertContent().is("localhost");
-		b.get("/ifMatch").ifMatch("\"foo\"").run().assertContent().is("\"foo\"");
-		b.get("/ifMatch").ifMatch("W/\"foo\"").run().assertContent().is("W/\"foo\"");
-		b.get("/ifMatch").ifMatch("W/\"foo\",\"bar\"").run().assertContent().is("W/\"foo\",\"bar\"");
 		b.get("/ifMatch?If-Match=\"foo\"").run().assertContent().is("\"foo\"");
-		b.get("/ifModifiedSince").ifModifiedSince(zdt).run().assertContent().is("Mon, 3 Dec 2007 10:15:30 GMT");
 		b.get("/ifModifiedSince?If-Modified-Since=Mon, 3 Dec 2007 10:15:30 GMT").run().assertContent().is("Mon, 3 Dec 2007 10:15:30 GMT");
-		b.get("/ifNoneMatch").ifNoneMatch("\"foo\"").run().assertContent().is("\"foo\"");
-		b.get("/ifNoneMatch").ifNoneMatch("W/\"foo\"").run().assertContent().is("W/\"foo\"");
-		b.get("/ifNoneMatch").ifNoneMatch("W/\"foo\",\"bar\"").run().assertContent().is("W/\"foo\",\"bar\"");
 		b.get("/ifNoneMatch?If-None-Match=\"foo\"").run().assertContent().is("\"foo\"");
-		b.get("/ifRange").ifRange("\"foo\"").run().assertContent().is("\"foo\"");
 		b.get("/ifRange?If-Range=\"foo\"").run().assertContent().is("\"foo\"");
-		b.get("/ifUnmodifiedSince").ifUnmodifiedSince(zdt).run().assertContent().is("Mon, 3 Dec 2007 10:15:30 GMT");
 		b.get("/ifUnmodifiedSince?If-Unmodified-Since=Mon, 3 Dec 2007 10:15:30 GMT").run().assertContent().is("Mon, 3 Dec 2007 10:15:30 GMT");
-		b.get("/maxForwards").maxForwards(123).run().assertContent().is("123");
 		b.get("/maxForwards?Max-Forwards=123").run().assertContent().is("123");
-		b.get("/pragma").pragma("foo").run().assertContent().is("foo");
 		b.get("/pragma?Pragma=foo").run().assertContent().is("foo");
-		b.get("/proxyAuthorization").proxyAuthorization("foo").run().assertContent().is("foo");
 		b.get("/proxyAuthorization?Proxy-Authorization=foo").run().assertContent().is("foo");
-		b.get("/range").range("foo").run().assertContent().is("foo");
 		b.get("/range?Range=foo").run().assertContent().is("foo");
-		b.get("/referer").referer("foo").run().assertContent().is("foo");
 		b.get("/referer?Referer=foo").run().assertContent().is("foo");
-		b.get("/te").te("foo").run().assertContent().is("foo");
 		b.get("/te?TE=foo").run().assertContent().is("foo");
-		b.get("/upgrade").upgrade("foo").run().assertContent().is("foo");
 		b.get("/upgrade?Upgrade=foo").run().assertContent().is("foo");
-		b.get("/userAgent").userAgent("foo").run().assertContent().is("foo");
 		b.get("/userAgent?User-Agent=foo").run().assertContent().is("foo");
-		b.get("/warning").warning("foo").run().assertContent().is("foo");
 		b.get("/warning?Warning=foo").run().assertContent().is("foo");
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_ClientVersion_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_ClientVersion_Test.java
index 06e6e2d7a..8f942ecc4 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_ClientVersion_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_ClientVersion_Test.java
@@ -15,6 +15,7 @@ package org.apache.juneau.rest.annotation;
 import static org.apache.juneau.http.HttpMethod.*;
 import static org.junit.runners.MethodSorters.*;
 
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.rest.client.*;
 import org.apache.juneau.rest.mock.*;
 import org.junit.*;
@@ -55,13 +56,13 @@ public class RestOp_ClientVersion_Test {
 		RestClient a = MockRestClient.build(A1.class);
 		a.get("/").run().assertContent().is("no-version");
 		for (String s : "1, 1.0, 1.0.0, 1.0.1".split("\\s*,\\s*")) {
-			a.get("/").clientVersion(s).run().assertContent().setMsg("s=[{0}]",s).is("[1.0,1.0]");
+			a.get("/").header(ClientVersion.of(s)).run().assertContent().setMsg("s=[{0}]",s).is("[1.0,1.0]");
 		}
 		for (String s : "1.1, 1.1.1, 1.2, 1.9.9".split("\\s*,\\s*")) {
-			a.get("/").clientVersion(s).run().assertContent().setMsg("s=[{0}]").is("[1.1,2)");
+			a.get("/").header(ClientVersion.of(s)).run().assertContent().setMsg("s=[{0}]").is("[1.1,2)");
 		}
 		for (String s : "2, 2.0, 2.1, 9, 9.9".split("\\s*,\\s*")) {
-			a.get("/").clientVersion(s).run().assertContent().setMsg("s=[{0}]").is("2");
+			a.get("/").header(ClientVersion.of(s)).run().assertContent().setMsg("s=[{0}]").is("2");
 		}
 	}
 
@@ -94,13 +95,13 @@ public class RestOp_ClientVersion_Test {
 		RestClient a = MockRestClient.build(A2.class);
 		a.get("/").run().assertContent().is("no-version");
 		for (String s : "1, 1.0, 1.0.0, 1.0.1".split("\\s*,\\s*")) {
-			a.get("/").clientVersion(s).run().assertContent().setMsg("s=[{0}]",s).is("[1.0,1.0]");
+			a.get("/").header(ClientVersion.of(s)).run().assertContent().setMsg("s=[{0}]",s).is("[1.0,1.0]");
 		}
 		for (String s : "1.1, 1.1.1, 1.2, 1.9.9".split("\\s*,\\s*")) {
-			a.get("/").clientVersion(s).run().assertContent().setMsg("s=[{0}]").is("[1.1,2)");
+			a.get("/").header(ClientVersion.of(s)).run().assertContent().setMsg("s=[{0}]").is("[1.1,2)");
 		}
 		for (String s : "2, 2.0, 2.1, 9, 9.9".split("\\s*,\\s*")) {
-			a.get("/").clientVersion(s).run().assertContent().setMsg("s=[{0}]").is("2");
+			a.get("/").header(ClientVersion.of(s)).run().assertContent().setMsg("s=[{0}]").is("2");
 		}
 	}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Encoders_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Encoders_Test.java
index 6a632cf1f..c7bfbf8b6 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Encoders_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Encoders_Test.java
@@ -16,6 +16,7 @@ import static org.junit.runners.MethodSorters.*;
 
 import org.apache.juneau.encoders.*;
 import org.apache.juneau.http.annotation.Content;
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.client.*;
 import org.apache.juneau.rest.mock.*;
@@ -51,9 +52,9 @@ public class Rest_Encoders_Test {
 	public void a01_noCompression() throws Exception {
 		RestClient a = MockRestClient.buildLax(A.class);
 		a.put("/", "foo").run().assertContent().is("foo");
-		a.put("/", "foo").contentEncoding("").run().assertContent().is("foo");
-		a.put("/", "foo").contentEncoding("identity").run().assertContent().is("foo");
-		a.put("?noTrace=true", StringUtils.compress("foo")).contentEncoding("mycoding").run()
+		a.put("/", "foo").header(ContentEncoding.of("")).run().assertContent().is("foo");
+		a.put("/", "foo").header(ContentEncoding.of("identity")).run().assertContent().is("foo");
+		a.put("?noTrace=true", StringUtils.compress("foo")).header(ContentEncoding.of("mycoding")).run()
 			.assertCode().is(415)
 			.assertContent().isContains(
 				"Unsupported encoding in request header 'Content-Encoding': 'mycoding'",
@@ -80,11 +81,11 @@ public class Rest_Encoders_Test {
 			.run()
 			.assertContent().is("foo");
 		b.put("/", "foo")
-			.contentEncoding("")
+			.header(ContentEncoding.of(""))
 			.run()
 			.assertContent().is("foo");
 		b.put("/", "foo")
-			.contentEncoding("identity")
+			.header(ContentEncoding.of("identity"))
 			.run()
 			.assertContent().is("foo");
 //		b.put("/", StringUtils.compress("foo"))
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_FormData_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_FormData_Test.java
index 1fc393fe9..4fe1de94d 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_FormData_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_FormData_Test.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.httppart.HttpPartSchema.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.junit.runners.MethodSorters.*;
-import static org.apache.juneau.ListOperation.*;
 import static org.apache.juneau.http.HttpParts.*;
 import static org.apache.juneau.testutils.StreamUtils.*;
 
@@ -60,14 +59,6 @@ public class RestClient_FormData_Test {
 		client().build().post("/formData").formData(null,(String)null).run().assertContent().is("");
 	}
 
-	@Test
-	public void a02_formData_AddFlag_String_Object() throws Exception {
-		client().formData(part("foo","bar")).build().post("/formData").formData(APPEND,part("foo","baz")).run().assertContent().is("foo=bar&foo=baz");
-		client().formData(part("foo","bar")).build().post("/formData").formData(PREPEND,part("foo","baz")).run().assertContent().is("foo=baz&foo=bar");
-		client().formData(part("foo","bar")).build().post("/formData").formData(SET,part("foo","baz")).run().assertContent().is("foo=baz");
-		client().formData(part("foo","bar")).build().post("/formData").formData(SET,part("bar","baz")).run().assertContent().is("foo=bar&bar=baz");
-	}
-
 	@Test
 	public void a03_formData_NameValuePair() throws Exception {
 		client().formData(part("foo","bar")).build().post("/formData").formData(part("foo","baz")).run().assertContent().is("foo=bar&foo=baz");
@@ -109,14 +100,6 @@ public class RestClient_FormData_Test {
 		client().formData(part("foo",l,T_ARRAY_PIPES).serializer(UonSerializer.DEFAULT)).build().post("/formData").run().assertContent().asString().asUrlDecode().is("foo=@(bar,baz)");
 	}
 
-	@Test
-	public void a08_formData_AddFlag_String_Object_Schema() throws Exception {
-		List<String> l = list("qux","quux");
-		client().formData("foo","bar").build().post("/formData").formData(APPEND,part("foo",l,T_ARRAY_PIPES)).run().assertContent().asString().asUrlDecode().is("foo=bar&foo=qux|quux");
-		client().formData("foo","bar").build().post("/formData").formData(PREPEND,part("foo",l,T_ARRAY_PIPES)).run().assertContent().asString().asUrlDecode().is("foo=qux|quux&foo=bar");
-		client().formData("foo","bar").build().post("/formData").formData(SET,part("foo",l,T_ARRAY_PIPES)).run().assertContent().asString().asUrlDecode().is("foo=qux|quux");
-	}
-
 	@Test
 	public void a09_formData_String_Supplier() throws Exception {
 		TestSupplier s = TestSupplier.of(null);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
index e42a7d1b4..2e980fc63 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
@@ -19,16 +19,12 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.junit.runners.MethodSorters.*;
 import static java.time.format.DateTimeFormatter.*;
 import static java.time.temporal.ChronoUnit.*;
-import static org.apache.juneau.ListOperation.*;
-
 import java.time.*;
 import java.util.*;
 
-import org.apache.http.Header;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.marshall.*;
-import org.apache.juneau.oapi.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.config.*;
 import org.apache.juneau.rest.logging.*;
@@ -101,39 +97,6 @@ public class RestClient_Headers_Test {
 		checkFooClient().headers(stringHeader("Foo","bar")).build().get("/headers").header(stringHeader("Foo","baz")).run().assertContent().is("['bar','baz']");
 	}
 
-	@Test
-	public void a06_headers_Objects() throws Exception {
-		checkFooClient().headers((Header)null).build().get("/headers").headers((Header)null).run().assertContent().is("[]");
-		checkFooClient().headers(header("Foo","bar"),header("Baz","baz")).build().get("/headers").headers(APPEND,header("Foo","baz"),header("Baz","quux")).run().assertContent().is("['bar','baz']");
-		checkFooClient().headers(header("Foo","Bar",null).serializer(OpenApiSerializer.DEFAULT)).build().get("/headers").headers(APPEND,serializedHeader("Foo","Baz").serializer(OpenApiSerializer.DEFAULT)).run().assertContent().is("['Bar','Baz']");
-		checkFooClient().headers(serializedHeader("Foo",()->"Bar").serializer(OpenApiSerializer.DEFAULT)).build().get("/headers").headers(APPEND,serializedHeader("Foo",()->"Baz").serializer(OpenApiSerializer.DEFAULT)).run().assertContent().is("['Bar','Baz']");
-		checkClient("f").build().get("/headers").headersBean(bean).run().assertContent().is("['1']");
-
-		checkFooClient().headers(header("Foo",null,null).skipIfEmpty().schema(HttpPartSchema.create()._default("bar").build())).build().get("/headers").run().assertContent().is("['bar']");
-	}
-
-	@Test
-	public void a07_header_AddFlag_String_Object() throws Exception {
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(APPEND,header("Foo","baz")).run().assertContent().is("['bar','baz']");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(SET,header("Foo","baz")).run().assertContent().is("['baz']");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(PREPEND,header("Foo","baz")).run().assertContent().is("['baz','bar']");
-	}
-
-	@Test
-	public void a07_header_AddFlag_String_Object_Schema() throws Exception {
-		List<String> l = list("baz","qux");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(APPEND,header("Foo",l,T_ARRAY_PIPES)).run().assertContent().is("['bar','baz|qux']");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(SET,header("Foo",l,T_ARRAY_PIPES)).run().assertContent().is("['baz|qux']");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(PREPEND,header("Foo",l,T_ARRAY_PIPES)).run().assertContent().is("['baz|qux','bar']");
-	}
-
-	@Test
-	public void a07_headers_AddFlag_Objects() throws Exception {
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(APPEND,header("Foo","baz")).run().assertContent().is("['bar','baz']");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(SET,header("Foo","baz")).run().assertContent().is("['baz']");
-		checkFooClient().header("Foo","bar").build().get("/headers").headers(PREPEND,header("Foo","baz")).run().assertContent().is("['baz','bar']");
-	}
-
 	@Test
 	public void a08_header_String_Supplier() throws Exception {
 		TestSupplier s = TestSupplier.of("foo");
@@ -188,56 +151,14 @@ public class RestClient_Headers_Test {
 	public void b01_standardHeaders() throws Exception {
 		checkClient("Accept").accept("text/plain").build().get("/headers").run().assertContent().is("['text/plain']");
 		checkClient("Accept-Charset").acceptCharset("UTF-8").build().get("/headers").run().assertContent().is("['UTF-8']");
-		checkClient("Accept-Encoding").acceptEncoding("identity").build().get("/headers").run().assertContent().is("['identity']");
-		checkClient("Accept-Language").acceptLanguage("en").build().get("/headers").run().assertContent().is("['en']");
-		checkClient("Authorization").authorization("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("Cache-Control").cacheControl("none").build().get("/headers").run().assertContent().is("['none']");
 		checkClient("Client-Version").clientVersion("1").build().get("/headers").run().assertContent().is("['1']");
-		checkClient("Connection").connection("foo").build().get("/headers").run().assertContent().is("['foo']");
 		checkClient("Content-Type").contentType("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("Content-Encoding").contentEncoding("identity").build().get("/headers").run().assertContent().is("['identity']");
-		checkClient("From").from("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("Host").host("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("Max-Forwards").maxForwards(10).build().get("/headers").run().assertContent().is("['10']");
 		checkClient("No-Trace").noTrace().build().get("/headers").run().assertContent().is("['true','true']");
-		checkClient("Origin").origin("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("Pragma").pragma("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("Proxy-Authorization").proxyAuthorization("foo").build().get("/headers").run().assertContent().is("['foo']");
-		checkClient("User-Agent").userAgent("foo").build().get("/headers").run().assertContent().is("['foo']");
 
 		checkClient("Accept").build().get("/headers").accept("text/plain").run().assertContent().is("['text/plain']");
 		checkClient("Accept-Charset").build().get("/headers").acceptCharset("UTF-8").run().assertContent().is("['UTF-8']");
-		checkClient("Accept-Encoding").build().get("/headers").acceptEncoding("identity").run().assertContent().is("['identity']");
-		checkClient("Accept-Language").build().get("/headers").acceptLanguage("en").run().assertContent().is("['en']");
-		checkClient("Authorization").build().get("/headers").authorization("foo").run().assertContent().is("['foo']");
-		checkClient("Cache-Control").build().get("/headers").cacheControl("none").run().assertContent().is("['none']");
-		checkClient("Client-Version").build().get("/headers").clientVersion("1").run().assertContent().is("['1']");
-		checkClient("Connection").build().get("/headers").connection("foo").run().assertContent().is("['foo']");
-		checkClient("Content-Length").build().get("/headers").contentLength(123l).run().assertContent().is("['123']");
 		checkClient("Content-Type").build().get("/headers").contentType("foo").run().assertContent().is("['foo']");
-		checkClient("Content-Encoding").build().get("/headers").contentEncoding("identity").run().assertContent().is("['identity']");
-		checkClient("Date").build().get("/headers").date(ZONEDDATETIME).run().assertContent().is("['"+PARSEDZONEDDATETIME+"']");
-		checkClient("Expect").build().get("/headers").expect("foo").run().assertContent().is("['foo']");
-		checkClient("Forwarded").build().get("/headers").forwarded("foo").run().assertContent().is("['foo']");
-		checkClient("From").build().get("/headers").from("foo").run().assertContent().is("['foo']");
-		checkClient("Host").build().get("/headers").hostHeader("foo").run().assertContent().is("['foo']");
-		checkClient("If-Match").build().get("/headers").ifMatch("\"foo\"").run().assertContent().is("['\"foo\"']");
-		checkClient("If-Modified-Since").build().get("/headers").ifModifiedSince(ZONEDDATETIME).run().assertContent().is("['"+PARSEDZONEDDATETIME+"']");
-		checkClient("If-None-Match").build().get("/headers").ifNoneMatch("\"foo\"").run().assertContent().is("['\"foo\"']");
-		checkClient("If-Range").build().get("/headers").ifRange("\"foo\"").run().assertContent().is("['\"foo\"']");
-		checkClient("If-Unmodified-Since").build().get("/headers").ifUnmodifiedSince(ZONEDDATETIME).run().assertContent().is("['"+PARSEDZONEDDATETIME+"']");
-		checkClient("Max-Forwards").build().get("/headers").maxForwards(10).run().assertContent().is("['10']");
 		checkClient("No-Trace").build().get("/headers").noTrace().run().assertContent().is("['true','true']");
-		checkClient("Origin").build().get("/headers").origin("foo").run().assertContent().is("['foo']");
-		checkClient("Pragma").build().get("/headers").pragma("foo").run().assertContent().is("['foo']");
-		checkClient("Proxy-Authorization").build().get("/headers").proxyAuthorization("foo").run().assertContent().is("['foo']");
-		checkClient("Range").build().get("/headers").range("foo").run().assertContent().is("['foo']");
-		checkClient("Referer").build().get("/headers").referer("foo").run().assertContent().is("['foo']");
-		checkClient("TE").build().get("/headers").te("foo").run().assertContent().is("['foo']");
-		checkClient("User-Agent").build().get("/headers").userAgent("foo").run().assertContent().is("['foo']");
-		checkClient("Upgrade").build().get("/headers").upgrade("foo").run().assertContent().is("['foo']");
-		checkClient("Via").build().get("/headers").via("foo").run().assertContent().is("['foo']");
-		checkClient("Warning").build().get("/headers").warning("foo").run().assertContent().is("['foo']");
 	}
 
 	@Test
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Query_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Query_Test.java
index 23cf7b72e..16b7ec972 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Query_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Query_Test.java
@@ -16,7 +16,6 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.httppart.HttpPartSchema.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.junit.runners.MethodSorters.*;
-import static org.apache.juneau.ListOperation.*;
 import static org.apache.juneau.http.HttpParts.*;
 import static org.apache.juneau.testutils.StreamUtils.*;
 
@@ -66,23 +65,6 @@ public class RestClient_Query_Test {
 		client().queryData(part("foo",l,T_ARRAY_PIPES).serializer(UonSerializer.DEFAULT)).build().get("/query").run().assertContent().asString().asUrlDecode().is("foo=@(bar,baz)");
 	}
 
-	@Test
-	public void a04_query_AddFlag_String_Object() throws Exception {
-		client().queryData("foo","bar").build().get("/query").queryData(PREPEND,part("foo","baz")).run().assertContent().is("foo=baz&foo=bar");
-		client().queryData("foo","bar").build().get("/query").queryData(PREPEND,part("foo","")).run().assertContent().is("foo=&foo=bar");
-		client().queryData("foo","bar").build().get("/query").queryData(PREPEND,part("foo",null)).run().assertContent().is("foo=bar");
-		client().queryData("foo","bar").build().get("/query").queryData(SET,part("foo","baz")).run().assertContent().is("foo=baz");
-		client().queryData("foo","bar").build().get("/query").queryData(SET,part("foo",null)).run().assertContent().is("");
-		client().queryData("foo","bar").build().get("/query").queryData(SET,part("foo","")).run().assertContent().is("foo=");
-		client().queryData("bar","baz").build().get("/query").queryData(SET,part("foo","bar")).run().assertContent().is("bar=baz&foo=bar");
-	}
-
-	@Test
-	public void a05_query_AddFlag_String_Object_Schema() throws Exception {
-		List<String> l = list("baz","qux");
-		client().queryData("foo","bar").build().get("/query").queryData(PREPEND,part("foo",l,T_ARRAY_PIPES)).run().assertContent().asString().asUrlDecode().is("foo=baz|qux&foo=bar");
-	}
-
 	@Test
 	public void a06_query_String_Supplier() throws Exception {
 		List<String> l1 = list("foo","bar"), l2 = list("bar","baz");
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
index 8d3467071..6f608497a 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Test.java
@@ -232,7 +232,7 @@ public class RestClient_Test {
 
 	@Test
 	public void c05_httpClient_httpClientBuilderMethods() {
-		RestClient.create().disableRedirectHandling().redirectStrategy(DefaultRedirectStrategy.INSTANCE).defaultCookieSpecRegistry(null).sslHostnameVerifier(null).publicSuffixMatcher(null).sslContext(null).sslSocketFactory(null).maxConnTotal(10).maxConnPerRoute(10).defaultSocketConfig(null).defaultConnectionConfig(null).connectionTimeToLive(100,TimeUnit.DAYS).connectionManager(null).connectionManagerShared(true).connectionReuseStrategy(null).keepAliveStrategy(null).targetAuthenticationStrategy [...]
+		RestClient.create().disableRedirectHandling().redirectStrategy(DefaultRedirectStrategy.INSTANCE).defaultCookieSpecRegistry(null).sslHostnameVerifier(null).publicSuffixMatcher(null).sslContext(null).sslSocketFactory(null).maxConnTotal(10).maxConnPerRoute(10).defaultSocketConfig(null).defaultConnectionConfig(null).connectionTimeToLive(100,TimeUnit.DAYS).connectionManager(null).connectionManagerShared(true).connectionReuseStrategy(null).keepAliveStrategy(null).targetAuthenticationStrategy [...]
 	}
 
 	@SuppressWarnings("deprecation")