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 23:10:43 UTC

[juneau] branch master updated: Javadocs and RequestBody API improvements.

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new d085bd9  Javadocs and RequestBody API improvements.
d085bd9 is described below

commit d085bd9a8bd44bd291a7a63bfc219992aec7a391
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sun Nov 7 18:10:18 2021 -0500

    Javadocs and RequestBody API improvements.
---
 .../04.RestLifecycleHooks.html                     |  33 ++---
 .../03.RestOpAnnotatedMethods.html                 |   6 +
 .../01.RestmRequestBody.html                       |  53 --------
 ...estHeaders.html => 01.RestmRequestHeaders.html} |   0
 ...ributes.html => 02.RestmRequestAttributes.html} |   0
 ...RequestQuery.html => 03.RestmRequestQuery.html} |   0
 ...tFormData.html => 04.RestmRequestFormData.html} |   0
 ...athMatch.html => 05.RestmRequestPathMatch.html} |   0
 ...erResource.html => 06.RestmReaderResource.html} |   0
 ...amResource.html => 07.RestmStreamResource.html} |   0
 ...09.RestmMatchers.html => 08.RestmMatchers.html} |   0
 ...onses.html => 09.RestmPredefinedResponses.html} |   0
 ...ans.html => 10.RestmPredefinedHelperBeans.html} |   0
 juneau-doc/src/main/javadoc/overview.html          | 142 ++++++++-------------
 juneau-doc/src/main/javadoc/resources/docs.txt     |   1 -
 .../src/main/javadoc/resources/fragments/toc.html  |   3 -
 .../java/org/apache/juneau/rest/RequestBody.java   | 103 ++++++++-------
 .../java/org/apache/juneau/rest/RestRequest.java   |   4 +-
 .../java/org/apache/juneau/rest/RestResponse.java  |   2 +-
 .../org/apache/juneau/rest/RrpcRestOpSession.java  |   2 +-
 .../java/org/apache/juneau/rest/args/BodyArg.java  |   4 +-
 .../juneau/rest/args/InputStreamParserArg.java     |   5 +-
 .../org/apache/juneau/rest/args/ParserArg.java     |   5 +-
 .../apache/juneau/rest/args/ReaderParserArg.java   |   5 +-
 .../apache/juneau/rest/converters/Traversable.java |   4 +-
 25 files changed, 152 insertions(+), 220 deletions(-)

diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/02.RestAnnotatedClasses/04.RestLifecycleHooks.html b/juneau-doc/docs/Topics/06.juneau-rest-server/02.RestAnnotatedClasses/04.RestLifecycleHooks.html
index 7e82100..29c3b3a 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/02.RestAnnotatedClasses/04.RestLifecycleHooks.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/02.RestAnnotatedClasses/04.RestLifecycleHooks.html
@@ -51,21 +51,24 @@
 <p>
 	The hook events can be broken down into two categories:
 </p>
