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 2021/11/07 21:54:57 UTC

[juneau] branch master updated: Javadocs and RestResponse refactoring.

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 5df6b06  Javadocs and RestResponse refactoring.
5df6b06 is described below

commit 5df6b0610bbdec8b196ba2c55068e8d7ce85b87a
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sun Nov 7 16:54:31 2021 -0500

    Javadocs and RestResponse refactoring.
---
 .../03.RestOpAnnotatedMethods.html                 |   5 +-
 ...tmRequestBody.html => 01.RestmRequestBody.html} |   0
 .../01.RestmRestRequest.html                       |  43 -------
 ...estHeaders.html => 02.RestmRequestHeaders.html} |   0
 .../02.RestmRestResponse.html                      |  37 ------
 ...ributes.html => 03.RestmRequestAttributes.html} |   0
 ...RequestQuery.html => 04.RestmRequestQuery.html} |   0
 ...tFormData.html => 05.RestmRequestFormData.html} |   0
 ...athMatch.html => 06.RestmRequestPathMatch.html} |   0
 ...erResource.html => 07.RestmReaderResource.html} |   0
 ...amResource.html => 08.RestmStreamResource.html} |   0
 ...11.RestmMatchers.html => 09.RestmMatchers.html} |   0
 ...onses.html => 10.RestmPredefinedResponses.html} |   0
 ...ans.html => 11.RestmPredefinedHelperBeans.html} |   0
 juneau-doc/src/main/javadoc/overview.html          | 127 ++++++-------------
 juneau-doc/src/main/javadoc/resources/docs.txt     |   2 -
 .../java/org/apache/juneau/rest/RestRequest.java   | 115 +++++++++++++++---
 .../java/org/apache/juneau/rest/RestResponse.java  | 134 ++++++++++-----------
 .../apache/juneau/rest/args/ResponseHeaderArg.java |  21 ++--
 .../juneau/rest/annotation/Rest_RVars_Test.java    |   6 +-
 .../client/RestClient_Config_RestClient_Test.java  |   2 +-
 21 files changed, 216 insertions(+), 276 deletions(-)

diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods.html
index a4d003c..f91af3c 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods.html
@@ -607,4 +607,7 @@
 	}
 </p>
 