-<ul class='spaced-list'>
-	<li>Resource lifecycle events:
-		<ul class='javatree'>
-			<li class='jf'>{@link oajr.annotation.HookEvent#INIT INIT} - Right before initialization.
-			<li class='jf'>{@link oajr.annotation.HookEvent#POST_INIT POST_INIT} - Right after initialization.
-			<li class='jf'>{@link oajr.annotation.HookEvent#POST_INIT_CHILD_FIRST POST_INIT_CHILD_FIRST} - Right after initialization, but run child methods first.
-			<li class='jf'>{@link oajr.annotation.HookEvent#DESTROY DESTROY} - Right before servlet destroy.
-		</ul>
-	<li>REST call lifecycle events:
-		<ul class='javatree'>
-			<li class='jf'>{@link oajr.annotation.HookEvent#START_CALL START_CALL} - At the beginning of a REST call.
-			<li class='jf'>{@link oajr.annotation.HookEvent#PRE_CALL PRE_CALL} - Right before the <ja>@RestOp</ja> method is invoked.
-			<li class='jf'>{@link oajr.annotation.HookEvent#POST_CALL POST_CALL} - Right after the <ja>@RestOp</ja> method is invoked.
-			<li class='jf'>{@link oajr.annotation.HookEvent#END_CALL END_CALL} - At the end of the REST call after the response has been flushed.
-		</ul>
+<ul class='javatree'>
+	<li class='je'>{@link oajr.annotation.HookEvent}
+	<ul class='spaced-list'>
+		<li>Resource lifecycle events:
+			<ul class='javatree'>
+				<li class='jf'>{@link oajr.annotation.HookEvent#INIT INIT} - Right before initialization.
+				<li class='jf'>{@link oajr.annotation.HookEvent#POST_INIT POST_INIT} - Right after initialization.
+				<li class='jf'>{@link oajr.annotation.HookEvent#POST_INIT_CHILD_FIRST POST_INIT_CHILD_FIRST} - Right after initialization, but run child methods first.
+				<li class='jf'>{@link oajr.annotation.HookEvent#DESTROY DESTROY} - Right before servlet destroy.
+			</ul>
+		<li>REST call lifecycle events:
+			<ul class='javatree'>
+				<li class='jf'>{@link oajr.annotation.HookEvent#START_CALL START_CALL} - At the beginning of a REST call.
+				<li class='jf'>{@link oajr.annotation.HookEvent#PRE_CALL PRE_CALL} - Right before the <ja>@RestOp</ja> method is invoked.
+				<li class='jf'>{@link oajr.annotation.HookEvent#POST_CALL POST_CALL} - Right after the <ja>@RestOp</ja> method is invoked.
+				<li class='jf'>{@link oajr.annotation.HookEvent#END_CALL END_CALL} - At the end of the REST call after the response has been flushed.
+			</ul>
+	</ul>
 </ul>
 
 <ul class='seealso'>
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 f91af3c..af505c1 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
@@ -610,4 +610,10 @@
 <ul class='seealso'>
 	<li class='jc'>{@link oajr.RestRequest}
 	<li class='jc'>{@link oajr.RestResponse}
+	<li class='jc'>{@link oajr.RequestBody}
+	<li class='jc'>{@link oajr.RequestHeaders}
+	<li class='jc'>{@link oajr.RequestQueryParams}
+	<li class='jc'>{@link oajr.RequestFormParams}
+	<li class='jc'>{@link oajr.RequestPathParams}
+	<li class='jc'>{@link oajr.RequestAttributes}
 </ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestBody.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestBody.html
deleted file mode 100644
index deb1a54..0000000
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestBody.html
+++ /dev/null
@@ -1,53 +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:'RequestBody', flags:'todo'}
-
-<p>
-	The {@link oajr.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:
-</p>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public</jk> Object myMethod(RequestBody <jv>body</jv>) {...}			
-</p>
-<h5 class='figure'>Example:</h5>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public void</jk> doPost(RequestBody <jv>body</jv>) {
-		<jc>// Convert body to a linked list of Person objects.</jc>
-		List&lt;Person&gt; <jv>list</jv> = <jv>body</jv>.asType(LinkedList.<jk>class</jk>, Person.<jk>class</jk>);
-		...
-	}
-</p>
-<p>
-	Some important methods on this class are:
-</p>
-<ul class='javatree'>
-	<li class='jc'>{@link oajr.RequestBody} 
-	<ul>
-		<li class='jm'>{@link oajr.RequestBody#getReader() getReader()} - Get body as a Reader.
-		<li class='jm'>{@link oajr.RequestBody#getInputStream() getInputStream()} - Get body as an InputStream.
-		<li class='jm'>{@link oajr.RequestBody#asType(Class) asType(Class)} - Get body converted to a POJO.
-		<li class='jm'>{@link oajr.RequestBody#asType(Type,Type...) asType(Type,Type...)} - Get body converted to a map or collection of POJOs.
-		<li class='jm'>{@link oajr.RequestBody#asString() asString()} - Get body as a simple string.
-		<li class='jm'>{@link oajr.RequestBody#asHex() asHex()} - Get body as a hex-encoded string.
-		<li class='jm'>{@link oajr.RequestBody#asSpacedHex() asSpacedHex()} - Get body as spaced-hex-encoded string.
-	</ul>
-</ul>
-
-<ul class='seealso'>
-	<li class='ja'>{@link oaj.http.annotation.Body}
-</ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRequestHeaders.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestHeaders.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRequestHeaders.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/01.RestmRequestHeaders.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestAttributes.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRequestAttributes.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestAttributes.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/02.RestmRequestAttributes.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestQuery.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestQuery.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestQuery.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/03.RestmRequestQuery.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestFormData.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestFormData.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestFormData.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/04.RestmRequestFormData.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmRequestPathMatch.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestPathMatch.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmRequestPathMatch.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/05.RestmRequestPathMatch.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmReaderResource.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmReaderResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmReaderResource.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/06.RestmReaderResource.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmStreamResource.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmStreamResource.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmStreamResource.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/07.RestmStreamResource.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmMatchers.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmMatchers.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmMatchers.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/08.RestmMatchers.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmPredefinedResponses.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmPredefinedResponses.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmPredefinedResponses.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/09.RestmPredefinedResponses.html
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/11.RestmPredefinedHelperBeans.html b/juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmPredefinedHelperBeans.html
similarity index 100%
rename from juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/11.RestmPredefinedHelperBeans.html
rename to juneau-doc/docs/Topics/06.juneau-rest-server/03.RestOpAnnotatedMethods/10.RestmPredefinedHelperBeans.html
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 1237842..4b44c82 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -349,7 +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.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>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery'>RequestQuery</a><span class='update'><b><red>todo</red></b></span></p>
@@ -14857,21 +14856,24 @@
 <p>
 	The hook events can be broken down into two categories:
 </p>
-<ul class='spaced-list'>
-	<li>Resource lifecycle events:
-		<ul class='javatree'>
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#INIT INIT} - Right before initialization.
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#POST_INIT POST_INIT} - Right after initialization.
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#POST_INIT_CHILD_FIRST POST_INIT_CHILD_FIRST} - Right after initialization, but run child methods first.
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#DESTROY DESTROY} - Right before servlet destroy.
-		</ul>
-	<li>REST call lifecycle events:
-		<ul class='javatree'>
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#START_CALL START_CALL} - At the beginning of a REST call.
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#PRE_CALL PRE_CALL} - Right before the <ja>@RestOp</ja> method is invoked.
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#POST_CALL POST_CALL} - Right after the <ja>@RestOp</ja> method is invoked.
-			<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#END_CALL END_CALL} - At the end of the REST call after the response has been flushed.
-		</ul>
+<ul class='javatree'>
+	<li class='je'>{@link org.apache.juneau.rest.annotation.HookEvent}
+	<ul class='spaced-list'>
+		<li>Resource lifecycle events:
+			<ul class='javatree'>
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#INIT INIT} - Right before initialization.
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#POST_INIT POST_INIT} - Right after initialization.
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#POST_INIT_CHILD_FIRST POST_INIT_CHILD_FIRST} - Right after initialization, but run child methods first.
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#DESTROY DESTROY} - Right before servlet destroy.
+			</ul>
+		<li>REST call lifecycle events:
+			<ul class='javatree'>
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#START_CALL START_CALL} - At the beginning of a REST call.
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#PRE_CALL PRE_CALL} - Right before the <ja>@RestOp</ja> method is invoked.
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#POST_CALL POST_CALL} - Right after the <ja>@RestOp</ja> method is invoked.
+				<li class='jf'>{@link org.apache.juneau.rest.annotation.HookEvent#END_CALL END_CALL} - At the end of the REST call after the response has been flushed.
+			</ul>
+	</ul>
 </ul>
 
 <ul class='seealso'>
@@ -15479,54 +15481,18 @@
 <ul class='seealso'>
 	<li class='jc'>{@link org.apache.juneau.rest.RestRequest}
 	<li class='jc'>{@link org.apache.juneau.rest.RestResponse}
+	<li class='jc'>{@link org.apache.juneau.rest.RequestBody}
+	<li class='jc'>{@link org.apache.juneau.rest.RequestHeaders}
+	<li class='jc'>{@link org.apache.juneau.rest.RequestQueryParams}
+	<li class='jc'>{@link org.apache.juneau.rest.RequestFormDataParams}
+	<li class='jc'>{@link org.apache.juneau.rest.RequestPathParams}
+	<li class='jc'>{@link org.apache.juneau.rest.RequestAttributes}
 </ul>
 
 <!-- ==================================================================================================== -->
 
-<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:
-</p>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public</jk> Object myMethod(RequestBody <jv>body</jv>) {...}			
-</p>
-<h5 class='figure'>Example:</h5>
-<p class='bpcode w800'>
-	<ja>@RestPost</ja>(...)
-	<jk>public void</jk> doPost(RequestBody <jv>body</jv>) {
-		<jc>// Convert body to a linked list of Person objects.</jc>
-		List&lt;Person&gt; <jv>list</jv> = <jv>body</jv>.asType(LinkedList.<jk>class</jk>, Person.<jk>class</jk>);
-		...
-	}
-</p>
-<p>
-	Some important methods on this class are:
-</p>
-<ul class='javatree'>
-	<li class='jc'>{@link org.apache.juneau.rest.RequestBody} 
-	<ul>
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#getReader() getReader()} - Get body as a Reader.
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#getInputStream() getInputStream()} - Get body as an InputStream.
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#asType(Class) asType(Class)} - Get body converted to a POJO.
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#asType(Type,Type...) asType(Type,Type...)} - Get body converted to a map or collection of POJOs.
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#asString() asString()} - Get body as a simple string.
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#asHex() asHex()} - Get body as a hex-encoded string.
-		<li class='jm'>{@link org.apache.juneau.rest.RequestBody#asSpacedHex() asSpacedHex()} - Get body as spaced-hex-encoded string.
-	</ul>
-</ul>
-
-<ul class='seealso'>
-	<li class='ja'>{@link org.apache.juneau.http.annotation.Body}
-</ul>
-</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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders'>6.3.1 - RequestHeaders</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.1 - 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:
@@ -15568,12 +15534,12 @@
 <ul class='seealso'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Header}
 </ul>
-</div><!-- END: 6.3.2 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders -->
+</div><!-- END: 6.3.1 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes'>6.3.2 - RequestAttributes</a><span class='update'>created: 8.1.0, <b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.2 - 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)}.
@@ -15603,12 +15569,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.3 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes -->
+</div><!-- END: 6.3.2 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery'>6.3.3 - RequestQuery</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.3 - 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:
@@ -15655,12 +15621,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.4 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery -->
+</div><!-- END: 6.3.3 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData'>6.3.4 - RequestFormData</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.4 - 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:
@@ -15702,12 +15668,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.5 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData -->
+</div><!-- END: 6.3.4 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch' id='juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch'>6.3.5 - RequestPathMatch</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.5 - 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.
@@ -15746,12 +15712,12 @@
 <ul class='seealso'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Path}
 </ul>
-</div><!-- END: 6.3.6 - juneau-rest-server.RestOpAnnotatedMethods.RestmRequestPathMatch -->
+</div><!-- END: 6.3.5 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource' id='juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource'>6.3.6 - ReaderResource</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.6 - juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource -->
 <p>
 	The {@del ReaderResource} class is a convenience object for defining thread-safe
 	reusable character-based responses.
@@ -15777,12 +15743,12 @@
 			.build();
 	}
 </p>
-</div><!-- END: 6.3.7 - juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource -->
+</div><!-- END: 6.3.6 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource' id='juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource'>6.3.7 - StreamResource</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.7 - 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.
@@ -15804,12 +15770,12 @@
 			.build();
 	}
 </p>
-</div><!-- END: 6.3.8 - juneau-rest-server.RestOpAnnotatedMethods.RestmStreamResource -->
+</div><!-- END: 6.3.7 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers' id='juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers'>6.3.8 - @RestOp(matchers)</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.8 - 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 
@@ -15863,12 +15829,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.9 - juneau-rest-server.RestOpAnnotatedMethods.RestmMatchers -->
+</div><!-- END: 6.3.8 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses' id='juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses'>6.3.9 - Predefined Responses</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.9 - 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. 
@@ -15978,12 +15944,12 @@
 		<jk>return new</jk> SeeOther(<js>"servlet:/pets"</js>);  
 	}
 </p>
-</div><!-- END: 6.3.10 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses -->
+</div><!-- END: 6.3.9 - 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.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 -->
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans' id='juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans'>6.3.10 - Predefined Helper Beans</a><span class='update'><b><red>todo</red></b></span></h4>
+<div class='topic'><!-- START: 6.3.10 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans -->
 <p>
 	The {@link org.apache.juneau.rest.helper} package contains several predefined beans to help when constructing
 	REST interfaces.
@@ -16193,7 +16159,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.11 - juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedHelperBeans -->
+</div><!-- END: 6.3.10 - 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 74d3f1e..ddfe78a 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -290,7 +290,6 @@ RestmPredefinedHelperBeans = #juneau-rest-server.RestOpAnnotatedMethods.RestmPre
 RestmPredefinedResponses = #juneau-rest-server.RestOpAnnotatedMethods.RestmPredefinedResponses, Overview > juneau-rest-server > @RestOp-Annotated Methods > Predefined Responses
 RestmReaderResource = #juneau-rest-server.RestOpAnnotatedMethods.RestmReaderResource, Overview > juneau-rest-server > @RestOp-Annotated Methods > ReaderResource
 RestmRequestAttributes = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes, Overview > juneau-rest-server > @RestOp-Annotated Methods > RequestAttributes
-RestmRequestBody = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody, Overview > juneau-rest-server > @RestOp-Annotated Methods > RequestBody
 RestmRequestFormData = #juneau-rest-server.RestOpAnnotatedMethods.RestmRequestFormData, Overview > juneau-rest-server > @RestOp-Annotated Methods > RequestFormData
 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
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 6303aab..067a8bd 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -203,9 +203,6 @@
 		</ol>
 		<li><p><a class='doclink' href='{OVERVIEW_URL}#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='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRestRequest'>RestRequest</a><span class='update'><b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRestResponse'>RestResponse</a><span class='update'><b><red>todo</red></b></span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestBody'>RequestBody</a><span class='update'><b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestHeaders'>RequestHeaders</a><span class='update'><b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestAttributes'>RequestAttributes</a><span class='update'>created: 8.1.0, <b><red>todo</red></b></span></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestOpAnnotatedMethods.RestmRequestQuery'>RequestQuery</a><span class='update'><b><red>todo</red></b></span></p>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java
index a9dffd2..0c6b384 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestBody.java
@@ -27,6 +27,7 @@ import org.apache.juneau.encoders.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.rest.util.*;
@@ -34,8 +35,56 @@ import org.apache.juneau.rest.util.*;
 /**
  * Contains the body of the HTTP request.
  *
+ * <p>
+ * 	The {@link 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:
+ * </p>
+ * <p class='bpcode w800'>
+ * 	<ja>@RestPost</ja>(...)
+ * 	<jk>public</jk> Object myMethod(RequestBody <jv>body</jv>) {...}
+ * </p>
+ *
+ * <h5 class='figure'>Example:</h5>
+ * <p class='bcode w800'>
+ * 	<ja>@RestPost</ja>(...)
+ * 	<jk>public void</jk> doPost(RequestBody <jv>body</jv>) {
+ * 		<jc>// Convert body to a linked list of Person objects.</jc>
+ * 		List&lt;Person&gt; <jv>list</jv> = <jv>body</jv>.asType(LinkedList.<jk>class</jk>, Person.<jk>class</jk>);
+ * 		...
+ * 	}
+ * </p>
+ *
+ * <p>
+ * 	Some important methods on this class are:
+ * </p>
+ * <ul class='javatree'>
+ * 	<li class='jc'>{@link RequestBody}
+ * 	<ul class='spaced-list'>
+ * 		<li>Methods for accessing the raw contents of the request body:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RequestBody#asBytes() asBytes()}
+ * 			<li class='jm'>{@link RequestBody#asHex() asHex()}
+ * 			<li class='jm'>{@link RequestBody#asSpacedHex() asSpacedHex()}
+ * 			<li class='jm'>{@link RequestBody#asString() asString()}
+ * 			<li class='jm'>{@link RequestBody#getInputStream() getInputStream()}
+ * 			<li class='jm'>{@link RequestBody#getReader() getReader()}
+ * 		</ul>
+ * 		<li>Methods for parsing the contents of the request body:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RequestBody#asType(Class) asType(Class)}
+ * 			<li class='jm'>{@link RequestBody#asType(Type, Type...) asType(Type, Type...)}
+ * 			<li class='jm'>{@link RequestBody#setSchema(HttpPartSchema) setSchema(HttpPartSchema)}
+ * 		</ul>
+ * 		<li>Other methods:
+ * 		<ul class='javatreec'>
+ * 			<li class='jm'>{@link RequestBody#cache() cache()}
+ * 			<li class='jm'>{@link RequestBody#getParserMatch() getParserMatch()}
+ * 		</ul>
+ * 	</ul>
+ * </ul>
+ *
  * <ul class='seealso'>
- * 	<li class='link'>{@doc RestmRequestBody}
+ * 	<li class='ja'>{@link Body}
  * </ul>
  */
 @SuppressWarnings("unchecked")
@@ -72,7 +121,7 @@ public class RequestBody {
 	 * @param schema The new schema for this body.
 	 * @return This object.
 	 */
-	public RequestBody schema(HttpPartSchema schema) {
+	public RequestBody setSchema(HttpPartSchema schema) {
 		this.schema = schema;
 		return this;
 	}
@@ -349,15 +398,15 @@ public class RequestBody {
 	 * Returns the parser and media type matching the request <c>Content-Type</c> header.
 	 *
 	 * @return
-	 * 	The parser matching the request <c>Content-Type</c> header, or <jk>null</jk> if no matching parser was
+	 * 	The parser matching the request <c>Content-Type</c> header, or {@link Optional#empty()} if no matching parser was
 	 * 	found.
 	 * 	Includes the matching media type.
 	 */
-	public ParserMatch getParserMatch() {
+	public Optional<ParserMatch> getParserMatch() {
 		if (mediaType != null && parser != null)
-			return new ParserMatch(mediaType, parser);
+			return Optional.of(new ParserMatch(mediaType, parser));
 		MediaType mt = getMediaType();
-		return mt == null ? null : parsers.getParserMatch(mt);
+		return Optional.ofNullable(mt == null ? null : parsers.getParserMatch(mt));
 	}
 
 	private MediaType getMediaType() {
@@ -369,46 +418,6 @@ public class RequestBody {
 		return ct.isPresent() ? ct.get().asMediaType().orElse(null) : null;
 	}
 
-	/**
-	 * Returns the parser matching the request <c>Content-Type</c> header.
-	 *
-	 * @return
-	 * 	The parser matching the request <c>Content-Type</c> header, or <jk>null</jk> if no matching parser was
-	 * 	found.
-	 */
-	public Parser getParser() {
-		ParserMatch pm = getParserMatch();
-		return (pm == null ? null : pm.getParser());
-	}
-
-	/**
-	 * Returns the reader parser matching the request <c>Content-Type</c> header.
-	 *
-	 * @return
-	 * 	The reader parser matching the request <c>Content-Type</c> header, or <jk>null</jk> if no matching
-	 * 	reader parser was found, or the matching parser was an input stream parser.
-	 */
-	public ReaderParser getReaderParser() {
-		Parser p = getParser();
-		if (p != null && p.isReaderParser())
-			return (ReaderParser)p;
-		return null;
-	}
-
-	/**
-	 * Returns the input stream parser matching the request <c>Content-Type</c> header.
-	 *
-	 * @return
-	 * 	The input stream parser matching the request <c>Content-Type</c> header, or <jk>null</jk> if no matching
-	 * 	reader parser was found, or the matching parser was a reader parser.
-	 */
-	public InputStreamParser getInputStreamParser() {
-		Parser p = getParser();
-		if (p != null && ! p.isReaderParser())
-			return (InputStreamParser)p;
-		return null;
-	}
-
 	private <T> T getInner(ClassMeta<T> cm) throws BadRequest, UnsupportedMediaType, InternalServerError {
 		try {
 			return parse(cm);
@@ -436,7 +445,7 @@ public class RequestBody {
 
 		Optional<TimeZone> timeZone = req.getTimeZone();
 		Locale locale = req.getLocale();
-		ParserMatch pm = getParserMatch();
+		ParserMatch pm = getParserMatch().orElse(null);
 
 		if (schema == null)
 			schema = HttpPartSchema.DEFAULT;
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 9f5bd54..259b2f1 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
@@ -98,7 +98,7 @@ import org.apache.juneau.utils.*;
  * </p>
  *
  * <p>
- * 	The primary methods on this class are shown below:
+ * 	The primary methods on this class are:
  * </p>
  * <ul class='javatree'>
  * 	<li class='jc'>{@link RestRequest}
@@ -1605,7 +1605,7 @@ public final class RestRequest {
 							ClassMeta<?> type = bs.getClassMeta(method.getGenericReturnType());
 							HttpPartType pt = pm.getPartType();
 							if (pt == HttpPartType.BODY)
-								return getBody().schema(schema).asType(type);
+								return getBody().setSchema(schema).asType(type);
 							if (pt == QUERY)
 								return getQueryParam(name).parser(pp).schema(schema).asType(type).orElse(null);
 							if (pt == FORMDATA)
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 6496634..401a969 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
@@ -52,7 +52,7 @@ import org.apache.juneau.serializer.*;
  * </p>
  *
  * <p>
- * 	The primary methods on this class are shown below:
+ * 	The primary methods on this class are:
  * </p>
  * <ul class='javatree'>
  * 	<li class='jc'>{@link RestResponse}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOpSession.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOpSession.java
index 6b55656..68537fd 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOpSession.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RrpcRestOpSession.java
@@ -113,7 +113,7 @@ public class RrpcRestOpSession extends RestOpSession {
 				Method m = rmm.getJavaMethod();
 				try {
 					// Parse the args and invoke the method.
-					Parser p = req.getBody().getParser();
+					Parser p = req.getBody().getParserMatch().get().getParser();
 					Object[] args = null;
 					if (m.getGenericParameterTypes().length == 0)
 						args = new Object[0];
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/BodyArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/BodyArg.java
index 02620bd..ba58f37 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/BodyArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/BodyArg.java
@@ -29,7 +29,7 @@ import org.apache.juneau.rest.annotation.*;
  * 	<jv>opSession</jv>
  * 		.{@link RestOpSession#getRequest() getRequest}()
  * 		.{@link RestRequest#getBody() getBody}()
- * 		.{@link RequestBody#schema(HttpPartSchema) schema}(<jv>schema</jv>)
+ * 		.{@link RequestBody#setSchema(HttpPartSchema) setSchema}(<jv>schema</jv>)
  * 		.{@link RequestBody#asType(Type,Type...) asType}(<jv>type</jv>);
  * </p>
  *
@@ -65,6 +65,6 @@ public class BodyArg implements RestOpArg {
 
 	@Override /* RestOpArg */
 	public Object resolve(RestOpSession opSession) throws Exception {
-		return opSession.getRequest().getBody().schema(schema).asType(type);
+		return opSession.getRequest().getBody().setSchema(schema).asType(type);
 	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/InputStreamParserArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/InputStreamParserArg.java
index 37ab873..823f0cb 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/InputStreamParserArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/InputStreamParserArg.java
@@ -26,7 +26,8 @@ import org.apache.juneau.rest.annotation.*;
  * 	<jv>opSession</jv>
  * 		.{@link RestOpSession#getRequest() getRequest}()
  * 		.{@link RestRequest#getBody() getBody}()
- * 		.{@link RequestBody#getInputStreamParser() getInputStreamParser}();
+ * 		.{@link RequestBody#getParserMatch() getParserMatch}()
+ * 		.{@link ParserMatch#getParser() getParser}();
  * </p>
  */
 public class InputStreamParserArg extends SimpleRestOperationArg {
@@ -47,6 +48,6 @@ public class InputStreamParserArg extends SimpleRestOperationArg {
 	 * Constructor.
 	 */
 	protected InputStreamParserArg() {
-		super((opSession)->opSession.getRequest().getBody().getInputStreamParser());
+		super((opSession)->opSession.getRequest().getBody().getParserMatch().map(ParserMatch::getParser).filter(InputStreamParser.class::isInstance).orElse(null));
 	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ParserArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ParserArg.java
index acb5acc..4199e91 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ParserArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ParserArg.java
@@ -26,7 +26,8 @@ import org.apache.juneau.rest.annotation.*;
  * 	<jv>opSession</jv>
  * 		.{@link RestOpSession#getRequest() getRequest}()
  * 		.{@link RestRequest#getBody() getBody}()
- * 		.{@link RequestBody#getParser() getParser}();
+ * 		.{@link RequestBody#getParserMatch() getParserMatch}()
+ * 		.{@link ParserMatch#getParser() getParser}();
  * </p>
  */
 public class ParserArg extends SimpleRestOperationArg {
@@ -47,6 +48,6 @@ public class ParserArg extends SimpleRestOperationArg {
 	 * Constructor.
 	 */
 	protected ParserArg() {
-		super((opSession)->opSession.getRequest().getBody().getParser());
+		super((opSession)->opSession.getRequest().getBody().getParserMatch().map(ParserMatch::getParser).orElse(null));
 	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ReaderParserArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ReaderParserArg.java
index aca2445..8b144c5 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ReaderParserArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/args/ReaderParserArg.java
@@ -26,7 +26,8 @@ import org.apache.juneau.rest.annotation.*;
  * 	<jv>opSession</jv>
  * 		.{@link RestOpSession#getRequest() getRequest}()
  * 		.{@link RestRequest#getBody() getBody}()
- * 		.{@link RequestBody#getReaderParser() getReaderParser}();
+ * 		.{@link RequestBody#getParserMatch() getParserMatch}()
+ * 		.{@link ParserMatch#getParser() getParser}();
  * </p>
  */
 public class ReaderParserArg extends SimpleRestOperationArg {
@@ -47,6 +48,6 @@ public class ReaderParserArg extends SimpleRestOperationArg {
 	 * Constructor.
 	 */
 	protected ReaderParserArg() {
-		super((opSession)->opSession.getRequest().getBody().getReaderParser());
+		super((opSession)->opSession.getRequest().getBody().getParserMatch().map(ParserMatch::getParser).filter(ReaderParser.class::isInstance).orElse(null));
 	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
index 551bfb1..e09a9ca 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
@@ -18,6 +18,7 @@ import org.apache.juneau.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.swap.*;
 import org.apache.juneau.http.response.*;
+import org.apache.juneau.parser.*;
 import org.apache.juneau.utils.*;
 
 /**
@@ -57,7 +58,8 @@ public final class Traversable implements RestConverter {
 				ObjectSwap swap = bs.getClassMetaForObject(o).getSwap(bs);
 				if (swap != null)
 					o = swap.swap(bs, o);
-				PojoRest p = new PojoRest(o, req.getBody().getReaderParser());
+				ReaderParser rp = req.getBody().getParserMatch().map(ParserMatch::getParser).filter(ReaderParser.class::isInstance).map(ReaderParser.class::cast).orElse(null);
+				PojoRest p = new PojoRest(o, rp);
 				o = p.get(pathRemainder);
 			} catch (PojoRestException e) {
 				throw new BasicHttpException(e.getStatus(), e);