-
+<ul class='seealso'>
+	<li class='jc'>{@link oajr.RestRequest}
+	<li class='jc'>{@link oajr.RestResponse}
+</ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestBody.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestBody.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestBody.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestBody.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRestRequest.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRestRequest.html
deleted file mode 100644
index 00d0200..0000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRestRequest.html
+++ /dev/null
@@ -1,43 +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:'RestRequest', flags:'todo'}
-
-<p>
-	The {@link oajr.RestRequest} object is an extension of the <l>HttpServletRequest</l> class
-	with various built-in convenience methods for use in building REST interfaces.
-	It can be accessed by passing it as a parameter on your REST Java method:
-</p>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public</jk> Object myMethod(RestRequest <jv>req</jv>) {...}			
-</p>
-<p>
-	There are many useful methods on this object, but the main ones are shown below:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>{@link oajr.RestRequest} <jk>extends</jk> HttpServletRequest</c>
-	<ul>
-		<li class='jm'>{@link oajr.RestRequest#getHeaders() getHeaders()} - HTTP request headers.
-		<li class='jm'>{@link oajr.RestRequest#getQueryParams() getQueryParams()} - Query parameters.
-		<li class='jm'>{@link oajr.RestRequest#getFormParams() getFormParams()} - Form-data parameters.
-		<li class='jm'>{@link oajr.RestRequest#getPathParams() getPathParams()} - Path match variables.
-		<li class='jm'>{@link oajr.RestRequest#getBody() getBody()} - HTTP request body.
-		<li class='jm'>{@link oajr.RestRequest#getSwagger() getSwagger()} - Generated Swagger information.
-		<li class='jm'>{@link oajr.RestRequest#getConfig() getConfig()} - External configuration API.
-		<li class='jm'>{@link oajr.RestRequest#getVarResolverSession() getVarResolverSession()} - String variable resolver.
-		<li class='jm'>{@link oajr.RestRequest#getMessages() getMessages()} - Localized messages.
-	</ul>
-</ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestHeaders.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRequestHeaders.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestHeaders.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRequestHeaders.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRestResponse.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRestResponse.html
deleted file mode 100644
index ca32503..0000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRestResponse.html
+++ /dev/null
@@ -1,37 +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:'RestResponse', flags:'todo'}
-
-<p>
-	The {@link oajr.RestResponse} object is an extension of the <l>HttpServletResponse</l> class
-	with various built-in convenience methods for use in building REST interfaces.
-	It can be accessed by passing it as a parameter on your REST Java method:
-</p>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public</jk> Object myMethod(RestResponse <jv>req</jv>) {...}			
-</p>
-<p>
-	Some important methods on this class are:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>{@link oajr.RestResponse} <jk>extends</jk> HttpServletResponse</c>
-	<ul>
-		<li class='jm'>{@link oajr.RestResponse#setOutput(Object) setOutput(Object)} - Set response output programmatically.
-		<li class='jm'>{@del RestResponse#getHtmlDocBuilder()} - Set HTTP page contents programmatically.
-		<li class='jm'>{@link oajr.RestResponse#getDirectWriter(String) getDirectWriter(String)} - Direct access to underlying response writer.
-	</ul>
-</ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestAttributes.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestAttributes.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestAttributes.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestAttributes.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmRequestQuery.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestQuery.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmRequestQuery.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestQuery.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmRequestFormData.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestFormData.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmRequestFormData.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestFormData.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmRequestPathMatch.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmRequestPathMatch.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmRequestPathMatch.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmRequestPathMatch.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmReaderResource.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmReaderResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmReaderResource.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmReaderResource.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmStreamResource.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmStreamResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmStreamResource.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmStreamResource.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/11.RestmMatchers.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmMatchers.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/11.RestmMatchers.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmMatchers.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/12.RestmPredefinedResponses.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmPredefinedResponses.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/12.RestmPredefinedResponses.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmPredefinedResponses.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/13.RestmPredefinedHelperBeans.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/11.RestmPredefinedHelperBeans.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/13.RestmPredefinedHelperBeans.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/11.RestmPredefinedHelperBeans.html
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 2331fc7..1237842 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -349,8 +349,6 @@
 		</ol>
 		<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods'>@RestOp-Annotated Methods</a><span class='update'>updated: <b>9.0.0</b></span></p>
 		<ol>
-			<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest'>RestRequest</a><span class='update'><b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse'>RestResponse</a><span class='update'><b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody'>RequestBody</a><span class='update'><b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders'>RequestHeaders</a><span class='update'><b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes'>RequestAttributes</a><span class='update'>created: 8.1.0, <b><red>todo</red></b></span></p>
@@ -15478,68 +15476,15 @@
 	}
 </p>
 
-<!-- ==================================================================================================== -->
-
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest'>6.3.1 - RestRequest</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.1 - juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest -->
-<p>
-	The {@link org.apache.juneau.rest.RestRequest} object is an extension of the <l>HttpServletRequest</l> class
-	with various built-in convenience methods for use in building REST interfaces.
-	It can be accessed by passing it as a parameter on your REST Java method:
-</p>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public</jk> Object myMethod(RestRequest <jv>req</jv>) {...}			
-</p>
-<p>
-	There are many useful methods on this object, but the main ones are shown below:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>{@link org.apache.juneau.rest.RestRequest} <jk>extends</jk> HttpServletRequest</c>
-	<ul>
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getHeaders() getHeaders()} - HTTP request headers.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getQueryParams() getQueryParams()} - Query parameters.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getFormParams() getFormParams()} - Form-data parameters.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getPathParams() getPathParams()} - Path match variables.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getBody() getBody()} - HTTP request body.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getSwagger() getSwagger()} - Generated Swagger information.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getConfig() getConfig()} - External configuration API.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getVarResolverSession() getVarResolverSession()} - String variable resolver.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getMessages() getMessages()} - Localized messages.
-	</ul>
-</ul>
-</div><!-- END: 6.3.1 - juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest -->
-
-<!-- ==================================================================================================== -->
-
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse'>6.3.2 - RestResponse</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.2 - juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse -->
-<p>
-	The {@link org.apache.juneau.rest.RestResponse} object is an extension of the <l>HttpServletResponse</l> class
-	with various built-in convenience methods for use in building REST interfaces.
-	It can be accessed by passing it as a parameter on your REST Java method:
-</p>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public</jk> Object myMethod(RestResponse <jv>req</jv>) {...}			
-</p>
-<p>
-	Some important methods on this class are:
-</p>
-<ul class='javatree'>
-	<li class='jc'><c>{@link org.apache.juneau.rest.RestResponse} <jk>extends</jk> HttpServletResponse</c>
-	<ul>
-		<li class='jm'>{@link org.apache.juneau.rest.RestResponse#setOutput(Object) setOutput(Object)} - Set response output programmatically.
-		<li class='jm'>{@del RestResponse#getHtmlDocBuilder()} - Set HTTP page contents programmatically.
-		<li class='jm'>{@link org.apache.juneau.rest.RestResponse#getDirectWriter(String) getDirectWriter(String)} - Direct access to underlying response writer.
-	</ul>
+<ul class='seealso'>
+	<li class='jc'>{@link org.apache.juneau.rest.RestRequest}
+	<li class='jc'>{@link org.apache.juneau.rest.RestResponse}
 </ul>
-</div><!-- END: 6.3.2 - juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody'>6.3.3 - RequestBody</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.3 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody'>6.3.1 - RequestBody</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.1 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody -->
 <p>
 	The {@link org.apache.juneau.rest.RequestBody} object is the API for accessing the body of an HTTP request.
 	It can be accessed by passing it as a parameter on your REST Java method:
@@ -15576,12 +15521,12 @@
 <ul class='seealso'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Body}
 </ul>
-</div><!-- END: 6.3.3 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody -->
+</div><!-- END: 6.3.1 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders'>6.3.4 - RequestHeaders</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.4 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders'>6.3.2 - RequestHeaders</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.2 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders -->
 <p>
 	The {@link org.apache.juneau.rest.RequestHeaders} object is the API for accessing the headers of an HTTP request.
 	It can be accessed by passing it as a parameter on your REST Java method:
@@ -15623,12 +15568,12 @@
 <ul class='seealso'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Header}
 </ul>
-</div><!-- END: 6.3.4 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders -->
+</div><!-- END: 6.3.2 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes'>6.3.5 - RequestAttributes</a><span class='update'>created: 8.1.0, <b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.5 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes'>6.3.3 - RequestAttributes</a><span class='update'>created: 8.1.0, <b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.3 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes -->
 <p>
 	The {@link org.apache.juneau.rest.RequestAttributes} object is the API for accessing the standard servlet attributes on an HTTP request 
 	(i.e. {@link javax.servlet.ServletRequest#getAttribute(String)}.
@@ -15658,12 +15603,12 @@
 	Modifications made to request attributes through the <c>RequestAttributes</c> bean are automatically reflected in
 	the underlying servlet request attributes making it possible to mix the usage of both APIs.
 </p>
-</div><!-- END: 6.3.5 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes -->
+</div><!-- END: 6.3.3 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery'>6.3.6 - RequestQuery</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.6 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery'>6.3.4 - RequestQuery</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.4 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery -->
 <p>
 	The {@link org.apache.juneau.rest.RequestQuery} object is the API for accessing the GET query parameters of an HTTP request.
 	It can be accessed by passing it as a parameter on your REST Java method:
@@ -15710,12 +15655,12 @@
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Query}
 	<li class='ja'>{@link org.apache.juneau.http.annotation.HasQuery}
 </ul>
-</div><!-- END: 6.3.6 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery -->
+</div><!-- END: 6.3.4 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData'>6.3.7 - RequestFormData</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.7 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData'>6.3.5 - RequestFormData</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.5 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData -->
 <p>
 	The {@link org.apache.juneau.rest.RequestFormData} object is the API for accessing the HTTP request body as form data.
 	It can be accessed by passing it as a parameter on your REST Java method:
@@ -15757,12 +15702,12 @@
 	<li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
 	<li class='ja'>{@link org.apache.juneau.http.annotation.HasFormData}
 </ul>
-</div><!-- END: 6.3.7 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData -->
+</div><!-- END: 6.3.5 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch'>6.3.8 - RequestPathMatch</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.8 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch'>6.3.6 - RequestPathMatch</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.6 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch -->
 <p>
 	The {@link org.apache.juneau.rest.RequestPath} object is the API for accessing the matched variables
 	and remainder on the URL path.
@@ -15801,12 +15746,12 @@
 <ul class='seealso'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Path}
 </ul>
-</div><!-- END: 6.3.8 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch -->
+</div><!-- END: 6.3.6 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource' id='juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource'>6.3.9 - ReaderResource</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.9 - juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource' id='juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource'>6.3.7 - ReaderResource</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.7 - juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource -->
 <p>
 	The {@del ReaderResource} class is a convenience object for defining thread-safe
 	reusable character-based responses.
@@ -15832,12 +15777,12 @@
 			.build();
 	}
 </p>
-</div><!-- END: 6.3.9 - juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource -->
+</div><!-- END: 6.3.7 - juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource' id='juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource'>6.3.10 - StreamResource</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.10 - juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource' id='juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource'>6.3.8 - StreamResource</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.8 - juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource -->
 <p>
 	The {@del org.apache.juneau.http.StreamResource} class is the binary equivalent to the {@del ReaderResource} object.
 	In essence, it's a container for binary data with optional response headers.
@@ -15859,12 +15804,12 @@
 			.build();
 	}
 </p>
-</div><!-- END: 6.3.10 - juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource -->
+</div><!-- END: 6.3.8 - juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers' id='juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers'>6.3.11 - @RestOp(matchers)</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.11 - juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers' id='juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers'>6.3.9 - @RestOp(matchers)</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.9 - juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers -->
 <p>
 	{@link org.apache.juneau.rest.RestMatcher RestMatchers} are used to allow multiple Java methods to be 
 	tied to the same HTTP method and path, but differentiated by some request attribute such as a specific 
@@ -15918,12 +15863,12 @@
 	<li class='jc'>{@link org.apache.juneau.rest.matchers.MultipartFormDataMatcher}
 	<li class='jc'>{@link org.apache.juneau.rest.matchers.UrlEncodedFormMatcher}
 </ul>
-</div><!-- END: 6.3.11 - juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers -->
+</div><!-- END: 6.3.9 - juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses' id='juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses'>6.3.12 - Predefined Responses</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.12 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses' id='juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses'>6.3.10 - Predefined Responses</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.10 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses -->
 <p>
 	Predefined response beans are provided for all standard HTTP responses.
 	These can be used as-is or extended to provide customized HTTP responses. 
@@ -16033,12 +15978,12 @@
 		<jk>return new</jk> SeeOther(<js>"servlet:/pets"</js>);  
 	}
 </p>
-</div><!-- END: 6.3.12 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses -->
+</div><!-- END: 6.3.10 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses -->
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans' id='juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans'>6.3.13 - Predefined Helper Beans</a><span class='update'><b><red>todo</red></b></span></h4>
-<div class='topic'><!-- START: 6.3.13 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans' id='juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans'>6.3.11 - Predefined Helper Beans</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.11 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans -->
 <p>
 	The {@link org.apache.juneau.rest.helper} package contains several predefined beans to help when constructing
 	REST interfaces.
@@ -16248,7 +16193,7 @@
 <p>
 	One distinction is that the former defines the description <js>"Redirect to servlet root"</js> in the generated Swagger documentation.
 </p>
-</div><!-- END: 6.3.13 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans -->
+</div><!-- END: 6.3.11 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans -->
 </div><!-- END: 6.3 - juneau-rest-server.RestOpAnnotatedMethods -->
 
 <!-- ==================================================================================================== -->
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt
index bda008a..74d3f1e 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -295,8 +295,6 @@ RestmRequestFormData = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFo
 RestmRequestHeaders = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders, Overview > juneau-rest-server > @RestOp-Annotated Methods > RequestHeaders
 RestmRequestPathMatch = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch, Overview > juneau-rest-server > @RestOp-Annotated Methods > RequestPathMatch
 RestmRequestQuery = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery, Overview > juneau-rest-server > @RestOp-Annotated Methods > RequestQuery
-RestmRestRequest = #juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest, Overview > juneau-rest-server > @RestOp-Annotated Methods > RestRequest
-RestmRestResponse = #juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse, Overview > juneau-rest-server > @RestOp-Annotated Methods > RestResponse
 RestmStreamResource = #juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource, Overview > juneau-rest-server > @RestOp-Annotated Methods > StreamResource
 Security = #Security, Overview > Security Best-Practices
 SecurityMarshall = #Security.SecurityMarshall, Overview > Security Best-Practices > juneau-marshall
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index ef6c074..9f5bd54 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -87,24 +87,107 @@ import org.apache.juneau.utils.*;
  * Represents an HTTP request for a REST resource.
  *
  * <p>
- * Equivalent to {@link HttpServletRequest} except with some additional convenience methods.
+ * 	The {@link RestRequest} object is an extension of the <l>HttpServletRequest</l> class
+ * 	with various built-in convenience methods for use in building REST interfaces.
+ * 	It can be accessed by passing it as a parameter on your REST Java method:
+ * </p>
  *
- * <p>
- * For reference, given the URL <js>"http://localhost:9080/contextRoot/servletPath/foo?bar=baz#qux"</js>, the
- * following methods return the following values....
- * <table class='styled'>
- * 	<tr><th>Method</th><th>Value</th></tr>
- * 	<tr><td>{@code getContextPath()}</td><td>{@code /contextRoot}</td></tr>
- * 	<tr><td>{@code getPathInfo()}</td><td>{@code /foo}</td></tr>
- * 	<tr><td>{@code getPathTranslated()}</td><td>{@code path-to-deployed-war-on-filesystem/foo}</td></tr>
- * 	<tr><td>{@code getQueryString()}</td><td>{@code bar=baz}</td></tr>
- * 	<tr><td>{@code getRequestURI()}</td><td>{@code /contextRoot/servletPath/foo}</td></tr>
- * 	<tr><td>{@code getRequestURL()}</td><td>{@code http://localhost:9080/contextRoot/servletPath/foo}</td></tr>
- * 	<tr><td>{@code getServletPath()}</td><td>{@code /servletPath}</td></tr>
- * </table>
+ * <p class='bcode w800'>
+ * 	<ja>@RestPost</ja>(...)
+ * 	<jk>public</jk> Object myMethod(RestRequest <jv>req</jv>) {...}
+ * </p>
  *
- * <ul class='seealso'>
- * 	<li class='link'>{@doc RestmRestRequest}
+ * <p>
+ * 	The primary methods on this class are shown below:
+ * </p>
+ * <ul class='javatree'>
+ * 	<li class='jc'>{@link RestRequest}
+ * 	<ul class='spaced-list'>
+ * 		<li>Methods for accessing the request body:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestRequest#getBody() getBody()}
+ * 			<li class='jm'>{@link RestRequest#getInputStream() getInputStream()}
+ * 			<li class='jm'>{@link RestRequest#getReader() getReader()}
+ * 		</ul>
+ * 		<li>Methods for accessing HTTP parts:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestRequest#containsFormParam(String) containsFormParam(String)}
+ * 			<li class='jm'>{@link RestRequest#containsHeader(String) containsHeader(String)}
+ * 			<li class='jm'>{@link RestRequest#containsQueryParam(String) containsQueryParam(String)}
+ * 			<li class='jm'>{@link RestRequest#getHeader(Class) getHeader(Class)}
+ * 			<li class='jm'>{@link RestRequest#getHeader(String) getHeader(String)}
+ * 			<li class='jm'>{@link RestRequest#getHeaders() getHeaders()}
+ * 			<li class='jm'>{@link RestRequest#getFormParam(Class) getFormParam(Class)}
+ * 			<li class='jm'>{@link RestRequest#getFormParam(String) getFormParam(String)}
+ * 			<li class='jm'>{@link RestRequest#getFormParams() getFormParams()}
+ * 			<li class='jm'>{@link RestRequest#getPathParam(Class) getPathParam(Class)}
+ * 			<li class='jm'>{@link RestRequest#getPathParam(String) getPathParam(String)}
+ * 			<li class='jm'>{@link RestRequest#getPathParams() getPathParams()}
+ * 			<li class='jm'>{@link RestRequest#getPathRemainder() getPathRemainder()}
+ * 			<li class='jm'>{@link RestRequest#getQueryParam(Class) getQueryParam(Class)}
+ * 			<li class='jm'>{@link RestRequest#getQueryParam(String) getQueryParam(String)}
+ * 			<li class='jm'>{@link RestRequest#getQueryParams() getQueryParams()}
+ * 			<li class='jm'>{@link RestRequest#getQueryString() getQueryString()}
+ * 		</ul>
+ * 		<li>Methods for localization:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestRequest#getLocale() getLocale()}
+ * 			<li class='jm'>{@link RestRequest#getMessage(String,Object...) getMessage(String,Object...)}
+ * 			<li class='jm'>{@link RestRequest#getMessages() getMessages()}
+ * 			<li class='jm'>{@link RestRequest#getTimeZone() getTimeZone()}
+ * 		</ul>
+ * 		<li>Methods for accessing static files:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestRequest#getFileFinder() getFileFinder()}
+ * 			<li class='jm'>{@link RestRequest#getStaticFiles() getStaticFiles()}
+ * 			<li class='jm'>{@link RestRequest#getVarResolverSession() getVarResolverSession()}
+ * 		</ul>
+ * 		<li>Methods for assertions:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestRequest#assertBody() assertBody()}
+ * 			<li class='jm'>{@link RestRequest#assertCharset() assertCharset()}
+ * 			<li class='jm'>{@link RestRequest#assertFormParam(String) assertFormParam(String)}
+ * 			<li class='jm'>{@link RestRequest#assertHeader(String) assertHeader(String)}
+ * 			<li class='jm'>{@link RestRequest#assertQueryParam(String) assertQueryParam(String)}
+ * 			<li class='jm'>{@link RestRequest#assertRequestLine() assertRequestLine()}
+ * 		</ul>
+ * 		<li>Other:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestRequest#getAttribute(String) getAttribute(String)}
+ * 			<li class='jm'>{@link RestRequest#getAttributes() getAttributes()}
+ * 			<li class='jm'>{@link RestRequest#getAuthorityPath() getAuthorityPath()}
+ * 			<li class='jm'>{@link RestRequest#getBeanSession() getBeanSession()}
+ * 			<li class='jm'>{@link RestRequest#getCharset() getCharset()}
+ * 			<li class='jm'>{@link RestRequest#getConfig() getConfig()}
+ * 			<li class='jm'>{@link RestRequest#getContext() getContext()}
+ * 			<li class='jm'>{@link RestRequest#getContextPath() getContextPath()}
+ * 			<li class='jm'>{@link RestRequest#getHttpServletRequest() getHttpServletRequest()}
+ * 			<li class='jm'>{@link RestRequest#getMethod() getMethod()}
+ * 			<li class='jm'>{@link RestRequest#getOpContext() getOpContext()}
+ * 			<li class='jm'>{@link RestRequest#getOperationSwagger() getOperationSwagger()}
+ * 			<li class='jm'>{@link RestRequest#getPartParserSession() getPartParserSession()}
+ * 			<li class='jm'>{@link RestRequest#getPartSerializerSession() getPartSerializerSession()}
+ * 			<li class='jm'>{@link RestRequest#getPathInfo() getPathInfo()}
+ * 			<li class='jm'>{@link RestRequest#getProtocolVersion() getProtocolVersion()}
+ * 			<li class='jm'>{@link RestRequest#getRequest(Class) getRequest(Class)}
+ * 			<li class='jm'>{@link RestRequest#getRequestLine() getRequestLine()}
+ * 			<li class='jm'>{@link RestRequest#getRequestURI() getRequestURI()}
+ * 			<li class='jm'>{@link RestRequest#getRequestURL() getRequestURL()}
+ * 			<li class='jm'>{@link RestRequest#getServletPath() getServletPath()}
+ * 			<li class='jm'>{@link RestRequest#getSession() getSession()}
+ * 			<li class='jm'>{@link RestRequest#getSwagger() getSwagger()}
+ * 			<li class='jm'>{@link RestRequest#getUriContext() getUriContext()}
+ * 			<li class='jm'>{@link RestRequest#getUriResolver() getUriResolver()}
+ * 			<li class='jm'>{@link RestRequest#isDebug() isDebug()}
+ * 			<li class='jm'>{@link RestRequest#isPlainText() isPlainText()}
+ * 			<li class='jm'>{@link RestRequest#isUserInRole(String) isUserInRole(String)}
+ * 			<li class='jm'>{@link RestRequest#setAttribute(String,Object) setAttribute(String,Object)}
+ * 			<li class='jm'>{@link RestRequest#setCharset(Charset) setCharset(Charset)}
+ * 			<li class='jm'>{@link RestRequest#setDebug() setDebug()}
+ * 			<li class='jm'>{@link RestRequest#setException(Throwable) setException(Throwable)}
+ * 			<li class='jm'>{@link RestRequest#setNoTrace() setNoTrace()}
+ * 		</ul>
+ * 	</ul>
  * </ul>
  */
 @SuppressWarnings({ "unchecked", "unused" })
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index acc4570..6496634 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -41,23 +41,63 @@ import org.apache.juneau.serializer.*;
  * Represents an HTTP response for a REST resource.
  *
  * <p>
- * Essentially an extended {@link HttpServletResponse} with some special convenience methods that allow you to easily
- * output POJOs as responses.
- *
- * <p>
- * Since this class extends {@link HttpServletResponse}, developers are free to use these convenience methods, or
- * revert to using lower level methods like any other servlet response.
+ * 	The {@link RestResponse} object is an extension of the <l>HttpServletResponse</l> class
+ * 	with various built-in convenience methods for use in building REST interfaces.
+ * 	It can be accessed by passing it as a parameter on your REST Java method:
+ * </p>
  *
- * <h5 class='section'>Example:</h5>
  * <p class='bcode w800'>
- * 	<ja>@RestGet</ja>
- * 	<jk>public void</jk> doGet(RestResponse <jv>res</jv>) {
- * 		<jv>res</jv>.setOutput(<js>"Simple string response"</js>);
- * 	}
+ * 	<ja>@RestPost</ja>(...)
+ * 	<jk>public</jk> Object myMethod(RestResponse <jv>res</jv>) {...}
  * </p>
  *
- * <ul class='seealso'>
- * 	<li class='link'>{@doc RestmRestResponse}
+ * <p>
+ * 	The primary methods on this class are shown below:
+ * </p>
+ * <ul class='javatree'>
+ * 	<li class='jc'>{@link RestResponse}
+ * 	<ul class='spaced-list'>
+ * 		<li>Methods for setting response headers:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestResponse#addHeader(Header) addHeader(Header)}
+ * 			<li class='jm'>{@link RestResponse#addHeader(String,String) addHeader(String,String)}
+ * 			<li class='jm'>{@link RestResponse#containsHeader(String) containsHeader(String)}
+ * 			<li class='jm'>{@link RestResponse#getHeader(String) getHeader(String)}
+ * 			<li class='jm'>{@link RestResponse#setCharacterEncoding(String) setCharacterEncoding(String)}
+ * 			<li class='jm'>{@link RestResponse#setContentType(String) setContentType(String)}
+ * 			<li class='jm'>{@link RestResponse#setHeader(Header) setHeader(Header)}
+ * 			<li class='jm'>{@link RestResponse#setHeader(HttpPartSchema,String,Object) setHeader(HttpPartSchema,String,Object)}
+ * 			<li class='jm'>{@link RestResponse#setHeader(String,Object) setHeader(String,Object)}
+ * 			<li class='jm'>{@link RestResponse#setHeader(String,String) setHeader(String,String)}
+ * 			<li class='jm'>{@link RestResponse#setMaxHeaderLength(int) setMaxHeaderLength(int)}
+ * 			<li class='jm'>{@link RestResponse#setSafeHeaders() setSafeHeaders()}
+ * 		</ul>
+ * 		<li>Methods for setting response bodies:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestResponse#flushBuffer() flushBuffer()}
+ * 			<li class='jm'>{@link RestResponse#getDirectWriter(String) getDirectWriter(String)}
+ * 			<li class='jm'>{@link RestResponse#getNegotiatedOutputStream() getNegotiatedOutputStream()}
+ * 			<li class='jm'>{@link RestResponse#getNegotiatedWriter() getNegotiatedWriter()}
+ * 			<li class='jm'>{@link RestResponse#getSerializerMatch() getSerializerMatch()}
+ * 			<li class='jm'>{@link RestResponse#getWriter() getWriter()}
+ * 			<li class='jm'>{@link RestResponse#sendPlainText(String) sendPlainText(String)}
+ * 			<li class='jm'>{@link RestResponse#sendRedirect(String) sendRedirect(String)}
+ * 			<li class='jm'>{@link RestResponse#setBodySchema(HttpPartSchema) setBodySchema(HttpPartSchema)}
+ * 			<li class='jm'>{@link RestResponse#setOutput(Object) setOutput(Object)}
+ * 			<li class='jm'>{@link RestResponse#setResponseBeanMeta(ResponseBeanMeta) setResponseBeanMeta(ResponseBeanMeta)}
+ * 			<li class='jm'>{@link RestResponse#setException(Throwable) setException(Throwable)}
+ * 		</ul>
+ * 		<li>Other:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RestResponse#getAttributes() getAttributes()}
+ * 			<li class='jm'>{@link RestResponse#getContext() getContext()}
+ * 			<li class='jm'>{@link RestResponse#getOpContext() getOpContext()}
+ * 			<li class='jm'>{@link RestResponse#setAttribute(String,Object) setAttribute(String,Object)}
+ * 			<li class='jm'>{@link RestResponse#setDebug() setDebug()}
+ * 			<li class='jm'>{@link RestResponse#setNoTrace() setNoTrace()}
+ * 			<li class='jm'>{@link RestResponse#setStatus(int) setStatus(int)}
+ * 		</ul>
+ * 	</ul>
  * </ul>
  */
 public final class RestResponse {
@@ -199,7 +239,7 @@ public final class RestResponse {
 	 * @param value The property value.
 	 * @return This object.
 	 */
-	public RestResponse attr(String name, Object value) {
+	public RestResponse setAttribute(String name, Object value) {
 		request.setAttribute(name, value);
 		return this;
 	}
@@ -545,22 +585,8 @@ public final class RestResponse {
 	 * @throws SchemaValidationException Header failed schema validation.
 	 * @throws SerializeException Header could not be serialized.
 	 */
-	public RestResponse header(String name, Object value) throws SchemaValidationException, SerializeException {
-		return header(null, null, name, value);
-	}
-
-	/**
-	 * Sets a header from a {@link NameValuePair}.
-	 *
-	 * <p>
-	 * Note that this bypasses the part serializer and set the header value directly.
-	 *
-	 * @param pair The header to set.  Nulls are ignored.
-	 * @return This object.
-	 */
-	public RestResponse header(NameValuePair pair) {
-		if (pair != null)
-			setHeader(pair.getName(), pair.getValue());
+	public RestResponse setHeader(String name, Object value) throws SchemaValidationException, SerializeException {
+		setHeader(name, request.getPartSerializerSession().serialize(HEADER, null, value));
 		return this;
 	}
 
@@ -579,30 +605,8 @@ public final class RestResponse {
 	 * @throws SchemaValidationException Header failed schema validation.
 	 * @throws SerializeException Header could not be serialized.
 	 */
-	public RestResponse header(HttpPartSchema schema, String name, Object value) throws SchemaValidationException, SerializeException {
-		return header(null, schema, name, value);
-	}
-
-	/**
-	 * Sets a header on the request.
-	 * @param serializer
-	 * 	The serializer to use to serialize the header, or <jk>null</jk> to use the part serializer on the request.
-	 * @param schema
-	 * 	The schema to use to serialize the header, or <jk>null</jk> to use the default schema.
-	 * @param name The header name.
-	 * @param value The header value.
-	 * 	<ul>
-	 * 		<li>Can be any POJO.
-	 * 		<li>Converted to a string using the specified part serializer.
-	 * 	</ul>
-	 * @return This object.
-	 * @throws SchemaValidationException Header failed schema validation.
-	 * @throws SerializeException Header could not be serialized.
-	 */
-	public RestResponse header(HttpPartSerializerSession serializer, HttpPartSchema schema, String name, Object value) throws SchemaValidationException, SerializeException {
-		if (serializer == null)
-			serializer = request.getPartSerializerSession();
-		setHeader(name, serializer.serialize(HEADER, schema, value));
+	public RestResponse setHeader(HttpPartSchema schema, String name, Object value) throws SchemaValidationException, SerializeException {
+		setHeader(name, request.getPartSerializerSession().serialize(HEADER, schema, value));
 		return this;
 	}
 
@@ -615,23 +619,12 @@ public final class RestResponse {
 	 * @param schema The body schema
 	 * @return This object.
 	 */
-	public RestResponse bodySchema(HttpPartSchema schema) {
+	public RestResponse setBodySchema(HttpPartSchema schema) {
 		this.bodySchema = ofNullable(schema);
 		return this;
 	}
 
 	/**
-	 * Same as {@link #setHeader(String, String)} but header is defined as a response part
-	 *
-	 * @param h Header to set.
-	 * @throws SchemaValidationException Header part did not pass validation.
-	 * @throws SerializeException Header part could not be serialized.
-	 */
-	public void setHeader(HttpPart h) throws SchemaValidationException, SerializeException {
-		setHeader(h.getName(), h.getValue());
-	}
-
-	/**
 	 * Sets the <js>"Exception"</js> attribute to the specified throwable.
 	 *
 	 * <p>
@@ -811,7 +804,7 @@ public final class RestResponse {
 	 *
 	 * @return This object.
 	 */
-	public RestResponse safeHeaders() {
+	public RestResponse setSafeHeaders() {
 		this.safeHeaders = true;
 		return this;
 	}
@@ -825,7 +818,7 @@ public final class RestResponse {
 	 * @param value The new value for this setting.  The default is <c>8096</c>.
 	 * @return This object.
 	 */
-	public RestResponse maxHeaderLength(int value) {
+	public RestResponse setMaxHeaderLength(int value) {
 		this.maxHeaderLength = value;
 		return this;
 	}
@@ -881,7 +874,10 @@ public final class RestResponse {
 			setHeader(x.getName(), resolveUris(x.getValue()));
 		} else if (header instanceof SerializedHeader) {
 			SerializedHeader x = ((SerializedHeader)header).copyWith(request.getPartSerializerSession(), null);
-			setHeader(x.getName(), resolveUris(x.getValue()));
+			String v = x.getValue();
+			if (v != null && v.indexOf("://") != -1)
+				v = resolveUris(v);
+			setHeader(x.getName(), v);
 		} else {
 			setHeader(header.getName(), header.getValue());
 		}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ResponseHeaderArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ResponseHeaderArg.java
index beea630..bdde9be 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ResponseHeaderArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ResponseHeaderArg.java
@@ -13,18 +13,17 @@
 package org.apache.juneau.rest.args;
 
 import static java.util.Optional.*;
-import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.lang.reflect.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.annotation.*;
+import org.apache.juneau.http.header.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.serializer.*;
 
 /**
  * Resolves method parameters annotated with {@link ResponseHeader} on {@link RestOp}-annotated Java methods.
@@ -90,17 +89,13 @@ public class ResponseHeaderArg implements RestOpArg {
 		v.listener(new ValueListener() {
 			@Override
 			public void onSet(Object o) {
-				try {
-					RestRequest req = opSession.getRequest();
-					RestResponse res = opSession.getResponse();
-					ResponsePartMeta rpm = req.getOpContext().getResponseHeaderMeta(o);
-					if (rpm == null)
-						rpm = ResponseHeaderArg.this.meta;
-					HttpPartSerializerSession pss = rpm.getSerializer() == null ? req.getPartSerializerSession() : rpm.getSerializer().getPartSession();
-					res.setHeader(new HttpPart(name, HttpPartType.HEADER, rpm.getSchema(), pss, o));
-				} catch (SerializeException | SchemaValidationException e) {
-					throw runtimeException(e);
-				}
+				RestRequest req = opSession.getRequest();
+				RestResponse res = opSession.getResponse();
+				ResponsePartMeta rpm = req.getOpContext().getResponseHeaderMeta(o);
+				if (rpm == null)
+					rpm = ResponseHeaderArg.this.meta;
+				HttpPartSerializerSession pss = rpm.getSerializer() == null ? req.getPartSerializerSession() : rpm.getSerializer().getPartSession();
+				res.setHeader(new SerializedHeader(name, o, pss, rpm.getSchema(), false));
 			}
 		});
 		return v;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
index 6b97714..a2577ee 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_RVars_Test.java
@@ -54,9 +54,9 @@ public class Rest_RVars_Test {
 			serializers=A1.class
 		)
 		public void a(RestResponse res) {
-			res.attr("A2", "c");
-			res.attr("B2", "c");
-			res.attr("C", "c");
+			res.setAttribute("A2", "c");
+			res.setAttribute("B2", "c");
+			res.setAttribute("C", "c");
 			res.setOutput(null);
 		}
 
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
index 951803c..b42659d 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
@@ -440,7 +440,7 @@ public class RestClient_Config_RestClient_Test {
 			assertObject(req.getHeaders().getAll("Foo").stream().map(RequestHeader::getValue).collect(Collectors.toList())).asJson().is("['x{f:1}','x{f:1}']");
 			assertEquals("{f:1}",foo[0].toString());
 			assertEquals("{f:1}",foo[1].toString());
-			res.header("Foo",bean);
+			res.setHeader("Foo",bean);
 			return OK;
 		}
 	}