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

[juneau] branch master updated: Javadocs (mostly).

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 a5eac7b  Javadocs (mostly).
a5eac7b is described below

commit a5eac7b556ac7a71e772ece75dfd3593859edae1
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Tue Jul 21 17:19:00 2020 -0400

    Javadocs (mostly).
---
 .../apache/juneau/dto/swagger/ui/SwaggerUI.java    |   2 +-
 .../juneau/cp/BasicClasspathResourceFinder.java    |  65 -----
 ...esourceFinder.java => BasicResourceFinder.java} |  81 +++++-
 .../apache/juneau/{utils => cp}/MessageBundle.java |   2 +-
 ...rceFinder.java => RecursiveResourceFinder.java} |  25 +-
 ...pathResourceFinder.java => ResourceFinder.java} |  10 +-
 ...thResourceManager.java => ResourceManager.java} |  12 +-
 ...sourceFinder.java => SimpleResourceFinder.java} |  25 +-
 .../main/java/org/apache/juneau/cp/package.html    |  60 +++++
 .../apache/juneau/internal/ReaderInputStream.java  |   4 +-
 .../juneau/utils/ClasspathResourceFinder.java      |   2 +-
 .../juneau/utils/ClasspathResourceFinderBasic.java |   2 +-
 .../utils/ClasspathResourceFinderRecursive.java    |   2 +-
 .../utils/ClasspathResourceFinderSimple.java       |   2 +-
 .../juneau/utils/ClasspathResourceManager.java     |   2 +-
 .../org/apache/juneau/utils/MessageBundle.java     |   2 +
 juneau-doc/docs/ReleaseNotes/7.1.0.html            |   4 +-
 .../06.RestMethod/02.RestRequest.html              |   1 -
 .../06.RestMethod/12.ReaderResource.html           |   4 +-
 .../06.RestMethod/13.StreamResource.html           |   4 +-
 .../10.HttpPartAnnotations/08.Request.html         |   2 +-
 .../10.HttpPartAnnotations/09.Response.html        |   2 +-
 .../06.juneau-rest-server/24.SvlVariables.html     |   2 +-
 juneau-doc/docs/Topics/09.juneau-rest-client.html  |   2 +-
 .../09.juneau-rest-client/02.RequestHeaders.html   |   8 +-
 .../03.RequestQueryParameters.html                 |   2 -
 .../09.juneau-rest-client/04.RequestFormData.html  |   2 -
 .../09.juneau-rest-client/05.RequestBody.html      |   7 -
 .../09.juneau-rest-client/07.ResponseHeaders.html  |   6 +-
 .../11.RestProxies/01.Remote.html                  |   2 +-
 .../11.RestProxies/03.Body.html                    |   8 +-
 .../11.RestProxies/04.FormData.html                |  43 ++--
 .../11.RestProxies/05.Query.html                   |  43 ++--
 .../11.RestProxies/06.Header.html                  |  41 +--
 .../11.RestProxies/07.Path.html                    |  29 +--
 .../11.RestProxies/08.Request.html                 |   2 +-
 .../11.RestProxies/09.Response.html                |   2 +-
 .../11.RestProxies/10.DualPurposeInterfaces.html   |   3 +-
 .../10.juneau-rest-mock/01.MockRestClient.html     |  42 ++--
 juneau-doc/src/main/javadoc/overview.html          | 278 ++++++++++-----------
 juneau-doc/src/main/javadoc/resources/docs.txt     |   4 +-
 .../src/main/javadoc/resources/fragments/toc.html  |  14 +-
 .../apache/juneau/microservice/Microservice.java   |   1 +
 .../juneau/microservice/console/ConfigCommand.java |   6 +-
 .../juneau/microservice/console/ExitCommand.java   |   2 +-
 .../juneau/microservice/console/HelpCommand.java   |   2 +-
 .../microservice/console/RestartCommand.java       |   2 +-
 .../microservice/jetty/JettyMicroservice.java      |   2 +-
 .../client2/RestClient_Response_Headers_Test.java  |   2 +-
 .../org/apache/juneau/rest/client2/RestClient.java |   2 +-
 .../juneau/rest/client2/RestResponseHeader.java    |   2 +-
 .../juneau/rest/BasicRestInfoProviderTest.java     |   2 +-
 .../org/apache/juneau/rest/RestParamsTest.java     |   2 +-
 .../java/org/apache/juneau/rest/BasicRest.java     |   8 +-
 .../java/org/apache/juneau/rest/RestContext.java   |  27 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |  12 +-
 .../org/apache/juneau/rest/RestMethodParam.java    |   2 +-
 .../org/apache/juneau/rest/RestParamDefaults.java  |   2 +-
 .../java/org/apache/juneau/rest/RestRequest.java   |   2 +
 .../java/org/apache/juneau/rest/RestServlet.java   |   6 +-
 .../org/apache/juneau/rest/StaticFileMapping.java  |   2 +-
 .../java/org/apache/juneau/rest/StaticFiles.java   |   4 +-
 .../org/apache/juneau/rest/SwaggerGenerator.java   |   2 +-
 .../apache/juneau/rest/annotation/HookEvent.java   |   2 +-
 .../org/apache/juneau/rest/annotation/Rest.java    |  10 +-
 .../juneau/rest/annotation/RestConfigApply.java    |   2 +-
 .../java/org/apache/juneau/rest/vars/FileVar.java  |   6 +-
 .../java/org/apache/juneau/rest/widget/Widget.java |   2 +-
 68 files changed, 500 insertions(+), 469 deletions(-)

diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
index 10517f0..c5ab2ee 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
@@ -70,7 +70,7 @@ public class SwaggerUI extends PojoSwap<Swagger,Div> {
 	public static final String SWAGGERUI_resolveRefsMaxDepth = PREFIX + "resolveRefsMaxDepth.i";
 
 
-	static final ClasspathResourceManager RESOURCES = new ClasspathResourceManager(SwaggerUI.class, BasicClasspathResourceFinder.INSTANCE, Boolean.getBoolean("RestContext.useClasspathResourceCaching.b"));
+	static final ResourceManager RESOURCES = new ResourceManager(SwaggerUI.class, BasicResourceFinder.INSTANCE, Boolean.getBoolean("RestContext.useClasspathResourceCaching.b"));
 
 	private static final Set<String> STANDARD_METHODS = ASet.of("get", "put", "post", "delete", "options");
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicClasspathResourceFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicClasspathResourceFinder.java
deleted file mode 100644
index b9fba13..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicClasspathResourceFinder.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.cp;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Utility class for finding resources for a class.
- *
- * <p>
- * Same as {@link SimpleClasspathResourceFinder}, but first searches the working directory for the file before
- * looking in the classpath.
- * <br>Path traversals outside the working directory are not allowed for security reasons.
- */
-public class BasicClasspathResourceFinder extends SimpleClasspathResourceFinder {
-
-	/**
-	 * Reusable instance.
-	 */
-	public static final BasicClasspathResourceFinder INSTANCE = new BasicClasspathResourceFinder();
-
-	@Override /* ClasspathResourceFinder */
-	public InputStream findResource(Class<?> baseClass, String name, Locale locale) throws IOException {
-		InputStream is = findFileSystemResource(name, locale);
-		if (is != null)
-			return is;
-		return findClasspathResource(baseClass, name, locale);
-	}
-
-	/**
-	 * Workhorse method for retrieving a resource from the file system.
-	 *
-	 * <p>
-	 * This method can be overridden by subclasses to provide customized handling of resource retrieval from file systems.
-	 *
-	 * @param name The resource name.
-	 * @param locale
-	 * 	The resource locale.
-	 * 	<br>Can be <jk>null</jk>.
-	 * @return The resource stream, or <jk>null</jk> if it couldn't be found.
-	 * @throws IOException Thrown by underlying stream.
-	 */
-	protected InputStream findFileSystemResource(String name, Locale locale) throws IOException {
-		if (name.indexOf("..") == -1) {
-			for (String n2 : getCandidateFileNames(name, locale)) {
-				File f = new File(n2);
-				if (f.exists() && f.canRead() && ! f.isAbsolute()) {
-					return new FileInputStream(f);
-				}
-			}
-		}
-		return null;
-	}
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/SimpleClasspathResourceFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicResourceFinder.java
similarity index 69%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/SimpleClasspathResourceFinder.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicResourceFinder.java
index f0f402c..e21be54 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/SimpleClasspathResourceFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BasicResourceFinder.java
@@ -22,9 +22,6 @@ import java.util.ResourceBundle.*;
  * Utility class for finding resources for a class.
  *
  * <p>
- * Same as {@link Class#getResourceAsStream(String)} except looks for resources with localized file names.
- *
- * <p>
  * If the <c>locale</c> is specified, then we look for resources whose name matches that locale.
  * For example, if looking for the resource <js>"MyResource.txt"</js> for the Japanese locale, we will look for
  * files in the following order:
@@ -33,21 +30,58 @@ import java.util.ResourceBundle.*;
  * 	<li><js>"MyResource_ja.txt"</js>
  * 	<li><js>"MyResource.txt"</js>
  * </ol>
+ *
+ * <p>
+ * The default behavior first searches the working filesystem directory for matching files.
+ * <br>Path traversals outside the working directory are not allowed for security reasons.
+ *
+ * <p>
+ * Support is provided for recursively searching for files up the class hierarchy chain.
  */
-public class SimpleClasspathResourceFinder implements ClasspathResourceFinder {
+public class BasicResourceFinder implements ResourceFinder {
 
 	/**
 	 * Reusable instance.
 	 */
-	public static final SimpleClasspathResourceFinder INSTANCE = new SimpleClasspathResourceFinder();
+	public static final BasicResourceFinder INSTANCE = new BasicResourceFinder();
 
 	private static final ResourceBundle.Control RB_CONTROL = ResourceBundle.Control.getControl(Control.FORMAT_DEFAULT);
 	private static final List<Locale> ROOT_LOCALE = Arrays.asList(Locale.ROOT);
 
+	private final boolean includeFileSystem, recursive;
+
+	/**
+	 * Constructor.
+	 *
+	 * <p>
+	 * Same as calling <c>new BasicClasspathResourceFinder(<jk>true</jk>, <jk>false</jk>.
+	 */
+	public BasicResourceFinder() {
+		this(true, false);
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param includeFileSystem Search the working filesystem directory for matching resources first.  The default is <jk>true</jk>.
+	 * @param recursive Recursively search up the parent class hierarchy for resources.
+	 */
+	public BasicResourceFinder(boolean includeFileSystem, boolean recursive) {
+		this.includeFileSystem = includeFileSystem;
+		this.recursive = recursive;
+	}
 
+	@SuppressWarnings("resource")
 	@Override /* ClasspathResourceFinder */
 	public InputStream findResource(Class<?> baseClass, String name, Locale locale) throws IOException {
-		return findClasspathResource(baseClass, name, locale);
+		InputStream is = null;
+		if (includeFileSystem)
+			is = findFileSystemResource(name, locale);
+		while (is == null && baseClass != null) {
+			is = findClasspathResource(baseClass, name, locale);
+			baseClass = recursive ? baseClass.getSuperclass() : null;
+		}
+		return is;
 	}
 
 	/**
@@ -67,21 +101,42 @@ public class SimpleClasspathResourceFinder implements ClasspathResourceFinder {
 	protected InputStream findClasspathResource(Class<?> baseClass, String name, Locale locale) throws IOException {
 
 		if (locale == null)
-			return getResourceAsStream(baseClass, name);
+			return baseClass.getResourceAsStream(name);
 
 		for (String n : getCandidateFileNames(name, locale)) {
-			InputStream is = getResourceAsStream(baseClass, n);
+			InputStream is = baseClass.getResourceAsStream(n);
 			if (is != null)
 				return is;
 		}
 		return null;
 	}
 
-	private InputStream getResourceAsStream(Class<?> baseClass, String name) {
-		return baseClass.getResourceAsStream(name);
+	/**
+	 * Workhorse method for retrieving a resource from the file system.
+	 *
+	 * <p>
+	 * This method can be overridden by subclasses to provide customized handling of resource retrieval from file systems.
+	 *
+	 * @param name The resource name.
+	 * @param locale
+	 * 	The resource locale.
+	 * 	<br>Can be <jk>null</jk>.
+	 * @return The resource stream, or <jk>null</jk> if it couldn't be found.
+	 * @throws IOException Thrown by underlying stream.
+	 */
+	protected InputStream findFileSystemResource(String name, Locale locale) throws IOException {
+		if (name.indexOf("..") == -1) {
+			for (String n2 : getCandidateFileNames(name, locale)) {
+				File f = new File(n2);
+				if (f.exists() && f.canRead() && ! f.isAbsolute()) {
+					return new FileInputStream(f);
+				}
+			}
+		}
+		return null;
 	}
 
-	/**
+	/*
 	 * Returns the candidate file names for the specified file name in the specified locale.
 	 *
 	 * <p>
@@ -102,7 +157,7 @@ public class SimpleClasspathResourceFinder implements ClasspathResourceFinder {
 	 * 	<br>If <jk>null</jk>, won't look for localized file names.
 	 * @return An iterator of file names to look at.
 	 */
-	protected static Iterable<String> getCandidateFileNames(final String fileName, final Locale l) {
+	Iterable<String> getCandidateFileNames(final String fileName, final Locale l) {
 		return new Iterable<String>() {
 			@Override
 			public Iterator<String> iterator() {
@@ -135,7 +190,7 @@ public class SimpleClasspathResourceFinder implements ClasspathResourceFinder {
 		};
 	}
 
-	/**
+	/*
 	 * Returns the candidate locales for the specified locale.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/MessageBundle.java
similarity index 97%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/MessageBundle.java
index 187ebc2..f755185 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/MessageBundle.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.utils;
+package org.apache.juneau.cp;
 
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveClasspathResourceFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveResourceFinder.java
similarity index 69%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveClasspathResourceFinder.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveResourceFinder.java
index 52a3e34..77948e4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveClasspathResourceFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveResourceFinder.java
@@ -12,27 +12,22 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.cp;
 
-import java.io.*;
-import java.util.*;
-
 /**
- * Same as {@link BasicClasspathResourceFinder} but searches for resources up the parent class hierarchy chain.
+ * Utility class for finding resources for a class.
+ *
+ * Same as {@link BasicResourceFinder} but searches for resources up the parent class hierarchy chain.
  */
-public class RecursiveClasspathResourceFinder extends BasicClasspathResourceFinder {
+public class RecursiveResourceFinder extends BasicResourceFinder {
 
 	/**
 	 * Reusable instance.
 	 */
-	public static final RecursiveClasspathResourceFinder INSTANCE = new RecursiveClasspathResourceFinder();
+	public static final RecursiveResourceFinder INSTANCE = new RecursiveResourceFinder();
 
-	@Override /* ResourceFinder2 */
-	public InputStream findResource(Class<?> baseClass, String name, Locale locale) throws IOException {
-		while (baseClass != null) {
-			InputStream is = findClasspathResource(baseClass, name, locale);
-			if (is != null)
-				return is;
-			baseClass = baseClass.getSuperclass();
-		}
-		return findFileSystemResource(name, locale);
+	/**
+	 * Constructor.
+	 */
+	public RecursiveResourceFinder() {
+		super(true, true);
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ClasspathResourceFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ResourceFinder.java
similarity index 87%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ClasspathResourceFinder.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ResourceFinder.java
index 70d747d..2749250 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ClasspathResourceFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ResourceFinder.java
@@ -25,19 +25,19 @@ import java.util.*;
  * <p>
  * The following predefined implementations are provided:
  * <ul>
- * 	<li>{@link SimpleClasspathResourceFinder} - Simple searching of classpath.
- * 	<li>{@link BasicClasspathResourceFinder} - Same as above, but looks in local JVM working directory if resource
+ * 	<li>{@link SimpleResourceFinder} - Simple searching of classpath.
+ * 	<li>{@link BasicResourceFinder} - Same as above, but looks in local JVM working directory if resource
  * 		can't be found on classpath.
- * 	<li>{@link RecursiveClasspathResourceFinder} - Same as above, except if the resource can't be found on the
+ * 	<li>{@link RecursiveResourceFinder} - Same as above, except if the resource can't be found on the
  * 		classpath relative to the base class, recursively searches up the parent class hierarchy.
  * </ul>
  */
-public interface ClasspathResourceFinder {
+public interface ResourceFinder {
 
 	/**
 	 * Represents "no" classpath resource finder.
 	 */
-	public static final class Null implements ClasspathResourceFinder {
+	public static final class Null implements ResourceFinder {
 		@Override
 		public InputStream findResource(Class<?> baseClass, String name, Locale locale) throws IOException {
 			throw new NoSuchMethodError();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ClasspathResourceManager.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ResourceManager.java
similarity index 96%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ClasspathResourceManager.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ResourceManager.java
index 1c38674..6506cd3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ClasspathResourceManager.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/ResourceManager.java
@@ -25,14 +25,14 @@ import org.apache.juneau.parser.*;
 /**
  * Class for retrieving and caching resource files from the classpath.
  */
-public final class ClasspathResourceManager {
+public final class ResourceManager {
 
 	// Maps resource names+locales to found resources.
 	private final ConcurrentHashMap<ResourceKey,byte[]> byteCache;
 	private final ConcurrentHashMap<ResourceKey,String> stringCache;
 
 	private final Class<?> baseClass;
-	private final ClasspathResourceFinder resourceFinder;
+	private final ResourceFinder resourceFinder;
 	private final boolean useCache;
 
 	/**
@@ -42,7 +42,7 @@ public final class ClasspathResourceManager {
 	 * @param resourceFinder The resource finder implementation.
 	 * @param useCache If <jk>true</jk>, retrieved resources are stored in an in-memory cache for fast lookup.
 	 */
-	public ClasspathResourceManager(Class<?> baseClass, ClasspathResourceFinder resourceFinder, boolean useCache) {
+	public ResourceManager(Class<?> baseClass, ResourceFinder resourceFinder, boolean useCache) {
 		this.baseClass = baseClass;
 		this.resourceFinder = resourceFinder;
 		this.useCache = useCache;
@@ -59,12 +59,12 @@ public final class ClasspathResourceManager {
 	 * Constructor.
 	 *
 	 * <p>
-	 * Uses default {@link BasicClasspathResourceFinder} for finding resources.
+	 * Uses default {@link BasicResourceFinder} for finding resources.
 	 *
 	 * @param baseClass The default class to use for retrieving resources from the classpath.
 	 */
-	public ClasspathResourceManager(Class<?> baseClass) {
-		this(baseClass, new BasicClasspathResourceFinder(), false);
+	public ResourceManager(Class<?> baseClass) {
+		this(baseClass, new BasicResourceFinder(), false);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveClasspathResourceFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/SimpleResourceFinder.java
similarity index 69%
rename from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveClasspathResourceFinder.java
rename to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/SimpleResourceFinder.java
index 52a3e34..8c426f3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/RecursiveClasspathResourceFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/SimpleResourceFinder.java
@@ -12,27 +12,22 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.cp;
 
-import java.io.*;
-import java.util.*;
-
 /**
- * Same as {@link BasicClasspathResourceFinder} but searches for resources up the parent class hierarchy chain.
+ * Utility class for finding resources for a class.
+ *
+ * Same as {@link BasicResourceFinder} but doesn't search the file system for files.
  */
-public class RecursiveClasspathResourceFinder extends BasicClasspathResourceFinder {
+public class SimpleResourceFinder extends BasicResourceFinder {
 
 	/**
 	 * Reusable instance.
 	 */
-	public static final RecursiveClasspathResourceFinder INSTANCE = new RecursiveClasspathResourceFinder();
+	public static final SimpleResourceFinder INSTANCE = new SimpleResourceFinder();
 
-	@Override /* ResourceFinder2 */
-	public InputStream findResource(Class<?> baseClass, String name, Locale locale) throws IOException {
-		while (baseClass != null) {
-			InputStream is = findClasspathResource(baseClass, name, locale);
-			if (is != null)
-				return is;
-			baseClass = baseClass.getSuperclass();
-		}
-		return findFileSystemResource(name, locale);
+	/**
+	 * Constructor.
+	 */
+	public SimpleResourceFinder() {
+		super(false, false);
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/package.html b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/package.html
new file mode 100644
index 0000000..3e71d57
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/package.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML>
+<!--
+/***************************************************************************************************************************
+ * 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.
+ *
+ ***************************************************************************************************************************/
+ -->
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<style type="text/css">
+		/* For viewing in Page Designer */
+		@IMPORT url("../../../../../javadoc.css");
+
+		/* For viewing in REST interface */
+		@IMPORT url("../htdocs/javadoc.css");
+		body { 
+			margin: 20px; 
+		}	
+	</style>
+	<script>
+		/* Replace all @code and @link tags. */	
+		window.onload = function() {
+			document.body.innerHTML = document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>');
+			document.body.innerHTML = document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, '<code>$3</code>');
+		}
+	</script>
+</head>
+<body>
+<p>Classpath Utilities</p>
+
+<script>
+	function toggle(x) {
+		var div = x.nextSibling;
+		while (div != null && div.nodeType != 1)
+			div = div.nextSibling;
+		if (div != null) {
+			var d = div.style.display;
+			if (d == 'block' || d == '') {
+				div.style.display = 'none';
+				x.className += " closed";
+			} else {
+				div.style.display = 'block';
+				x.className = x.className.replace(/(?:^|\s)closed(?!\S)/g , '' );
+			}
+		}
+	}
+</script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReaderInputStream.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReaderInputStream.java
index 8f597b6..7aa1453 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReaderInputStream.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ReaderInputStream.java
@@ -140,7 +140,7 @@ public class ReaderInputStream extends InputStream {
 
     /**
      * Construct a new {@link ReaderInputStream} with a default input buffer size of
-     * {@value 1024} characters.
+     * <c>1024</c> characters.
      *
      * @param reader the target {@link Reader}
      * @param charset the charset encoding
@@ -162,7 +162,7 @@ public class ReaderInputStream extends InputStream {
 
     /**
      * Construct a new {@link ReaderInputStream} with a default input buffer size of
-     * {@value 1024} characters.
+     * <c>1024</c> characters.
      *
      * @param reader the target {@link Reader}
      * @param charsetName the name of the charset encoding
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinder.java
index 200d782..6be7ea6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinder.java
@@ -32,7 +32,7 @@ import java.util.*;
  * 		classpath relative to the base class, recursively searches up the parent class hierarchy.
  * </ul>
  *
- * @deprecated Use {@link org.apache.juneau.cp.ClasspathResourceFinder}.
+ * @deprecated Use {@link org.apache.juneau.cp.ResourceFinder}.
  */
 @Deprecated
 public interface ClasspathResourceFinder {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderBasic.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderBasic.java
index 75c7ccd..d5027c0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderBasic.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderBasic.java
@@ -25,7 +25,7 @@ import org.apache.juneau.cp.*;
  * looking in the classpath.
  * <br>Path traversals outside the working directory are not allowed for security reasons.
  *
- * @deprecated Use {@link SimpleClasspathResourceFinder}.
+ * @deprecated Use {@link SimpleResourceFinder}.
  */
 @Deprecated
 public class ClasspathResourceFinderBasic extends ClasspathResourceFinderSimple {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderRecursive.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderRecursive.java
index 4d2fde3..d4f4f73 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderRecursive.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderRecursive.java
@@ -20,7 +20,7 @@ import org.apache.juneau.cp.*;
 /**
  * Same as {@link ClasspathResourceFinderBasic} but searches for resources up the parent class hierarchy chain.
  *
- * @deprecated Use {@link BasicClasspathResourceFinder}.
+ * @deprecated Use {@link BasicResourceFinder}.
  */
 @Deprecated
 public class ClasspathResourceFinderRecursive extends ClasspathResourceFinderBasic {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderSimple.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderSimple.java
index 696eccf..b028adf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderSimple.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceFinderSimple.java
@@ -36,7 +36,7 @@ import org.apache.juneau.cp.*;
  * 	<li><js>"MyResource.txt"</js>
  * </ol>
  *
- * @deprecated Use {@link SimpleClasspathResourceFinder}.
+ * @deprecated Use {@link SimpleResourceFinder}.
  */
 @Deprecated
 public class ClasspathResourceFinderSimple implements ClasspathResourceFinder {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceManager.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceManager.java
index 3356576..0b6f654 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceManager.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ClasspathResourceManager.java
@@ -23,7 +23,7 @@ import org.apache.juneau.internal.*;
 /**
  * Class for retrieving and caching resource files from the classpath.
  *
- * @deprecated Use {@link org.apache.juneau.cp.ClasspathResourceManager}.
+ * @deprecated Use {@link org.apache.juneau.cp.ResourceManager}.
  */
 @Deprecated
 public final class ClasspathResourceManager {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
index 187ebc2..ea77882 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
@@ -51,7 +51,9 @@ import org.apache.juneau.collections.*;
  * 	<li>
  * 		This class is thread-safe.
  * </ul>
+ * @deprecated Use {@link org.apache.juneau.cp.MessageBundle}.
  */
+@Deprecated
 public class MessageBundle extends ResourceBundle {
 
 	private static final ThreadLocal<Locale> clientLocale = new ThreadLocal<>();
diff --git a/juneau-doc/docs/ReleaseNotes/7.1.0.html b/juneau-doc/docs/ReleaseNotes/7.1.0.html
index 05aa6ad..90c90ed 100644
--- a/juneau-doc/docs/ReleaseNotes/7.1.0.html
+++ b/juneau-doc/docs/ReleaseNotes/7.1.0.html
@@ -353,9 +353,9 @@
 			<li><c>getReaderResource(String,boolean,MediaType)</c> renamed to 
 				<dc>getClasspathReaderResource(String,boolean,MediaType)</dc>
 			<li><c>getReaderResource(String,boolean)</c> renamed to 
-				{@link oajr.RestRequest#getClasspathReaderResource(String,boolean) getClasspathReaderResource(String,boolean)}
+				{@link oajr.RestRequest#getClasspathHttpResource(String,boolean) getClasspathHttpResource(String,boolean)}
 			<li><c>getReaderResource(String)</c> renamed to 
-				{@link oajr.RestRequest#getClasspathReaderResource(String) getClasspathReaderResource(String)}
+				{@link oajr.RestRequest#getClasspathHttpResource(String) getClasspathHttpResource(String)}
 		</ul>
 	<li>
 		Changes to <dc>@RestResource</dc>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/02.RestRequest.html b/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/02.RestRequest.html
index 8540f41..050e578 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/02.RestRequest.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/02.RestRequest.html
@@ -42,6 +42,5 @@ RestRequest
 		<li class='jm'>{@link oajr.RestRequest#getVarResolverSession() getVarResolverSession()} - String variable resolver.
 		<li class='jm'>{@link oajr.RestRequest#getMessageBundle() getMessageBundle()} - Localized messages.
 		<li class='jm'>{@link oajr.RestRequest#getProperties() getProperties()} - Configuration properties.
-		<li class='jm'>{@link oajr.RestRequest#getClasspathReaderResource(String,boolean,MediaType,boolean) getClasspathReaderResource(String,boolean,MediaType,boolean)} - Various methods for retrieving static files from classpath.
 	</ul>
 </ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/12.ReaderResource.html b/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/12.ReaderResource.html
index 6ff15dd..e3b71aa 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/12.ReaderResource.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/12.ReaderResource.html
@@ -13,10 +13,10 @@
  ***************************************************************************************************************************/
  -->
 
-ReaderResource
+ReaderResource (TODO)
 
 <p>
-	The {@link oaj.http.ReaderResource} class is a convenience object for defining thread-safe
+	The <dc>ReaderResource</dc> class is a convenience object for defining thread-safe
 	reusable character-based responses.
 	In essence, it's a container for character data with optional response headers and support for
 	resolving SVL variables.
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/13.StreamResource.html b/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/13.StreamResource.html
index 5017e24..40e162a 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/13.StreamResource.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/06.RestMethod/13.StreamResource.html
@@ -13,10 +13,10 @@
  ***************************************************************************************************************************/
  -->
 
-StreamResource
+StreamResource (TODO)
 
 <p>
-	The {@link oaj.http.StreamResource} class is the binary equivalent to the {@link oaj.http.ReaderResource} object.
+	The <dc>oaj.http.StreamResource</dc> class is the binary equivalent to the <dc>ReaderResource</dc> object.
 	In essence, it's a container for binary data with optional response headers.
 </p>
 <p>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/08.Request.html b/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/08.Request.html
index 074d00d..38f3da6 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/08.Request.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/08.Request.html
@@ -22,7 +22,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Request}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Request#partParser() partParser} - Override the part parser.
+		<li class='jf'>{@link oaj.http.annotation.Request#parser() parser} - Override the part parser.
 	</ul>
 </ul>
 
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/09.Response.html b/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/09.Response.html
index 075c366..5accd6c 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/09.Response.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/10.HttpPartAnnotations/09.Response.html
@@ -27,7 +27,7 @@
 		<li class='jf'>{@link oaj.http.annotation.Response#example() example} - Serialized example.
 		<li class='jf'>{@link oaj.http.annotation.Response#examples() examples} - Serialized examples per media type.
 		<li class='jf'>{@link oaj.http.annotation.Response#headers() headers} - Swagger about headers added to response.
-		<li class='jf'>{@link oaj.http.annotation.Response#partSerializer() partSerializer} - Override the part serializer.
+		<li class='jf'>{@link oaj.http.annotation.Response#serializer() serializer} - Override the part serializer.
 		<li class='jf'>{@link oaj.http.annotation.Response#schema() schema} - Swagger schema.
 		<li class='jf'>{@link oaj.http.annotation.Response#value() value} - Free-form Swagger JSON.
 	</ul>
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html b/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html
index 90f4535..125c57e 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html
@@ -76,7 +76,7 @@ SVL Variables
 <ul class='javatree'>
 	<li class='jm'>{@link oajr.RestContext#getVarResolver()}
 	<li class='jm'>{@link oajr.RestRequest#getVarResolverSession()}
-	<li class='jm'>{@link oajr.RestRequest#getClasspathReaderResource(String,boolean)}
+	<li class='jm'>{@link oajr.RestRequest#getClasspathHttpResource(String,boolean)}
 </ul>
 <p>
 	There are two distinct groups of variables:
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client.html b/juneau-doc/docs/Topics/09.juneau-rest-client.html
index 9e2ed4a..f81c624 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client.html
@@ -142,7 +142,7 @@ juneau-rest-client
 		<li class='jm'>{@link oajr.client2.RestClient#options(Object) options(uri)}
 		<li class='jm'>{@link oajr.client2.RestClient#formPost(Object,Object) formPost(uri,body)} / {@link oajr.client2.RestClient#formPost(Object) formPost(uri)}
 		<li class='jm'>{@link oajr.client2.RestClient#formPostPairs(Object,Object...) formPostPairs(uri,parameters...)}
-		<li class='jm'>{@link oajr.client2.RestClient#request(HttpMethod,Object,Object) request(method,uri,body)}
+		<li class='jm'>{@link oajr.client2.RestClient#request(String,Object,Object) request(method,uri,body)}
 	</ul>
 </ul>
  
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html b/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html
index d2fa26a..5dc2ac1 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/02.RequestHeaders.html
@@ -38,7 +38,7 @@ Request Headers
 		<li class='jm'>{@link oajr.client2.RestRequest#header(AddFlag,String,Object,HttpPartSchema) header(AddFlag,String,Object,HttpPartSchema)}
 		<li class='jm'>{@link oajr.client2.RestRequest#header(Header) header(Header)}
 		<li class='jm'>{@link oajr.client2.RestRequest#headers(Object...) headers(Object...)}
-		<li class='jm'>{@link oajr.client2.RestRequest#headers(AddFlag,Object...) headers(AddFlag;Object...)}
+		<li class='jm'>{@link oajr.client2.RestRequest#headers(AddFlag,Object...) headers(AddFlag,Object...)}
 		<li class='jm'>{@link oajr.client2.RestRequest#headerPairs(Object...) headers(Object...)}
 	</ul>
 </ul>
@@ -121,12 +121,6 @@ Request Headers
 	replace existing headers with the same name.
 </p>
 
-TODO - Headers with variables.
-
-
-
-
-
 <ul class='notes'>
 	<li>Methods that pass in POJOs convert values to strings using the part serializers.  Methods that pass in <c>Header</c> or
 		<c>NameValuePair</c> objects use the values returned by that bean directly.
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html b/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html
index b89edad..c72668c 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/03.RequestQueryParameters.html
@@ -89,8 +89,6 @@ Request Query Parameters
 	replace existing query parameters with the same name.
 </p>
 
-TODO - NameValuePairs with variables.
-
 <ul class='notes'>
 	<li>Methods that pass in POJOs convert values to strings using the part serializers.  Methods that pass in <c>NameValuePair</c>
 		objects use the values returned by that bean directly.
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html b/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html
index 8674297..45aa0f8 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/04.RequestFormData.html
@@ -89,8 +89,6 @@ Request Form Data
 	replace existing form-data parameters with the same name.
 </p>
 
-TODO - NameValuePairs with variables.
-
 <ul class='notes'>
 	<li>Like header values, dynamic values and OpenAPI schemas are supported.
 	<li>Methods that pass in POJOs convert values to strings using the part serializers.  Methods that pass in <c>NameValuePair</c>
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html b/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html
index 6a5bcdf..3494fed 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/05.RequestBody.html
@@ -39,10 +39,6 @@ Request Body
 	<li class='jc'>
 		{@link java.io.InputStream} - Raw contents of {@code InputStream} will be serialized to remote resource.
 	<li class='jc'>
-		{@link oaj.http.ReaderResource}/{@link oaj.http.ReaderResourceBuilder} - Raw contents of {@code Reader} will be serialized to remote resource.  Additional headers and media type will be set on request.
-	<li class='jc'>
-		{@link oaj.http.StreamResource}/{@link oaj.http.StreamResourceBuilder} - Raw contents of {@code InputStream} will be serialized to remote resource.  Additional headers and media type will be set on request.
-	<li class='jc'>
 		{@link org.apache.http.HttpEntity} - Bypass Juneau serialization and pass HttpEntity directly to HttpClient.
 	<li class='jc'>
 		{@link oaj.http.NameValuePairSupplier} - Converted to a URL-encoded FORM post.
@@ -77,9 +73,6 @@ Request Body
 		.assertStatus().code().is(200);
 </p>
 
-TODO - Bodies with variables.
-
-
 <ul class='notes'>
 	<li>If the serializer on the client or request is explicitly set to <jk>null</jk>, POJOs will be converted to strings
 		using the registered part serializer as content type <js>"text/plain</js>.  If the part serializer is also <jk>null</jk>,
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/07.ResponseHeaders.html b/juneau-doc/docs/Topics/09.juneau-rest-client/07.ResponseHeaders.html
index 939ca8b..48b3995 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/07.ResponseHeaders.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/07.ResponseHeaders.html
@@ -62,14 +62,14 @@ Response Headers
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asOptional(Class) asOptional(Class&lt;T&gt;)} <jk>returns</jk> Optional&lt;T&gt;</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asMatcher(Pattern) asMatcher(Pattern)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asMatcher(String) asMatcher(String)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
-		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asHeader(Class) asHeader(Class&lt;T <jk>extends</jk> BasicHeader&gt; c)} <jk>returns</jk> {@link oaj.http.header.BasicHeader}</c>
+		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asHeader(Class) asHeader(Class&lt;T <jk>extends</jk> BasicHeader&gt; c)} <jk>returns</jk> {@link oaj.http.BasicHeader}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asStringHeader() asStringHeader()} <jk>returns</jk> {@link oaj.http.header.BasicIntegerHeader}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asIntegerHeader() asIntegerHeader()} <jk>returns</jk> {@link oaj.http.header.BasicStringHeader}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asLongHeader() asLongHeader()} <jk>returns</jk> {@link oaj.http.header.BasicLongHeader}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asDateHeader() asDateHeader()} <jk>returns</jk> {@link oaj.http.header.BasicDateHeader}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asCsvArrayHeader() asCsvArrayHeader()} <jk>returns</jk> {@link oaj.http.header.BasicCsvArrayHeader}</c>
-		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asEntityValidatorArrayHeader() asEntityValidatorArrayHeader()} <jk>returns</jk> {@link oaj.http.header.BasicEntityValidatorArrayHeader}</c>
-		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asRangeArrayHeader() asRangeArrayHeader()} <jk>returns</jk> {@link oaj.http.header.BasicRangeArrayHeader}</c>
+		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asEntityTagArrayHeader() asEntityTagArrayHeader()} <jk>returns</jk> {@link oaj.http.header.BasicEntityTagArrayHeader}</c>
+		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asStringRangeArrayHeader() asStringRangeArrayHeader()} <jk>returns</jk> {@link oaj.http.header.BasicStringRangeArrayHeader}</c>
 		<li class='jm'><c>{@link oajr.client2.RestResponseHeader#asUriHeader() asUriHeader()} <jk>returns</jk> {@link oaj.http.header.BasicUriHeader}</c>
 	</ul>
 </ul>
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html
index 28c7521..1105866 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html
@@ -101,7 +101,7 @@ specific language governing permissions and limitations under the License.
 		.rootUrl(<js>"http://localhost:10000/petstore"</js>)
 		.build();
 			
-	PetStore <jv>store</jv> = <jv>client<jv>.getRemote(PetStore.<jk>class</jk>);
+	PetStore <jv>store</jv> = <jv>client</jv>.getRemote(PetStore.<jk>class</jk>);
 </p>
 
 
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/03.Body.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/03.Body.html
index baa4b0b..f274f4c 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/03.Body.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/03.Body.html
@@ -13,6 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
+{8.1.4-updated}
 @Body
 
 <p>
@@ -22,7 +23,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Body}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Body#required() required} - Input validation.  Body must be present.
+		<li class='jf'>{@link oaj.http.annotation.Body#required() required}, {@link oaj.http.annotation.Body#r() r} - Input validation.  Body must be present.
 		<li class='jf'>{@link oaj.http.annotation.Body#schema() schema} - OpenAPI schema.
 	</ul>
 </ul>
@@ -34,7 +35,7 @@
 	<jk>public interface</jk> PetStore {
 
 		<ja>@RemoteMethod</ja>(path=<js>"/pets"</js>)
-		String addPet(<ja>@Body</ja> Pet <jv>pet</jv>;
+		String addPet(<ja>@Body</ja> Pet <jv>pet</jv>);
 	}
 </p>
 <p class='bpcode w800'>
@@ -98,12 +99,13 @@
 </p>
 <p class='bpcode w800'>
 	<jc>// Same as above but using free-form schema.</jc>
+	<jc>// Format is simplified-JSON (outer {} brackets are optional).</jc>
 	<ja>@RemoteMethod</ja>(path=<js>"/comma-delimited-pipe-delimited-ints"</js>)
 	String addCommaDelimitedPipeDelimitedInts(
 		<ja>@Body</ja>(
 			serializer=OpenApiSerializer.<jk>class</jk>,
 			schema=<ja>@Schema</ja>(
-				<js>"type:'array,collectionFormat:'pipes',items:[type:'array',items:[type:'int32',minimum:0,maximum:64]]"</js>
+				<js>"type:'array',collectionFormat:'pipes',items:[type:'array',items:[type:'int32',minimum:0,maximum:64]]"</js>
 			)
 		)
 		<jk>int</jk>[][] <jv>input</jv>
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/04.FormData.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/04.FormData.html
index 9a43d5c..90b3714 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/04.FormData.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/04.FormData.html
@@ -13,6 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
+{8.1.4-updated}
 @FormData
 
 <p>
@@ -22,28 +23,28 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.FormData}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.FormData#_default() _default} - Default value if not present.
-		<li class='jf'>{@link oaj.http.annotation.FormData#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link oaj.http.annotation.FormData#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link oaj.http.annotation.FormData#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link oaj.http.annotation.FormData#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.FormData#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.FormData#format() format} - The schema type format. 
+		<li class='jf'>{@link oaj.http.annotation.FormData#_default() _default}, {@link oaj.http.annotation.FormData#df() df} - Default value if not present.
+		<li class='jf'>{@link oaj.http.annotation.FormData#_enum() _enum}, {@link oaj.http.annotation.FormData#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link oaj.http.annotation.FormData#allowEmptyValue() allowEmptyValue}, {@link oaj.http.annotation.FormData#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link oaj.http.annotation.FormData#collectionFormat() collectionFormat}, {@link oaj.http.annotation.FormData#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link oaj.http.annotation.FormData#exclusiveMaximum() exclusiveMaximum}, {@link oaj.http.annotation.FormData#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.FormData#exclusiveMinimum() exclusiveMinimum}, {@link oaj.http.annotation.FormData#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.FormData#format() format}, {@link oaj.http.annotation.FormData#f() f} - The schema type format. 
 		<li class='jf'>{@link oaj.http.annotation.FormData#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.FormData#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link oaj.http.annotation.FormData#maxItems() maxItems} - Input validation.  Maximum number of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.FormData#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.FormData#minimum() minimum} - Input validation.  Minimum numeric value.
-		<li class='jf'>{@link oaj.http.annotation.FormData#minItems() minItems} - Input validation.  Minimum number of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.FormData#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.FormData#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link oaj.http.annotation.FormData#name() name} - Form data entry name.
-		<li class='jf'>{@link oaj.http.annotation.FormData#pattern() pattern}- Input validation.  Must match regular expression.
-		<li class='jf'>{@link oaj.http.annotation.FormData#required() required}- Input validation.  Form data entry must be present.
-		<li class='jf'>{@link oaj.http.annotation.FormData#serializer() serializer}- Override the part serializer.
-		<li class='jf'>{@link oaj.http.annotation.FormData#skipIfEmpty() skipIfEmpty}- Don't add if value is null or empty.
-		<li class='jf'>{@link oaj.http.annotation.FormData#type() type} - The schema type.
-		<li class='jf'>{@link oaj.http.annotation.FormData#uniqueItems() uniqueItems} - Input validation. Collections must contain unique items only.
+		<li class='jf'>{@link oaj.http.annotation.FormData#maximum() maximum}, {@link oaj.http.annotation.FormData#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link oaj.http.annotation.FormData#maxItems() maxItems}, {@link oaj.http.annotation.FormData#maxi() maxi} - Input validation.  Maximum number of items in a collection.
+		<li class='jf'>{@link oaj.http.annotation.FormData#maxLength() maxLength}, {@link oaj.http.annotation.FormData#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.FormData#minimum() minimum}, {@link oaj.http.annotation.FormData#min() min} - Input validation.  Minimum numeric value.
+		<li class='jf'>{@link oaj.http.annotation.FormData#minItems() minItems}, {@link oaj.http.annotation.FormData#mini() mini} - Input validation.  Minimum number of items in a collection.
+		<li class='jf'>{@link oaj.http.annotation.FormData#minLength() minLength}, {@link oaj.http.annotation.FormData#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.FormData#multipleOf() multipleOf}, {@link oaj.http.annotation.FormData#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link oaj.http.annotation.FormData#name() name}, {@link oaj.http.annotation.FormData#n() n} - Form data entry name.
+		<li class='jf'>{@link oaj.http.annotation.FormData#pattern() pattern}, {@link oaj.http.annotation.FormData#p() p} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link oaj.http.annotation.FormData#required() required}, {@link oaj.http.annotation.FormData#r() r} - Input validation.  Form data entry must be present.
+		<li class='jf'>{@link oaj.http.annotation.FormData#serializer() serializer} - Override the part serializer.
+		<li class='jf'>{@link oaj.http.annotation.FormData#skipIfEmpty() skipIfEmpty}, {@link oaj.http.annotation.FormData#sie() sie} - Don't add if value is null or empty.
+		<li class='jf'>{@link oaj.http.annotation.FormData#type() type}, {@link oaj.http.annotation.FormData#t() t} - The schema type.
+		<li class='jf'>{@link oaj.http.annotation.FormData#uniqueItems() uniqueItems}, {@link oaj.http.annotation.FormData#ui() ui} - Input validation. Collections must contain unique items only.
 	</ul>
 </ul>
 
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/05.Query.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/05.Query.html
index 1f4325c..55c0065 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/05.Query.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/05.Query.html
@@ -13,6 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
+{8.1.4-updated}
 @Query
 
 <p>
@@ -22,28 +23,28 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Query}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Query#_default() _default} - Default value if not present.
-		<li class='jf'>{@link oaj.http.annotation.Query#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link oaj.http.annotation.Query#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link oaj.http.annotation.Query#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link oaj.http.annotation.Query#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.Query#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.Query#format() format} - The schema type format. 
+		<li class='jf'>{@link oaj.http.annotation.Query#_default() _default}, {@link oaj.http.annotation.Query#df() df} - Default value if not present.
+		<li class='jf'>{@link oaj.http.annotation.Query#_enum() _enum}, {@link oaj.http.annotation.Query#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link oaj.http.annotation.Query#allowEmptyValue() allowEmptyValue}, {@link oaj.http.annotation.Query#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link oaj.http.annotation.Query#collectionFormat() collectionFormat}, {@link oaj.http.annotation.Query#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link oaj.http.annotation.Query#exclusiveMaximum() exclusiveMaximum}, {@link oaj.http.annotation.Query#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.Query#exclusiveMinimum() exclusiveMinimum}, {@link oaj.http.annotation.Query#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.Query#format() format}, {@link oaj.http.annotation.Query#f() f} - The schema type format. 
 		<li class='jf'>{@link oaj.http.annotation.Query#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.Query#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link oaj.http.annotation.Query#maxItems() maxItems} - Input validation.  Maximum number of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.Query#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.Query#minimum() minimum} - Input validation.  Minimum numeric value.
-		<li class='jf'>{@link oaj.http.annotation.Query#minItems() minItems} - Input validation.  Minimum number of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.Query#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.Query#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link oaj.http.annotation.Query#name() name} - Query parameter name.
-		<li class='jf'>{@link oaj.http.annotation.Query#pattern() pattern} - Input validation.  Must match regular expression.
-		<li class='jf'>{@link oaj.http.annotation.Query#required() required} - Input validation.  Query parameter must be present.
-		<li class='jf'>{@link oaj.http.annotation.Query#serializer() serializer} - Override the part serializer.
-		<li class='jf'>{@link oaj.http.annotation.Query#skipIfEmpty() skipIfEmpty}- Don't add if value is null or empty.
-		<li class='jf'>{@link oaj.http.annotation.Query#type() type} - The schema type.
-		<li class='jf'>{@link oaj.http.annotation.Query#uniqueItems() uniqueItems} - Input validation. Collections must contain unique items only.
+		<li class='jf'>{@link oaj.http.annotation.Query#maximum() maximum}, {@link oaj.http.annotation.Query#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link oaj.http.annotation.Query#maxItems() maxItems}, {@link oaj.http.annotation.Query#maxi() maxi} - Input validation.  Maximum number of items in a collection.
+		<li class='jf'>{@link oaj.http.annotation.Query#maxLength() maxLength}, {@link oaj.http.annotation.Query#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.Query#minimum() minimum}, {@link oaj.http.annotation.Query#min() min} - Input validation.  Minimum numeric value.
+		<li class='jf'>{@link oaj.http.annotation.Query#minItems() minItems}, {@link oaj.http.annotation.Query#mini() mini} - Input validation.  Minimum number of items in a collection.
+		<li class='jf'>{@link oaj.http.annotation.Query#minLength() minLength}, {@link oaj.http.annotation.Query#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.Query#multipleOf() multipleOf}, {@link oaj.http.annotation.Query#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link oaj.http.annotation.Query#name() name}, {@link oaj.http.annotation.Query#n() n} - Query parameter name.
+		<li class='jf'>{@link oaj.http.annotation.Query#pattern() pattern}, {@link oaj.http.annotation.Query#p() p} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link oaj.http.annotation.Query#required() required}, {@link oaj.http.annotation.Query#r() r} - Input validation.  Query parameter must be present.
+		<li class='jf'>{@link oaj.http.annotation.Query#serializer() serializer}  - Override the part serializer.
+		<li class='jf'>{@link oaj.http.annotation.Query#skipIfEmpty() skipIfEmpty}, {@link oaj.http.annotation.Query#sie() sie} - Don't add if value is null or empty.
+		<li class='jf'>{@link oaj.http.annotation.Query#type() type}, {@link oaj.http.annotation.Query#t() t} - The schema type.
+		<li class='jf'>{@link oaj.http.annotation.Query#uniqueItems() uniqueItems}, {@link oaj.http.annotation.Query#ui() ui} - Input validation. Collections must contain unique items only.
 	</ul>
 </ul>
 
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/06.Header.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/06.Header.html
index ea8f6dd..6ffa9a5 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/06.Header.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/06.Header.html
@@ -13,6 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
+{8.1.4-updated}
 @Header
 
 <p>
@@ -22,28 +23,28 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Header}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Header#_default() _default} - Default value if not present.
-		<li class='jf'>{@link oaj.http.annotation.Header#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link oaj.http.annotation.Header#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link oaj.http.annotation.Header#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link oaj.http.annotation.Header#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.Header#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.Header#format() format} - The schema type format. 
+		<li class='jf'>{@link oaj.http.annotation.Header#_default() _default}, {@link oaj.http.annotation.Header#df() df} - Default value if not present.
+		<li class='jf'>{@link oaj.http.annotation.Header#_enum() _enum}, {@link oaj.http.annotation.Header#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link oaj.http.annotation.Header#allowEmptyValue() allowEmptyValue}, {@link oaj.http.annotation.Header#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link oaj.http.annotation.Header#collectionFormat() collectionFormat}, {@link oaj.http.annotation.Header#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link oaj.http.annotation.Header#exclusiveMaximum() exclusiveMaximum}, {@link oaj.http.annotation.Header#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.Header#exclusiveMinimum() exclusiveMinimum}, {@link oaj.http.annotation.Header#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.Header#format() format}, {@link oaj.http.annotation.Header#f() f} - The schema type format. 
 		<li class='jf'>{@link oaj.http.annotation.Header#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.Header#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link oaj.http.annotation.Header#maxItems() maxItems} - Input validation.  Maximum number of items in a collection. 
-		<li class='jf'>{@link oaj.http.annotation.Header#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.Header#minimum() minimum} - Input validation.  Minimum numeric value. 
-		<li class='jf'>{@link oaj.http.annotation.Header#minItems() minItems} - Input validation.  Minimum number of items in a collection. 
-		<li class='jf'>{@link oaj.http.annotation.Header#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.Header#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link oaj.http.annotation.Header#name() name} - Header name.
-		<li class='jf'>{@link oaj.http.annotation.Header#pattern() pattern} - Input validation.  Must match regular expression.
-		<li class='jf'>{@link oaj.http.annotation.Header#required() required} - Input validation.  Header must be present.
+		<li class='jf'>{@link oaj.http.annotation.Header#maximum() maximum}, {@link oaj.http.annotation.Header#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link oaj.http.annotation.Header#maxItems() maxItems}, {@link oaj.http.annotation.Header#maxi() maxi} - Input validation.  Maximum number of items in a collection. 
+		<li class='jf'>{@link oaj.http.annotation.Header#maxLength() maxLength}, {@link oaj.http.annotation.Header#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.Header#minimum() minimum}, {@link oaj.http.annotation.Header#min() min} - Input validation.  Minimum numeric value. 
+		<li class='jf'>{@link oaj.http.annotation.Header#minItems() minItems}, {@link oaj.http.annotation.Header#mini() mini} - Input validation.  Minimum number of items in a collection. 
+		<li class='jf'>{@link oaj.http.annotation.Header#minLength() minLength}, {@link oaj.http.annotation.Header#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.Header#multipleOf() multipleOf}, {@link oaj.http.annotation.Header#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link oaj.http.annotation.Header#name() name}, {@link oaj.http.annotation.Header#n() n} - Header name.
+		<li class='jf'>{@link oaj.http.annotation.Header#pattern() pattern}, {@link oaj.http.annotation.Header#p() p} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link oaj.http.annotation.Header#required() required}, {@link oaj.http.annotation.Header#r() r} - Input validation.  Header must be present.
 		<li class='jf'>{@link oaj.http.annotation.Header#serializer() serializer} - Override the part serializer.
-		<li class='jf'>{@link oaj.http.annotation.Header#skipIfEmpty() skipIfEmpty} - Don't add if value is null or empty.
-		<li class='jf'>{@link oaj.http.annotation.Header#type() type} - The schema type.
-		<li class='jf'>{@link oaj.http.annotation.Header#uniqueItems() uniqueItems} - Input validation. Collections must contain unique items only.
+		<li class='jf'>{@link oaj.http.annotation.Header#skipIfEmpty() skipIfEmpty}, {@link oaj.http.annotation.Header#sie() sie} - Don't add if value is null or empty.
+		<li class='jf'>{@link oaj.http.annotation.Header#type() type}, {@link oaj.http.annotation.Header#t() t} - The schema type.
+		<li class='jf'>{@link oaj.http.annotation.Header#uniqueItems() uniqueItems}, {@link oaj.http.annotation.Header#ui() ui} - Input validation. Collections must contain unique items only.
 	</ul>
 </ul>
 
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/07.Path.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/07.Path.html
index 93c1c5f..dfebbb9 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/07.Path.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/07.Path.html
@@ -13,6 +13,7 @@
  ***************************************************************************************************************************/
  -->
 
+{8.1.4-updated}
 @Path
 
 <p>
@@ -22,22 +23,22 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Path}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Path#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link oaj.http.annotation.Path#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link oaj.http.annotation.Path#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link oaj.http.annotation.Path#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.Path#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link oaj.http.annotation.Path#format() format} - The schema type format. 
+		<li class='jf'>{@link oaj.http.annotation.Path#_enum() _enum}, {@link oaj.http.annotation.Path#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link oaj.http.annotation.Path#allowEmptyValue() allowEmptyValue}, {@link oaj.http.annotation.Path#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link oaj.http.annotation.Path#collectionFormat() collectionFormat}, {@link oaj.http.annotation.Path#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link oaj.http.annotation.Path#exclusiveMaximum() exclusiveMaximum}, {@link oaj.http.annotation.Path#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.Path#exclusiveMinimum() exclusiveMinimum}, {@link oaj.http.annotation.Path#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link oaj.http.annotation.Path#format() format}, {@link oaj.http.annotation.Path#f() f} - The schema type format. 
 		<li class='jf'>{@link oaj.http.annotation.Path#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link oaj.http.annotation.Path#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link oaj.http.annotation.Path#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.Path#minimum() minimum} - Input validation.  Minimum numeric value.
-		<li class='jf'>{@link oaj.http.annotation.Path#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link oaj.http.annotation.Path#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link oaj.http.annotation.Path#name() name} - Path variable name.
-		<li class='jf'>{@link oaj.http.annotation.Path#pattern() pattern} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link oaj.http.annotation.Path#maximum() maximum}, {@link oaj.http.annotation.Path#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link oaj.http.annotation.Path#maxLength() maxLength}, {@link oaj.http.annotation.Path#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.Path#minimum() minimum}, {@link oaj.http.annotation.Path#min() min} - Input validation.  Minimum numeric value.
+		<li class='jf'>{@link oaj.http.annotation.Path#minLength() minLength}, {@link oaj.http.annotation.Path#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link oaj.http.annotation.Path#multipleOf() multipleOf}, {@link oaj.http.annotation.Path#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link oaj.http.annotation.Path#name() name}, {@link oaj.http.annotation.Path#n() n} - Path variable name.
+		<li class='jf'>{@link oaj.http.annotation.Path#pattern() pattern}, {@link oaj.http.annotation.Path#p() p} - Input validation.  Must match regular expression.
 		<li class='jf'>{@link oaj.http.annotation.Path#serializer() serializer} - Override the part serializer.
-		<li class='jf'>{@link oaj.http.annotation.Path#type() type} - The schema type.
+		<li class='jf'>{@link oaj.http.annotation.Path#type() type}, {@link oaj.http.annotation.Path#t() t} - The schema type.
 	</ul>
 </ul>
 
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/08.Request.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/08.Request.html
index a8279ea..17e3c9b 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/08.Request.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/08.Request.html
@@ -23,7 +23,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Request}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Request#partSerializer() partSerializer} - Override the part serializer.
+		<li class='jf'>{@link oaj.http.annotation.Request#serializer() serializer} - Override the part serializer.
 	</ul>
 </ul>
 
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/09.Response.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/09.Response.html
index 466cea3..9ed1818 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/09.Response.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/09.Response.html
@@ -21,7 +21,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link oaj.http.annotation.Response}
 	<ul>
-		<li class='jf'>{@link oaj.http.annotation.Response#partParser() partParser} - Override the part parser.
+		<li class='jf'>{@link oaj.http.annotation.Response#parser() parser} - Override the part parser.
 	</ul>
 </ul>
 <p>
diff --git a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/10.DualPurposeInterfaces.html b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/10.DualPurposeInterfaces.html
index 830aaf7..7e7c9fb 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/10.DualPurposeInterfaces.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/10.DualPurposeInterfaces.html
@@ -107,7 +107,8 @@ Dual-purpose (end-to-end) interfaces
 </p>	
 <p>
 	In the example above, we chose to add the <ja>@RestMethod</ja> annotation to the implementation class.  
-	However, they could have been added to the interface instead.
+	However, they could have been added to the interface instead.  It's personal preference where you want to place
+	the annotations.
 </p>
 <p>
 	Note how we didn't need to use the <ja>@Header</ja> and <ja>@Path</ja> annotations in our implementation since
diff --git a/juneau-doc/docs/Topics/10.juneau-rest-mock/01.MockRestClient.html b/juneau-doc/docs/Topics/10.juneau-rest-mock/01.MockRestClient.html
index ea8c419..d5fd090 100644
--- a/juneau-doc/docs/Topics/10.juneau-rest-mock/01.MockRestClient.html
+++ b/juneau-doc/docs/Topics/10.juneau-rest-mock/01.MockRestClient.html
@@ -46,8 +46,8 @@ MockRestClient
 				name=<jsf>PUT</jsf>, 
 				path=<js>"/echo"</js>
 			)
-			<jk>public</jk> MyBean echo(<ja>@Body</ja> MyBean bean) {
-				<jk>return</jk> bean;
+			<jk>public</jk> MyBean echo(<ja>@Body</ja> MyBean <jv>bean</jv>) {
+				<jk>return</jk> <jv>bean</jv>;
 			}
 		}
 		
@@ -55,20 +55,20 @@ MockRestClient
 		<ja>@Test</ja>
 		<jk>public void</jk> testEcho() <jk>throws</jk> Exception {
 		
-			MyBean myBean = <jk>new</jk> MyBean();
+			MyBean <jv>myBean</jv> = <jk>new</jk> MyBean();
 		
 			<jc>// Do a round-trip on the bean through the REST interface</jc>
-			myBean = MockRestClient
+			<jv>myBean</jv> = MockRestClient
 				.<jsm>create</jsm>(EchoRest.<jk>class</jk>)
 				.simpleJson()
 				.build()
-				.put(<js>"/echo"</js>, myBean)
+				.put(<js>"/echo"</js>, <jv>myBean</jv>)
 				.run()
 				.assertStatus().is(200)
 				.assertBody().is(<js>"{foo:1}"</js>)
 				.getBody().as(MyBean.<jk>class</jk>);
 				
-			<jsm>assertEquals</jsm>(1, myBean.<jf>foo</jf>);
+			<jsm>assertEquals</jsm>(1, <jv>myBean</jv>.<jf>foo</jf>);
 		}
 	}
 </p>
@@ -80,22 +80,22 @@ MockRestClient
 	<jk>public void</jk> testEcho() <jk>throws</jk> Exception {
       
 		<jc>// Instantiate our mock client.</jc>
-		MockRestClient client = MockRestClient
+		MockRestClient <jv>client</jv> = MockRestClient
 			.<jsm>create</jsm>(EchoRest.<jk>class</jk>)
 			.simpleJson()
 			.build();
       
 		<jc>// Create a request.</jc>
-		RestRequest req = client.put(<js>"/echo"</js>, myBean);
+		RestRequest <jv>req</jv> = <jv>client</jv>.put(<js>"/echo"</js>, <jv>myBean</jv>);
       
 		<jc>// Execute it (by calling RestCallHandler.service(...) and then returning the response object).</jc>
-		RestResponse res = req.run();
+		RestResponse <jv>res</jv> = <jv>req</jv>.run();
       
 		<jc>// Run assertion tests on the results.</jc>
-		res.assertStatus().is(200);
-		res.assertBody().is(<js>"'foo'"</js>);
+		<jv>res</jv>.assertStatus().is(200);
+		<jv>res</jv>.assertBody().is(<js>"'foo'"</js>);
 		
-		myBean = res.getBody().as(MyBean.<jk>class</jk>);
+		<jv>myBean</jv> = <jv>res</jv>.getBody().as(MyBean.<jk>class</jk>);
 	}
 </p>
 <p>
@@ -128,11 +128,11 @@ MockRestClient
 
 	<ja>@Test</ja>
 	<jk>public void</jk> mytest() <jk>throws</jk> Exception {
-		MockRestClient a = MockRestClient.<jsm>build</jsm>(A.<jk>class</jk>);
+		MockRestClient <jv>client</jv> = MockRestClient.<jsm>build</jsm>(A.<jk>class</jk>);
 
 		<jc>// Admin user should get 200, but anyone else should get 403-Unauthorized.</jc>
-		a.get().roles(<js>"ADMIN"</js>).run().assertStatus().is(200);
-		a.get().roles(<js>"USER"</js>).run().assertStatus().is(403);
+		<jv>client</jv>.get().roles(<js>"ADMIN"</js>).run().assertStatus().is(200);
+		<jv>client</jv>.get().roles(<js>"USER"</js>).run().assertStatus().is(403);
 	}
 </p>
 <hr>
@@ -141,7 +141,7 @@ MockRestClient
 	be sent to the console:
 </p>
 <p class='bpcode w800'>
-	MockRestClient mr = MockRestClient
+	MockRestClient <jv>client</jv> = MockRestClient
 		.<jsm>create</jsm>(MyRest.<jk>class</jk>)
 		.debug()
 		.simpleJson()
@@ -159,7 +159,7 @@ MockRestClient
 	<jk>public interface</jk> MyRemoteInterface {
 	
 		<ja>@RemoteMethod</ja>(httpMethod=<js>"GET"</js>, path=<js>"/echoQuery"</js>)
-		<jk>public int</jk> echoQuery(<ja>@Query</ja>(name=<js>"id"</js>) <jk>int</jk> id);
+		<jk>public int</jk> echoQuery(<ja>@Query</ja>(name=<js>"id"</js>) <jk>int</jk> <jv>id</jv>);
 	}
 
 	<jc>// Our mocked-up REST interface to test against.</jc>
@@ -167,20 +167,20 @@ MockRestClient
 	<jk>public class</jk> MyRest {
 	
 		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/echoQuery"</js>)
-		<jk>public int</jk> echoQuery(<ja>@Query</ja>(<js>"id"</js>) String id) {
-			<jk>return</jk> id;
+		<jk>public int</jk> echoQuery(<ja>@Query</ja>(<js>"id"</js>) String <jv>id</jv>) {
+			<jk>return</jk> <jv>id</jv>;
 		}
 	}
 
 	<ja>@Test</ja>
 	<jk>public void</jk> testProxy() {
-		MyRemoteInterface mri = MockRestClient
+		MyRemoteInterface <jv>mri</jv> = MockRestClient
 			.create(MyRest.<jk>class</jk>)
 			.json()
 			.build()
 			.getRemote(MyRemoteInterface.<jk>class</jk>);
 		
-		<jsm>assertEquals</jsm>(123, mri.echoQuery(123));
+		<jsm>assertEquals</jsm>(123, <jv>mri</jv>.echoQuery(123));
 	}
 </p>
 
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 8a7807a..921bec4 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -371,8 +371,8 @@
 			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.RestMethodPath'>@RestMethod(path)</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.RequestPathMatch'>RequestPathMatch</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.MethodReturnTypes'>Method Return Types</a></p>
-			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.ReaderResource'>ReaderResource</a></p>
-			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.StreamResource'>StreamResource</a></p>
+			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.ReaderResource'>ReaderResource (TODO)</a></p>
+			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.StreamResource'>StreamResource (TODO)</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.RestMethodMatchers'>@RestMethod(matchers)</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.PredefinedResponses'>Predefined Responses</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-server.RestMethod.PredefinedExceptions'>Predefined Exceptions</a></p>
@@ -474,11 +474,11 @@
 		<ol>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Remote'>@Remote</a><span class='update'>8.1.2-updated,<b>8.1.4-updated</b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a><span class='update'><b>8.1.4-updated</b></span></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Body'>@Body</a></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.FormData'>@FormData</a></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Query'>@Query</a></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Header'>@Header</a></p>
-			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Path'>@Path</a></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Body'>@Body</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.FormData'>@FormData</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Query'>@Query</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Header'>@Header</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Path'>@Path</a><span class='update'><b>8.1.4-updated</b></span></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Request'>@Request</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.Response'>@Response</a></p>
 			<li><p><a class='doclink' href='#juneau-rest-client.RestProxies.DualPurposeInterfaces'>Dual-purpose (end-to-end) interfaces</a><span class='update'>8.0.0-new</span></p>
@@ -14706,7 +14706,6 @@
 		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getVarResolverSession() getVarResolverSession()} - String variable resolver.
 		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getMessageBundle() getMessageBundle()} - Localized messages.
 		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getProperties() getProperties()} - Configuration properties.
-		<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getClasspathReaderResource(String,boolean,MediaType,boolean) getClasspathReaderResource(String,boolean,MediaType,boolean)} - Various methods for retrieving static files from classpath.
 	</ul>
 </ul>
 </div><!-- END: 6.6.2 - juneau-rest-server.RestMethod.RestRequest -->
@@ -15209,10 +15208,10 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestMethod.ReaderResource' id='juneau-rest-server.RestMethod.ReaderResource'>6.6.12 - ReaderResource</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestMethod.ReaderResource' id='juneau-rest-server.RestMethod.ReaderResource'>6.6.12 - ReaderResource (TODO)</a></h4>
 <div class='topic'><!-- START: 6.6.12 - juneau-rest-server.RestMethod.ReaderResource -->
 <p>
-	The {@link org.apache.juneau.http.ReaderResource} class is a convenience object for defining thread-safe
+	The <dc>ReaderResource</dc> class is a convenience object for defining thread-safe
 	reusable character-based responses.
 	In essence, it's a container for character data with optional response headers and support for
 	resolving SVL variables.
@@ -15240,10 +15239,10 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestMethod.StreamResource' id='juneau-rest-server.RestMethod.StreamResource'>6.6.13 - StreamResource</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-server.RestMethod.StreamResource' id='juneau-rest-server.RestMethod.StreamResource'>6.6.13 - StreamResource (TODO)</a></h4>
 <div class='topic'><!-- START: 6.6.13 - juneau-rest-server.RestMethod.StreamResource -->
 <p>
-	The {@link org.apache.juneau.http.StreamResource} class is the binary equivalent to the {@link org.apache.juneau.http.ReaderResource} object.
+	The <dc>org.apache.juneau.http.StreamResource</dc> class is the binary equivalent to the <dc>ReaderResource</dc> object.
 	In essence, it's a container for binary data with optional response headers.
 </p>
 <p>
@@ -17304,7 +17303,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Request}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Request#partParser() partParser} - Override the part parser.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Request#parser() parser} - Override the part parser.
 	</ul>
 </ul>
 
@@ -17398,7 +17397,7 @@
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#example() example} - Serialized example.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#examples() examples} - Serialized examples per media type.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#headers() headers} - Swagger about headers added to response.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#partSerializer() partSerializer} - Override the part serializer.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#serializer() serializer} - Override the part serializer.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#schema() schema} - Swagger schema.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#value() value} - Free-form Swagger JSON.
 	</ul>
@@ -18883,7 +18882,7 @@
 <ul class='javatree'>
 	<li class='jm'>{@link org.apache.juneau.rest.RestContext#getVarResolver()}
 	<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getVarResolverSession()}
-	<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getClasspathReaderResource(String,boolean)}
+	<li class='jm'>{@link org.apache.juneau.rest.RestRequest#getClasspathHttpResource(String,boolean)}
 </ul>
 <p>
 	There are two distinct groups of variables:
@@ -18945,7 +18944,7 @@
 		<td class='code'>$SW{arg,p1:then1[,p2:then2...]}</td>
 		<td style='text-align:center;font-weight:bold'>yes</td>
 		<td style='text-align:center;font-weight:bold'>yes</td>
-		<td class='code'>$SW{$P{os.name},*win*:Windows,*:Something else}</td>
+		<td class='code'>$SW{$S{os.name},*win*:Windows,*:Something else}</td>
 	</tr>
 	<tr class='dark'>
 		<td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td>
@@ -18959,7 +18958,7 @@
 		<td class='code'>$PM{arg,pattern}</td>
 		<td style='text-align:center;font-weight:bold'>yes</td>
 		<td style='text-align:center;font-weight:bold'>yes</td>
-		<td class='code'>$PM{$P{os.name},*win*}</td>
+		<td class='code'>$PM{$S{os.name},*win*}</td>
 	</tr>
 	<tr class='dark'>
 		<td>{@link org.apache.juneau.svl.vars.NotEmptyVar}</td>
@@ -22678,7 +22677,7 @@
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestClient#options(Object) options(uri)}
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestClient#formPost(Object,Object) formPost(uri,body)} / {@link org.apache.juneau.rest.client2.RestClient#formPost(Object) formPost(uri)}
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestClient#formPostPairs(Object,Object...) formPostPairs(uri,parameters...)}
-		<li class='jm'>{@link org.apache.juneau.rest.client2.RestClient#request(HttpMethod,Object,Object) request(method,uri,body)}
+		<li class='jm'>{@link org.apache.juneau.rest.client2.RestClient#request(String,Object,Object) request(method,uri,body)}
 	</ul>
 </ul>
  
@@ -22848,7 +22847,7 @@
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#header(AddFlag,String,Object,HttpPartSchema) header(AddFlag,String,Object,HttpPartSchema)}
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#header(Header) header(Header)}
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#headers(Object...) headers(Object...)}
-		<li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#headers(AddFlag,Object...) headers(AddFlag;Object...)}
+		<li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#headers(AddFlag,Object...) headers(AddFlag,Object...)}
 		<li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#headerPairs(Object...) headers(Object...)}
 	</ul>
 </ul>
@@ -22930,6 +22929,7 @@
 	The methods with {@link org.apache.juneau.AddFlag} parameters allow you to control whether new headers get appended, prepended, or
 	replace existing headers with the same name.
 </p>
+
 <ul class='notes'>
 	<li>Methods that pass in POJOs convert values to strings using the part serializers.  Methods that pass in <c>Header</c> or
 		<c>NameValuePair</c> objects use the values returned by that bean directly.
@@ -23133,10 +23133,6 @@
 	<li class='jc'>
 		{@link java.io.InputStream} - Raw contents of {@code InputStream} will be serialized to remote resource.
 	<li class='jc'>
-		{@link org.apache.juneau.http.ReaderResource}/{@link org.apache.juneau.http.ReaderResourceBuilder} - Raw contents of {@code Reader} will be serialized to remote resource.  Additional headers and media type will be set on request.
-	<li class='jc'>
-		{@link org.apache.juneau.http.StreamResource}/{@link org.apache.juneau.http.StreamResourceBuilder} - Raw contents of {@code InputStream} will be serialized to remote resource.  Additional headers and media type will be set on request.
-	<li class='jc'>
 		{@link org.apache.http.HttpEntity} - Bypass Juneau serialization and pass HttpEntity directly to HttpClient.
 	<li class='jc'>
 		{@link org.apache.juneau.http.NameValuePairSupplier} - Converted to a URL-encoded FORM post.
@@ -23292,14 +23288,14 @@
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asOptional(Class) asOptional(Class&lt;T&gt;)} <jk>returns</jk> Optional&lt;T&gt;</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asMatcher(Pattern) asMatcher(Pattern)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asMatcher(String) asMatcher(String)} <jk>returns</jk> {@link java.util.regex.Matcher}</c>
-		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asHeader(Class) asHeader(Class&lt;T <jk>extends</jk> BasicHeader&gt; c)} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicHeader}</c>
+		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asHeader(Class) asHeader(Class&lt;T <jk>extends</jk> BasicHeader&gt; c)} <jk>returns</jk> {@link org.apache.juneau.http.BasicHeader}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asStringHeader() asStringHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicIntegerHeader}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asIntegerHeader() asIntegerHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicStringHeader}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asLongHeader() asLongHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicLongHeader}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asDateHeader() asDateHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicDateHeader}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asCsvArrayHeader() asCsvArrayHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicCsvArrayHeader}</c>
-		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asEntityValidatorArrayHeader() asEntityValidatorArrayHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicEntityValidatorArrayHeader}</c>
-		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asRangeArrayHeader() asRangeArrayHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicRangeArrayHeader}</c>
+		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asEntityTagArrayHeader() asEntityTagArrayHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicEntityTagArrayHeader}</c>
+		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asStringRangeArrayHeader() asStringRangeArrayHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicStringRangeArrayHeader}</c>
 		<li class='jm'><c>{@link org.apache.juneau.rest.client2.RestResponseHeader#asUriHeader() asUriHeader()} <jk>returns</jk> {@link org.apache.juneau.http.header.BasicUriHeader}</c>
 	</ul>
 </ul>
@@ -23746,7 +23742,7 @@
 <h5 class='figure'>Example:</h5>
 <p class='bpcode w800'>	
 	<jc>// URL is specified via a system property.</jc>
-	<ja>@Remote</ja>(path=<js>"$P{PetStoreUrl}"</js>)
+	<ja>@Remote</ja>(path=<js>"$S{PetStoreUrl}"</js>)
 	<jk>public interface</jk> PetStore {...}
 </p>
 
@@ -23785,7 +23781,7 @@
 		.rootUrl(<js>"http://localhost:10000/petstore"</js>)
 		.build();
 			
-	PetStore <jv>store</jv> = <jv>client<jv>.getRemote(PetStore.<jk>class</jk>);
+	PetStore <jv>store</jv> = <jv>client</jv>.getRemote(PetStore.<jk>class</jk>);
 </p>
 
 
@@ -23801,7 +23797,7 @@
 		path=<js>"/petstore"</js>,
 		headers={
 			<js>"Foo: bar"</js>,
-			<js>"Baz: $P{bazProperty}"</js>
+			<js>"Baz: $S{bazProperty}"</js>
 		},
 		headerSupplier=MyDynamicHeaderSupplier.<jk>class</jk>
 	)
@@ -24019,7 +24015,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Body' id='juneau-rest-client.RestProxies.Body'>9.11.3 - @Body</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Body' id='juneau-rest-client.RestProxies.Body'>9.11.3 - @Body</a><span class='update'><b>8.1.4-updated</b></span></h4>
 <div class='topic'><!-- START: 9.11.3 - juneau-rest-client.RestProxies.Body -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Body @Body} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
@@ -24028,7 +24024,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Body}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Body#required() required} - Input validation.  Body must be present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Body#required() required}, {@link org.apache.juneau.http.annotation.Body#r() r} - Input validation.  Body must be present.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Body#schema() schema} - OpenAPI schema.
 	</ul>
 </ul>
@@ -24040,7 +24036,7 @@
 	<jk>public interface</jk> PetStore {
 
 		<ja>@RemoteMethod</ja>(path=<js>"/pets"</js>)
-		String addPet(<ja>@Body</ja> Pet <jv>pet</jv>;
+		String addPet(<ja>@Body</ja> Pet <jv>pet</jv>);
 	}
 </p>
 <p class='bpcode w800'>
@@ -24104,12 +24100,13 @@
 </p>
 <p class='bpcode w800'>
 	<jc>// Same as above but using free-form schema.</jc>
+	<jc>// Format is simplified-JSON (outer {} brackets are optional).</jc>
 	<ja>@RemoteMethod</ja>(path=<js>"/comma-delimited-pipe-delimited-ints"</js>)
 	String addCommaDelimitedPipeDelimitedInts(
 		<ja>@Body</ja>(
 			serializer=OpenApiSerializer.<jk>class</jk>,
 			schema=<ja>@Schema</ja>(
-				<js>"type:'array,collectionFormat:'pipes',items:[type:'array',items:[type:'int32',minimum:0,maximum:64]]"</js>
+				<js>"type:'array',collectionFormat:'pipes',items:[type:'array',items:[type:'int32',minimum:0,maximum:64]]"</js>
 			)
 		)
 		<jk>int</jk>[][] <jv>input</jv>
@@ -24127,7 +24124,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.FormData' id='juneau-rest-client.RestProxies.FormData'>9.11.4 - @FormData</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.FormData' id='juneau-rest-client.RestProxies.FormData'>9.11.4 - @FormData</a><span class='update'><b>8.1.4-updated</b></span></h4>
 <div class='topic'><!-- START: 9.11.4 - juneau-rest-client.RestProxies.FormData -->
 <p>
 	The {@link org.apache.juneau.http.annotation.FormData @FormData} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
@@ -24136,28 +24133,28 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.FormData}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#_default() _default} - Default value if not present.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#format() format} - The schema type format. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#_default() _default}, {@link org.apache.juneau.http.annotation.FormData#df() df} - Default value if not present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#_enum() _enum}, {@link org.apache.juneau.http.annotation.FormData#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#allowEmptyValue() allowEmptyValue}, {@link org.apache.juneau.http.annotation.FormData#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#collectionFormat() collectionFormat}, {@link org.apache.juneau.http.annotation.FormData#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#exclusiveMaximum() exclusiveMaximum}, {@link org.apache.juneau.http.annotation.FormData#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#exclusiveMinimum() exclusiveMinimum}, {@link org.apache.juneau.http.annotation.FormData#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#format() format}, {@link org.apache.juneau.http.annotation.FormData#f() f} - The schema type format. 
 		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#maxItems() maxItems} - Input validation.  Maximum number of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#minimum() minimum} - Input validation.  Minimum numeric value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#minItems() minItems} - Input validation.  Minimum number of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#name() name} - Form data entry name.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#pattern() pattern}- Input validation.  Must match regular expression.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#required() required}- Input validation.  Form data entry must be present.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#serializer() serializer}- Override the part serializer.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#skipIfEmpty() skipIfEmpty}- Don't add if value is null or empty.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#type() type} - The schema type.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#uniqueItems() uniqueItems} - Input validation. Collections must contain unique items only.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#maximum() maximum}, {@link org.apache.juneau.http.annotation.FormData#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#maxItems() maxItems}, {@link org.apache.juneau.http.annotation.FormData#maxi() maxi} - Input validation.  Maximum number of items in a collection.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#maxLength() maxLength}, {@link org.apache.juneau.http.annotation.FormData#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#minimum() minimum}, {@link org.apache.juneau.http.annotation.FormData#min() min} - Input validation.  Minimum numeric value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#minItems() minItems}, {@link org.apache.juneau.http.annotation.FormData#mini() mini} - Input validation.  Minimum number of items in a collection.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#minLength() minLength}, {@link org.apache.juneau.http.annotation.FormData#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#multipleOf() multipleOf}, {@link org.apache.juneau.http.annotation.FormData#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#name() name}, {@link org.apache.juneau.http.annotation.FormData#n() n} - Form data entry name.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#pattern() pattern}, {@link org.apache.juneau.http.annotation.FormData#p() p} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#required() required}, {@link org.apache.juneau.http.annotation.FormData#r() r} - Input validation.  Form data entry must be present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#serializer() serializer} - Override the part serializer.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#skipIfEmpty() skipIfEmpty}, {@link org.apache.juneau.http.annotation.FormData#sie() sie} - Don't add if value is null or empty.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#type() type}, {@link org.apache.juneau.http.annotation.FormData#t() t} - The schema type.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.FormData#uniqueItems() uniqueItems}, {@link org.apache.juneau.http.annotation.FormData#ui() ui} - Input validation. Collections must contain unique items only.
 	</ul>
 </ul>
 
@@ -24234,7 +24231,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Query' id='juneau-rest-client.RestProxies.Query'>9.11.5 - @Query</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Query' id='juneau-rest-client.RestProxies.Query'>9.11.5 - @Query</a><span class='update'><b>8.1.4-updated</b></span></h4>
 <div class='topic'><!-- START: 9.11.5 - juneau-rest-client.RestProxies.Query -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Query @Query} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
@@ -24243,28 +24240,28 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Query}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#_default() _default} - Default value if not present.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#format() format} - The schema type format. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#_default() _default}, {@link org.apache.juneau.http.annotation.Query#df() df} - Default value if not present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#_enum() _enum}, {@link org.apache.juneau.http.annotation.Query#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#allowEmptyValue() allowEmptyValue}, {@link org.apache.juneau.http.annotation.Query#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#collectionFormat() collectionFormat}, {@link org.apache.juneau.http.annotation.Query#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#exclusiveMaximum() exclusiveMaximum}, {@link org.apache.juneau.http.annotation.Query#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#exclusiveMinimum() exclusiveMinimum}, {@link org.apache.juneau.http.annotation.Query#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#format() format}, {@link org.apache.juneau.http.annotation.Query#f() f} - The schema type format. 
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#maxItems() maxItems} - Input validation.  Maximum number of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#minimum() minimum} - Input validation.  Minimum numeric value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#minItems() minItems} - Input validation.  Minimum number of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#name() name} - Query parameter name.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#pattern() pattern} - Input validation.  Must match regular expression.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#required() required} - Input validation.  Query parameter must be present.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#serializer() serializer} - Override the part serializer.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#skipIfEmpty() skipIfEmpty}- Don't add if value is null or empty.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#type() type} - The schema type.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#uniqueItems() uniqueItems} - Input validation. Collections must contain unique items only.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#maximum() maximum}, {@link org.apache.juneau.http.annotation.Query#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#maxItems() maxItems}, {@link org.apache.juneau.http.annotation.Query#maxi() maxi} - Input validation.  Maximum number of items in a collection.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#maxLength() maxLength}, {@link org.apache.juneau.http.annotation.Query#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#minimum() minimum}, {@link org.apache.juneau.http.annotation.Query#min() min} - Input validation.  Minimum numeric value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#minItems() minItems}, {@link org.apache.juneau.http.annotation.Query#mini() mini} - Input validation.  Minimum number of items in a collection.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#minLength() minLength}, {@link org.apache.juneau.http.annotation.Query#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#multipleOf() multipleOf}, {@link org.apache.juneau.http.annotation.Query#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#name() name}, {@link org.apache.juneau.http.annotation.Query#n() n} - Query parameter name.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#pattern() pattern}, {@link org.apache.juneau.http.annotation.Query#p() p} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#required() required}, {@link org.apache.juneau.http.annotation.Query#r() r} - Input validation.  Query parameter must be present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#serializer() serializer}  - Override the part serializer.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#skipIfEmpty() skipIfEmpty}, {@link org.apache.juneau.http.annotation.Query#sie() sie} - Don't add if value is null or empty.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#type() type}, {@link org.apache.juneau.http.annotation.Query#t() t} - The schema type.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Query#uniqueItems() uniqueItems}, {@link org.apache.juneau.http.annotation.Query#ui() ui} - Input validation. Collections must contain unique items only.
 	</ul>
 </ul>
 
@@ -24344,7 +24341,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Header' id='juneau-rest-client.RestProxies.Header'>9.11.6 - @Header</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Header' id='juneau-rest-client.RestProxies.Header'>9.11.6 - @Header</a><span class='update'><b>8.1.4-updated</b></span></h4>
 <div class='topic'><!-- START: 9.11.6 - juneau-rest-client.RestProxies.Header -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Header @Header} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
@@ -24353,28 +24350,28 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Header}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#_default() _default} - Default value if not present.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#format() format} - The schema type format. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#_default() _default}, {@link org.apache.juneau.http.annotation.Header#df() df} - Default value if not present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#_enum() _enum}, {@link org.apache.juneau.http.annotation.Header#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#allowEmptyValue() allowEmptyValue}, {@link org.apache.juneau.http.annotation.Header#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#collectionFormat() collectionFormat}, {@link org.apache.juneau.http.annotation.Header#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#exclusiveMaximum() exclusiveMaximum}, {@link org.apache.juneau.http.annotation.Header#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#exclusiveMinimum() exclusiveMinimum}, {@link org.apache.juneau.http.annotation.Header#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#format() format}, {@link org.apache.juneau.http.annotation.Header#f() f} - The schema type format. 
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#maxItems() maxItems} - Input validation.  Maximum number of items in a collection. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#minimum() minimum} - Input validation.  Minimum numeric value. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#minItems() minItems} - Input validation.  Minimum number of items in a collection. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#name() name} - Header name.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#pattern() pattern} - Input validation.  Must match regular expression.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#required() required} - Input validation.  Header must be present.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#maximum() maximum}, {@link org.apache.juneau.http.annotation.Header#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#maxItems() maxItems}, {@link org.apache.juneau.http.annotation.Header#maxi() maxi} - Input validation.  Maximum number of items in a collection. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#maxLength() maxLength}, {@link org.apache.juneau.http.annotation.Header#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#minimum() minimum}, {@link org.apache.juneau.http.annotation.Header#min() min} - Input validation.  Minimum numeric value. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#minItems() minItems}, {@link org.apache.juneau.http.annotation.Header#mini() mini} - Input validation.  Minimum number of items in a collection. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#minLength() minLength}, {@link org.apache.juneau.http.annotation.Header#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#multipleOf() multipleOf}, {@link org.apache.juneau.http.annotation.Header#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#name() name}, {@link org.apache.juneau.http.annotation.Header#n() n} - Header name.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#pattern() pattern}, {@link org.apache.juneau.http.annotation.Header#p() p} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#required() required}, {@link org.apache.juneau.http.annotation.Header#r() r} - Input validation.  Header must be present.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#serializer() serializer} - Override the part serializer.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#skipIfEmpty() skipIfEmpty} - Don't add if value is null or empty.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#type() type} - The schema type.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#uniqueItems() uniqueItems} - Input validation. Collections must contain unique items only.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#skipIfEmpty() skipIfEmpty}, {@link org.apache.juneau.http.annotation.Header#sie() sie} - Don't add if value is null or empty.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#type() type}, {@link org.apache.juneau.http.annotation.Header#t() t} - The schema type.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Header#uniqueItems() uniqueItems}, {@link org.apache.juneau.http.annotation.Header#ui() ui} - Input validation. Collections must contain unique items only.
 	</ul>
 </ul>
 
@@ -24440,7 +24437,7 @@
 
 <!-- ==================================================================================================== -->
 
-<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Path' id='juneau-rest-client.RestProxies.Path'>9.11.7 - @Path</a></h4>
+<h4 class='topic' onclick='toggle(this)'><a href='#juneau-rest-client.RestProxies.Path' id='juneau-rest-client.RestProxies.Path'>9.11.7 - @Path</a><span class='update'><b>8.1.4-updated</b></span></h4>
 <div class='topic'><!-- START: 9.11.7 - juneau-rest-client.RestProxies.Path -->
 <p>
 	The {@link org.apache.juneau.http.annotation.Path @Path} annotation can be applied to arguments of <ja>@RemoteMethod</ja>-annotated methods
@@ -24449,22 +24446,22 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Path}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#_enum() _enum} - Input validation.  Must match one of the values.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#allowEmptyValue() allowEmptyValue} - Input validation.  Allow empty value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#collectionFormat() collectionFormat} - How collections of items are formatted.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#exclusiveMaximum() exclusiveMaximum} - Input validation.  Whether maximum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#exclusiveMinimum() exclusiveMinimum} - Input validation.  Whether minimum is exclusive.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#format() format} - The schema type format. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#_enum() _enum}, {@link org.apache.juneau.http.annotation.Path#e() e} - Input validation.  Must match one of the values.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#allowEmptyValue() allowEmptyValue}, {@link org.apache.juneau.http.annotation.Path#aev() aev} - Input validation.  Allow empty value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#collectionFormat() collectionFormat}, {@link org.apache.juneau.http.annotation.Path#cf() cf} - How collections of items are formatted.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#exclusiveMaximum() exclusiveMaximum}, {@link org.apache.juneau.http.annotation.Path#emax() emax} - Input validation.  Whether maximum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#exclusiveMinimum() exclusiveMinimum}, {@link org.apache.juneau.http.annotation.Path#emin() emin} - Input validation.  Whether minimum is exclusive.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#format() format}, {@link org.apache.juneau.http.annotation.Path#f() f} - The schema type format. 
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#items() items} - The schema of items in a collection.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#maximum() maximum} - Input validation.  Maximum numeric value. 
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#maxLength() maxLength} - Input validation.  Maximum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#minimum() minimum} - Input validation.  Minimum numeric value.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#minLength() minLength} - Input validation.  Minimum length of a string.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#multipleOf() multipleOf} - Input validation.  Number must be a multiple of.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#name() name} - Path variable name.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#pattern() pattern} - Input validation.  Must match regular expression.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#maximum() maximum}, {@link org.apache.juneau.http.annotation.Path#max() max} - Input validation.  Maximum numeric value. 
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#maxLength() maxLength}, {@link org.apache.juneau.http.annotation.Path#maxl() maxl} - Input validation.  Maximum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#minimum() minimum}, {@link org.apache.juneau.http.annotation.Path#min() min} - Input validation.  Minimum numeric value.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#minLength() minLength}, {@link org.apache.juneau.http.annotation.Path#minl() minl} - Input validation.  Minimum length of a string.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#multipleOf() multipleOf}, {@link org.apache.juneau.http.annotation.Path#mo() mo} - Input validation.  Number must be a multiple of.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#name() name}, {@link org.apache.juneau.http.annotation.Path#n() n} - Path variable name.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#pattern() pattern}, {@link org.apache.juneau.http.annotation.Path#p() p} - Input validation.  Must match regular expression.
 		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#serializer() serializer} - Override the part serializer.
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#type() type} - The schema type.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Path#type() type}, {@link org.apache.juneau.http.annotation.Path#t() t} - The schema type.
 	</ul>
 </ul>
 
@@ -24539,7 +24536,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Request}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Request#partSerializer() partSerializer} - Override the part serializer.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Request#serializer() serializer} - Override the part serializer.
 	</ul>
 </ul>
 
@@ -24657,7 +24654,7 @@
 <ul class='javatree'>
 	<li class='ja'>{@link org.apache.juneau.http.annotation.Response}
 	<ul>
-		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#partParser() partParser} - Override the part parser.
+		<li class='jf'>{@link org.apache.juneau.http.annotation.Response#parser() parser} - Override the part parser.
 	</ul>
 </ul>
 <p>
@@ -24806,7 +24803,8 @@
 </p>	
 <p>
 	In the example above, we chose to add the <ja>@RestMethod</ja> annotation to the implementation class.  
-	However, they could have been added to the interface instead.
+	However, they could have been added to the interface instead.  It's personal preference where you want to place
+	the annotations.
 </p>
 <p>
 	Note how we didn't need to use the <ja>@Header</ja> and <ja>@Path</ja> annotations in our implementation since
@@ -25299,8 +25297,8 @@
 				name=<jsf>PUT</jsf>, 
 				path=<js>"/echo"</js>
 			)
-			<jk>public</jk> MyBean echo(<ja>@Body</ja> MyBean bean) {
-				<jk>return</jk> bean;
+			<jk>public</jk> MyBean echo(<ja>@Body</ja> MyBean <jv>bean</jv>) {
+				<jk>return</jk> <jv>bean</jv>;
 			}
 		}
 		
@@ -25308,20 +25306,20 @@
 		<ja>@Test</ja>
 		<jk>public void</jk> testEcho() <jk>throws</jk> Exception {
 		
-			MyBean myBean = <jk>new</jk> MyBean();
+			MyBean <jv>myBean</jv> = <jk>new</jk> MyBean();
 		
 			<jc>// Do a round-trip on the bean through the REST interface</jc>
-			myBean = MockRestClient
+			<jv>myBean</jv> = MockRestClient
 				.<jsm>create</jsm>(EchoRest.<jk>class</jk>)
 				.simpleJson()
 				.build()
-				.put(<js>"/echo"</js>, myBean)
+				.put(<js>"/echo"</js>, <jv>myBean</jv>)
 				.run()
 				.assertStatus().is(200)
 				.assertBody().is(<js>"{foo:1}"</js>)
 				.getBody().as(MyBean.<jk>class</jk>);
 				
-			<jsm>assertEquals</jsm>(1, myBean.<jf>foo</jf>);
+			<jsm>assertEquals</jsm>(1, <jv>myBean</jv>.<jf>foo</jf>);
 		}
 	}
 </p>
@@ -25333,22 +25331,22 @@
 	<jk>public void</jk> testEcho() <jk>throws</jk> Exception {
       
 		<jc>// Instantiate our mock client.</jc>
-		MockRestClient client = MockRestClient
+		MockRestClient <jv>client</jv> = MockRestClient
 			.<jsm>create</jsm>(EchoRest.<jk>class</jk>)
 			.simpleJson()
 			.build();
       
 		<jc>// Create a request.</jc>
-		RestRequest req = client.put(<js>"/echo"</js>, myBean);
+		RestRequest <jv>req</jv> = <jv>client</jv>.put(<js>"/echo"</js>, <jv>myBean</jv>);
       
 		<jc>// Execute it (by calling RestCallHandler.service(...) and then returning the response object).</jc>
-		RestResponse res = req.run();
+		RestResponse <jv>res</jv> = <jv>req</jv>.run();
       
 		<jc>// Run assertion tests on the results.</jc>
-		res.assertStatus().is(200);
-		res.assertBody().is(<js>"'foo'"</js>);
+		<jv>res</jv>.assertStatus().is(200);
+		<jv>res</jv>.assertBody().is(<js>"'foo'"</js>);
 		
-		myBean = res.getBody().as(MyBean.<jk>class</jk>);
+		<jv>myBean</jv> = res.getBody().as(MyBean.<jk>class</jk>);
 	}
 </p>
 <p>
@@ -25381,11 +25379,11 @@
 
 	<ja>@Test</ja>
 	<jk>public void</jk> mytest() <jk>throws</jk> Exception {
-		MockRestClient a = MockRestClient.<jsm>build</jsm>(A.<jk>class</jk>);
+		MockRestClient <jv>client</jv> = MockRestClient.<jsm>build</jsm>(A.<jk>class</jk>);
 
 		<jc>// Admin user should get 200, but anyone else should get 403-Unauthorized.</jc>
-		a.get().roles(<js>"ADMIN"</js>).run().assertStatus().is(200);
-		a.get().roles(<js>"USER"</js>).run().assertStatus().is(403);
+		<jv>client</jv>.get().roles(<js>"ADMIN"</js>).run().assertStatus().is(200);
+		<jv>client</jv>.get().roles(<js>"USER"</js>).run().assertStatus().is(403);
 	}
 </p>
 <hr>
@@ -25394,7 +25392,7 @@
 	be sent to the console:
 </p>
 <p class='bpcode w800'>
-	MockRestClient mr = MockRestClient
+	MockRestClient <jv>client</jv> = MockRestClient
 		.<jsm>create</jsm>(MyRest.<jk>class</jk>)
 		.debug()
 		.simpleJson()
@@ -25412,7 +25410,7 @@
 	<jk>public interface</jk> MyRemoteInterface {
 	
 		<ja>@RemoteMethod</ja>(httpMethod=<js>"GET"</js>, path=<js>"/echoQuery"</js>)
-		<jk>public int</jk> echoQuery(<ja>@Query</ja>(name=<js>"id"</js>) <jk>int</jk> id);
+		<jk>public int</jk> echoQuery(<ja>@Query</ja>(name=<js>"id"</js>) <jk>int</jk> <jv>id</jv>);
 	}
 
 	<jc>// Our mocked-up REST interface to test against.</jc>
@@ -25420,20 +25418,20 @@
 	<jk>public class</jk> MyRest {
 	
 		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/echoQuery"</js>)
-		<jk>public int</jk> echoQuery(<ja>@Query</ja>(<js>"id"</js>) String id) {
-			<jk>return</jk> id;
+		<jk>public int</jk> echoQuery(<ja>@Query</ja>(<js>"id"</js>) String <jv>id</jv>) {
+			<jk>return</jk> <jv>id</jv>;
 		}
 	}
 
 	<ja>@Test</ja>
 	<jk>public void</jk> testProxy() {
-		MyRemoteInterface mri = MockRestClient
+		MyRemoteInterface <jv>mri</jv> = MockRestClient
 			.create(MyRest.<jk>class</jk>)
 			.json()
 			.build()
 			.getRemote(MyRemoteInterface.<jk>class</jk>);
 		
-		<jsm>assertEquals</jsm>(123, mri.echoQuery(123));
+		<jsm>assertEquals</jsm>(123, <jv>mri</jv>.echoQuery(123));
 	}
 </p>
 </div><!-- END: 10.1 - juneau-rest-mock.MockRestClient -->
@@ -30882,7 +30880,7 @@
 		<td></td>
 		<td>{@link org.apache.juneau.rest.RestContext#REST_classpathResourceFinder REST_classpathResourceFinder}</td>
 		<td>Classpath resource finder.</td>
-		<td style='max-width:250px;overflow:hidden'>{@link org.apache.juneau.utils.ClasspathResourceFinder}</td>
+		<td style='max-width:250px;overflow:hidden'>{@link org.apache.juneau.cp.ResourceFinder}</td>
 	</tr>
 	<tr>
 		<td></td>
@@ -36862,9 +36860,9 @@
 			<li><c>getReaderResource(String,boolean,MediaType)</c> renamed to 
 				<dc>getClasspathReaderResource(String,boolean,MediaType)</dc>
 			<li><c>getReaderResource(String,boolean)</c> renamed to 
-				{@link org.apache.juneau.rest.RestRequest#getClasspathReaderResource(String,boolean) getClasspathReaderResource(String,boolean)}
+				{@link org.apache.juneau.rest.RestRequest#getClasspathHttpResource(String,boolean) getClasspathHttpResource(String,boolean)}
 			<li><c>getReaderResource(String)</c> renamed to 
-				{@link org.apache.juneau.rest.RestRequest#getClasspathReaderResource(String) getClasspathReaderResource(String)}
+				{@link org.apache.juneau.rest.RestRequest#getClasspathHttpResource(String) getClasspathHttpResource(String)}
 		</ul>
 	<li>
 		Changes to <dc>@RestResource</dc>
diff --git a/juneau-doc/src/main/javadoc/resources/docs.txt b/juneau-doc/src/main/javadoc/resources/docs.txt
index 770a897..6bad7bc 100644
--- a/juneau-doc/src/main/javadoc/resources/docs.txt
+++ b/juneau-doc/src/main/javadoc/resources/docs.txt
@@ -344,7 +344,7 @@ juneau-rest-server.RestMethod.MethodReturnTypes = #juneau-rest-server.RestMethod
 juneau-rest-server.RestMethod.PredefinedExceptions = #juneau-rest-server.RestMethod.PredefinedExceptions, Overview > juneau-rest-server > @RestMethod > Predefined Exceptions
 juneau-rest-server.RestMethod.PredefinedHelperBeans = #juneau-rest-server.RestMethod.PredefinedHelperBeans, Overview > juneau-rest-server > @RestMethod > Predefined Helper Beans
 juneau-rest-server.RestMethod.PredefinedResponses = #juneau-rest-server.RestMethod.PredefinedResponses, Overview > juneau-rest-server > @RestMethod > Predefined Responses
-juneau-rest-server.RestMethod.ReaderResource = #juneau-rest-server.RestMethod.ReaderResource, Overview > juneau-rest-server > @RestMethod > ReaderResource
+juneau-rest-server.RestMethod.ReaderResource = #juneau-rest-server.RestMethod.ReaderResource, Overview > juneau-rest-server > @RestMethod > ReaderResource (TODO)
 juneau-rest-server.RestMethod.RequestAttributes = #juneau-rest-server.RestMethod.RequestAttributes, Overview > juneau-rest-server > @RestMethod > RequestAttributes
 juneau-rest-server.RestMethod.RequestBody = #juneau-rest-server.RestMethod.RequestBody, Overview > juneau-rest-server > @RestMethod > RequestBody
 juneau-rest-server.RestMethod.RequestFormData = #juneau-rest-server.RestMethod.RequestFormData, Overview > juneau-rest-server > @RestMethod > RequestFormData
@@ -355,7 +355,7 @@ juneau-rest-server.RestMethod.RestMethodMatchers = #juneau-rest-server.RestMetho
 juneau-rest-server.RestMethod.RestMethodPath = #juneau-rest-server.RestMethod.RestMethodPath, Overview > juneau-rest-server > @RestMethod > @RestMethod(path)
 juneau-rest-server.RestMethod.RestRequest = #juneau-rest-server.RestMethod.RestRequest, Overview > juneau-rest-server > @RestMethod > RestRequest
 juneau-rest-server.RestMethod.RestResponse = #juneau-rest-server.RestMethod.RestResponse, Overview > juneau-rest-server > @RestMethod > RestResponse
-juneau-rest-server.RestMethod.StreamResource = #juneau-rest-server.RestMethod.StreamResource, Overview > juneau-rest-server > @RestMethod > StreamResource
+juneau-rest-server.RestMethod.StreamResource = #juneau-rest-server.RestMethod.StreamResource, Overview > juneau-rest-server > @RestMethod > StreamResource (TODO)
 juneau-rest-server.RoleGuards = #juneau-rest-server.RoleGuards, Overview > juneau-rest-server > Role guards
 juneau-rest-server.Serializers = #juneau-rest-server.Serializers, Overview > juneau-rest-server > Serializers
 juneau-rest-server.StaticFiles = #juneau-rest-server.StaticFiles, Overview > juneau-rest-server > Static files
diff --git a/juneau-doc/src/main/javadoc/resources/fragments/toc.html b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
index 2c4cbb8..4280ef9 100644
--- a/juneau-doc/src/main/javadoc/resources/fragments/toc.html
+++ b/juneau-doc/src/main/javadoc/resources/fragments/toc.html
@@ -225,8 +225,8 @@
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RestMethodPath'>@RestMethod(path)</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RequestPathMatch'>RequestPathMatch</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.MethodReturnTypes'>Method Return Types</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.ReaderResource'>ReaderResource</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.StreamResource'>StreamResource</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.ReaderResource'>ReaderResource (TODO)</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.StreamResource'>StreamResource (TODO)</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.RestMethodMatchers'>@RestMethod(matchers)</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.PredefinedResponses'>Predefined Responses</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-server.RestMethod.PredefinedExceptions'>Predefined Exceptions</a></p>
@@ -328,11 +328,11 @@
 		<ol>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Remote'>@Remote</a><span class='update'>8.1.2-updated,<b>8.1.4-updated</b></span></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.RemoteMethod'>@RemoteMethod</a><span class='update'><b>8.1.4-updated</b></span></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Body'>@Body</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.FormData'>@FormData</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Query'>@Query</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Header'>@Header</a></p>
-			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Path'>@Path</a></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Body'>@Body</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.FormData'>@FormData</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Query'>@Query</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Header'>@Header</a><span class='update'><b>8.1.4-updated</b></span></p>
+			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Path'>@Path</a><span class='update'><b>8.1.4-updated</b></span></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Request'>@Request</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.Response'>@Response</a></p>
 			<li><p><a class='doclink' href='{OVERVIEW_URL}#juneau-rest-client.RestProxies.DualPurposeInterfaces'>Dual-purpose (end-to-end) interfaces</a><span class='update'>8.0.0-new</span></p>
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
index 91f75aa..4724eeb 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -39,6 +39,7 @@ import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.svl.vars.ManifestFileVar;
 import org.apache.juneau.utils.*;
+import org.apache.juneau.cp.MessageBundle;
 
 /**
  * Parent class for all microservices.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
index 820b885..33232e6 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ConfigCommand.java
@@ -18,7 +18,7 @@ import java.util.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.microservice.*;
-import org.apache.juneau.utils.*;
+import org.apache.juneau.cp.*;
 
 /**
  * Implements the 'config' console command to get or set configuration.
@@ -31,7 +31,7 @@ public class ConfigCommand extends ConsoleCommand {
 	public String getName() {
 		return "config";
 	}
-	
+
 	@Override /* ConsoleCommand */
 	public String getSynopsis() {
 		return "config [get|set]";
@@ -60,7 +60,7 @@ public class ConfigCommand extends ConsoleCommand {
 					if (val != null)
 						out.println(val);
 					else
-						out.println(mb.getString("KeyNotFound", key));	
+						out.println(mb.getString("KeyNotFound", key));
 				} else {
 					out.println(mb.getString("TooManyArguments"));
 				}
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
index 80bafbb..5cb2216 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/ExitCommand.java
@@ -17,7 +17,7 @@ import java.util.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.microservice.*;
-import org.apache.juneau.utils.*;
+import org.apache.juneau.cp.*;
 
 /**
  * Implements the 'exit' console command to gracefully shut down the microservice and JVM.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
index 06ba4d9..34610b6 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/HelpCommand.java
@@ -17,7 +17,7 @@ import java.util.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.microservice.*;
-import org.apache.juneau.utils.*;
+import org.apache.juneau.cp.*;
 
 /**
  * Implements the 'restart' console command to gracefully shut down and restart the microservice.
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
index a1d951a..64108f0 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/console/RestartCommand.java
@@ -17,7 +17,7 @@ import java.util.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.microservice.*;
-import org.apache.juneau.utils.*;
+import org.apache.juneau.cp.*;
 
 /**
  * Implements the 'restart' console command to gracefully shut down and restart the microservice.
diff --git a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index bdcc9f0..14f16a5 100644
--- a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -24,13 +24,13 @@ import javax.servlet.*;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.config.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.parser.ParseException;
 import org.apache.juneau.reflect.ClassInfo;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.utils.*;
 import org.eclipse.jetty.server.*;
 import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.handler.*;
diff --git a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
index 3d90413..cc96005 100644
--- a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
+++ b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClient_Response_Headers_Test.java
@@ -77,7 +77,7 @@ public class RestClient_Response_Headers_Test {
 
 		checkFooClient().build().get("/echo").header("Foo","bar").run().getHeader("Foo").asCsvArrayHeader().assertName().is("Foo").assertValue().is("bar");
 		checkFooClient().build().get("/echo").header("Foo","*").run().getHeader("Foo").asEntityTagArrayHeader().assertName().is("Foo").assertValue().is("*");
-		checkFooClient().build().get("/echo").header("Foo","bar").run().getHeader("Foo").asRangeArrayHeader().assertName().is("Foo").assertValue().is("bar");
+		checkFooClient().build().get("/echo").header("Foo","bar").run().getHeader("Foo").asStringRangeArrayHeader().assertName().is("Foo").assertValue().is("bar");
 		checkFooClient().build().get("/echo").header("Foo","bar").run().getHeader("Foo").asStringHeader().assertName().is("Foo").assertValue().is("bar");
 		checkFooClient().build().get("/echo").header("Foo","bar").run().getHeader("Foo").asUriHeader().assertName().is("Foo").assertValue().is("bar");
 	}
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
index 0ec111e..32aa187 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
@@ -617,7 +617,7 @@ import org.apache.juneau.utils.*;
  * 		<li class='jm'><c>{@link RestResponseHeader#asDateHeader() asDateHeader()} <jk>returns</jk> {@link BasicDateHeader}</c>
  * 		<li class='jm'><c>{@link RestResponseHeader#asCsvArrayHeader() asCsvArrayHeader()} <jk>returns</jk> {@link BasicCsvArrayHeader}</c>
  * 		<li class='jm'><c>{@link RestResponseHeader#asEntityTagArrayHeader() asEntityValidatorArrayHeader()} <jk>returns</jk> {@link BasicEntityTagArrayHeader}</c>
- * 		<li class='jm'><c>{@link RestResponseHeader#asRangeArrayHeader() asRangeArrayHeader()} <jk>returns</jk> {@link BasicStringRangeArrayHeader}</c>
+ * 		<li class='jm'><c>{@link RestResponseHeader#asStringRangeArrayHeader() asRangeArrayHeader()} <jk>returns</jk> {@link BasicStringRangeArrayHeader}</c>
  * 		<li class='jm'><c>{@link RestResponseHeader#asUriHeader() asUriHeader()} <jk>returns</jk> {@link BasicUriHeader}</c>
  * 	</ul>
  * </ul>
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
index d3d06ae..456ea30 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
@@ -218,7 +218,7 @@ public class RestResponseHeader implements Header {
 	 *
 	 * @return The value of this header as a range array header, never <jk>null</jk>.
 	 */
-	public BasicStringRangeArrayHeader asRangeArrayHeader() {
+	public BasicStringRangeArrayHeader asStringRangeArrayHeader() {
 		return new BasicStringRangeArrayHeader(getName(), getValue());
 	}
 
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
index a303908..dc18e31 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
@@ -60,7 +60,7 @@ public class BasicRestInfoProviderTest {
 		return ip.getSwagger(req);
 	}
 
-	public static class TestClasspathResourceFinder extends BasicClasspathResourceFinder {
+	public static class TestClasspathResourceFinder extends BasicResourceFinder {
 		@Override
 		public InputStream findResource(Class<?> baseClass, String name, Locale locale) throws IOException {
 			if (name.endsWith(".json"))
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/RestParamsTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/RestParamsTest.java
index a1fe7bd..d90030c 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/RestParamsTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/RestParamsTest.java
@@ -22,12 +22,12 @@ import java.util.*;
 import javax.servlet.*;
 
 import org.apache.juneau.config.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.mock2.*;
-import org.apache.juneau.utils.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java
index 4bcedd0..a4ff1f7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRest.java
@@ -25,7 +25,7 @@ import javax.servlet.*;
 import javax.servlet.http.*;
 
 import org.apache.juneau.cp.*;
-import org.apache.juneau.cp.ClasspathResourceFinder;
+import org.apache.juneau.cp.ResourceFinder;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.html.annotation.*;
 import org.apache.juneau.internal.*;
@@ -52,14 +52,14 @@ import org.apache.juneau.http.exception.*;
 		"stats: servlet:/stats"
 	}
 )
-public abstract class BasicRest implements BasicUniversalRest, BasicRestMethods, RestCallHandler, RestInfoProvider, RestCallLogger, RestResourceResolver, ClasspathResourceFinder {
+public abstract class BasicRest implements BasicUniversalRest, BasicRestMethods, RestCallHandler, RestInfoProvider, RestCallLogger, RestResourceResolver, ResourceFinder {
 
 	private Logger logger = Logger.getLogger(getClass().getName());
 	private volatile RestContext context;
 	private RestCallHandler callHandler;
 	private RestInfoProvider infoProvider;
 	private RestCallLogger callLogger;
-	private ClasspathResourceFinder resourceFinder;
+	private ResourceFinder resourceFinder;
 	private RestResourceResolver resourceResolver = new BasicRestResourceResolver();
 
 	/**
@@ -279,7 +279,7 @@ public abstract class BasicRest implements BasicUniversalRest, BasicRestMethods,
 		this.callHandler = new BasicRestCallHandler(context);
 		this.infoProvider = new BasicRestInfoProvider(context);
 		this.callLogger = new BasicRestCallLogger(context);
-		this.resourceFinder = new BasicClasspathResourceFinder();
+		this.resourceFinder = new BasicResourceFinder();
 	}
 
 	/**
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index e765fd8..62f727f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -39,8 +39,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.config.*;
 import org.apache.juneau.cp.*;
-import org.apache.juneau.cp.ClasspathResourceFinder;
-import org.apache.juneau.cp.ClasspathResourceManager;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.encoders.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.html.annotation.*;
@@ -778,8 +777,8 @@ public final class RestContext extends BeanContext {
 	 * <ul class='spaced-list'>
 	 * 	<li><b>ID:</b>  {@link org.apache.juneau.rest.RestContext#REST_classpathResourceFinder REST_classpathResourceFinder}
 	 * 	<li><b>Name:</b>  <js>"RestContext.classpathResourceFinder.o"</js>
-	 * 	<li><b>Data type:</b>  {@link org.apache.juneau.cp.ClasspathResourceFinder}
-	 * 	<li><b>Default:</b>  {@link org.apache.juneau.cp.BasicClasspathResourceFinder}
+	 * 	<li><b>Data type:</b>  {@link org.apache.juneau.cp.ResourceFinder}
+	 * 	<li><b>Default:</b>  {@link org.apache.juneau.cp.BasicResourceFinder}
 	 * 	<li><b>Session property:</b>  <jk>false</jk>
 	 * 	<li><b>Annotations:</b>
 	 * 		<ul>
@@ -788,7 +787,7 @@ public final class RestContext extends BeanContext {
 	 * 	<li><b>Methods:</b>
 	 * 		<ul>
 	 * 			<li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#classpathResourceFinder(Class)}
-	 * 			<li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#classpathResourceFinder(ClasspathResourceFinder)}
+	 * 			<li class='jm'>{@link org.apache.juneau.rest.RestContextBuilder#classpathResourceFinder(ResourceFinder)}
 	 * 		</ul>
 	 * </ul>
 	 *
@@ -857,17 +856,17 @@ public final class RestContext extends BeanContext {
 	 *
 	 * <ul class='notes'>
 	 * 	<li>
-	 * 		The default value is {@link BasicClasspathResourceFinder} which provides basic support for finding localized
+	 * 		The default value is {@link BasicResourceFinder} which provides basic support for finding localized
 	 * 		resources on the classpath and JVM working directory.
-	 * 		<br>The {@link RecursiveClasspathResourceFinder} is another option that also recursively searches for resources
+	 * 		<br>The {@link RecursiveResourceFinder} is another option that also recursively searches for resources
 	 * 		up the class-hierarchy.
 	 * 		<br>Each of these classes can be extended to provide customized handling of resource retrieval.
 	 * 	<li>
-	 * 		The resource class itself will be used if it implements the {@link ClasspathResourceFinder} interface and not
+	 * 		The resource class itself will be used if it implements the {@link ResourceFinder} interface and not
 	 * 		explicitly overridden via this annotation.
 	 * 	<li>
-	 * 		The {@link RestServlet} and {@link BasicRest} classes implement the {@link ClasspathResourceFinder} interface with the same
-	 * 		functionality as {@link BasicClasspathResourceFinder} that gets used if not overridden by this annotation.
+	 * 		The {@link RestServlet} and {@link BasicRest} classes implement the {@link ResourceFinder} interface with the same
+	 * 		functionality as {@link BasicResourceFinder} that gets used if not overridden by this annotation.
 	 * 		<br>Subclasses can also alter the behavior by overriding these methods.
 	 * 	<li>
 	 * 		When defined as a class, the implementation must have one of the following constructors:
@@ -3655,7 +3654,7 @@ public final class RestContext extends BeanContext {
 	// In-memory cache of images and stylesheets in the org.apache.juneau.rest.htdocs package.
 	private final Map<String,StaticFile> staticFilesCache = new ConcurrentHashMap<>();
 
-	private final ClasspathResourceManager staticResourceManager;
+	private final ResourceManager staticResourceManager;
 	@Deprecated private final ConcurrentHashMap<Integer,AtomicInteger> stackTraceHashes = new ConcurrentHashMap<>();
 
 	private final ThreadLocal<RestRequest> req = new ThreadLocal<>();
@@ -3835,11 +3834,11 @@ public final class RestContext extends BeanContext {
 			for (String mimeType : getArrayProperty(REST_mimeTypes, String.class))
 				mimetypesFileTypeMap.addMimeTypes(mimeType);
 
-			Object defaultResourceFinder = resource instanceof ClasspathResourceFinder ? resource : BasicClasspathResourceFinder.class;
-			ClasspathResourceFinder rf = getInstanceProperty(REST_classpathResourceFinder, ClasspathResourceFinder.class, defaultResourceFinder, resourceResolver, this);
+			Object defaultResourceFinder = resource instanceof ResourceFinder ? resource : BasicResourceFinder.class;
+			ResourceFinder rf = getInstanceProperty(REST_classpathResourceFinder, ResourceFinder.class, defaultResourceFinder, resourceResolver, this);
 
 			useClasspathResourceCaching = getProperty(REST_useClasspathResourceCaching, boolean.class, true);
-			staticResourceManager = new ClasspathResourceManager(rci.inner(), rf, useClasspathResourceCaching);
+			staticResourceManager = new ResourceManager(rci.inner(), rf, useClasspathResourceCaching);
 
 			consumes = getListProperty(REST_consumes, MediaType.class, parsers.getSupportedMediaTypes());
 			produces = getListProperty(REST_produces, MediaType.class, serializers.getSupportedMediaTypes());
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 05b787b..1f443f9 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -136,7 +136,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 				.defaultVars()
 				.vars(ConfigVar.class)
 				.vars(FileVar.class)
-				.contextObject("crm", new ClasspathResourceManager(resourceClass));
+				.contextObject("crm", new ResourceManager(resourceClass));
 
 			VarResolver vr = varResolverBuilder.build();
 
@@ -745,11 +745,11 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 *
 	 * @param value
 	 * 	The new value for this setting.
-	 * 	<br>The default is {@link BasicClasspathResourceFinder}.
+	 * 	<br>The default is {@link BasicResourceFinder}.
 	 * @return This object (for method chaining).
 	 */
 	@FluentSetter
-	public RestContextBuilder classpathResourceFinder(Class<? extends ClasspathResourceFinder> value) {
+	public RestContextBuilder classpathResourceFinder(Class<? extends ResourceFinder> value) {
 		return set(REST_classpathResourceFinder, value);
 	}
 
@@ -757,7 +757,7 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 * <i><l>RestContext</l> configuration property:&emsp;</i>  Classpath resource finder.
 	 *
 	 * <p>
-	 * Same as {@link #classpathResourceFinder(ClasspathResourceFinder)} except input is a pre-constructed instance.
+	 * Same as {@link #classpathResourceFinder(ResourceFinder)} except input is a pre-constructed instance.
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='jf'>{@link RestContext#REST_classpathResourceFinder}
@@ -765,11 +765,11 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	 *
 	 * @param value
 	 * 	The new value for this setting.
-	 * 	<br>The default is {@link BasicClasspathResourceFinder}.
+	 * 	<br>The default is {@link BasicResourceFinder}.
 	 * @return This object (for method chaining).
 	 */
 	@FluentSetter
-	public RestContextBuilder classpathResourceFinder(ClasspathResourceFinder value) {
+	public RestContextBuilder classpathResourceFinder(ResourceFinder value) {
 		return set(REST_classpathResourceFinder, value);
 	}
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java
index 729e78a..eaddf47 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodParam.java
@@ -21,12 +21,12 @@ import javax.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.header.Date;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
-import org.apache.juneau.utils.*;
 
 /**
  * REST java method parameter resolver.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
index 8937e34..324b289 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
@@ -25,6 +25,7 @@ import javax.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.Body;
@@ -43,7 +44,6 @@ import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.http.exception.*;
 import org.apache.juneau.rest.util.UrlPathPattern;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.utils.*;
 
 /**
  * Default REST method parameter resolvers.
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 5925ab6..aa21bc0 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
@@ -36,6 +36,8 @@ import javax.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
+import org.apache.juneau.cp.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index 40fc98e..1270102 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -42,7 +42,7 @@ import org.apache.juneau.http.exception.*;
  * 	<li class='link'>{@doc juneau-rest-server.Instantiation.RestServlet}
  * </ul>
  */
-public abstract class RestServlet extends HttpServlet implements RestCallHandler, RestInfoProvider, RestCallLogger, RestResourceResolver, ClasspathResourceFinder {
+public abstract class RestServlet extends HttpServlet implements RestCallHandler, RestInfoProvider, RestCallLogger, RestResourceResolver, ResourceFinder {
 
 	private static final long serialVersionUID = 1L;
 
@@ -55,7 +55,7 @@ public abstract class RestServlet extends HttpServlet implements RestCallHandler
 	private RestCallHandler callHandler;
 	private RestInfoProvider infoProvider;
 	private RestCallLogger callLogger;
-	private ClasspathResourceFinder resourceFinder;
+	private ResourceFinder resourceFinder;
 
 	@Override /* Servlet */
 	public final synchronized void init(ServletConfig servletConfig) throws ServletException {
@@ -101,7 +101,7 @@ public abstract class RestServlet extends HttpServlet implements RestCallHandler
 		callHandler = new BasicRestCallHandler(context);
 		infoProvider = new BasicRestInfoProvider(context);
 		callLogger = new BasicRestCallLogger(context);
-		resourceFinder = new BasicClasspathResourceFinder();
+		resourceFinder = new BasicResourceFinder();
 		context.postInit();
 	}
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java
index c1e28a4..9018f3a 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFileMapping.java
@@ -45,7 +45,7 @@ import org.apache.juneau.rest.annotation.*;
  * </p>
  *
  * <p>
- * Static files are found by using the {@link ClasspathResourceFinder} defined on the resource.
+ * Static files are found by using the {@link ResourceFinder} defined on the resource.
  *
  * <p>
  * In the example above, given a GET request to <l>/myresource/htdocs/foobar.html</l>, the servlet will attempt to find
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
index 27795c0..82bfa40 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StaticFiles.java
@@ -28,10 +28,10 @@ class StaticFiles {
 	private final String path, location;
 	private final Map<String,Object> responseHeaders;
 
-	private final ClasspathResourceManager staticResourceManager;
+	private final ResourceManager staticResourceManager;
 	private final MimetypesFileTypeMap mimetypesFileTypeMap;
 
-	StaticFiles(StaticFileMapping sfm, ClasspathResourceManager staticResourceManager, MimetypesFileTypeMap mimetypesFileTypeMap, Map<String,Object> staticFileResponseHeaders) {
+	StaticFiles(StaticFileMapping sfm, ResourceManager staticResourceManager, MimetypesFileTypeMap mimetypesFileTypeMap, Map<String,Object> staticFileResponseHeaders) {
 		this.resourceClass = sfm.resourceClass;
 		this.path = sfm.path;
 		this.location = sfm.location;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
index ec6cc14..595b3b7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
@@ -26,6 +26,7 @@ import org.apache.juneau.jsonschema.annotation.SubItems;
 import org.apache.juneau.jsonschema.annotation.Items;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.http.annotation.*;
@@ -47,7 +48,6 @@ import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.util.RestUtils;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
-import org.apache.juneau.utils.*;
 
 /**
  * Default implementation of {@link RestInfoProvider}.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
index 86fd502..4c695e9 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
@@ -21,11 +21,11 @@ import javax.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
+import org.apache.juneau.cp.MessageBundle;
 import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.exception.*;
 import org.apache.juneau.rest.*;
-import org.apache.juneau.utils.*;
 
 /**
  * Identifies servlet and REST call lifecycle events which cause {@link RestHook @RestHook}-annotated Java methods
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index 2901334..96a72be 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -213,13 +213,13 @@ public @interface Rest {
 	 *
 	 * <ul class='notes'>
 	 * 	<li>
-	 * 		The default resource finder if not specified is {@link BasicClasspathResourceFinder}.
+	 * 		The default resource finder if not specified is {@link BasicResourceFinder}.
 	 * 	<li>
-	 * 		The resource class itself will be used if it implements the {@link ClasspathResourceFinder} interface and not
+	 * 		The resource class itself will be used if it implements the {@link ResourceFinder} interface and not
 	 * 		explicitly overridden via this annotation.
 	 * 	<li>
-	 * 		The {@link RestServlet} and {@link BasicRest} classes implement the {@link ClasspathResourceFinder} interface with the same
-	 * 		functionality as {@link BasicClasspathResourceFinder} that gets used if not overridden by this annotation.
+	 * 		The {@link RestServlet} and {@link BasicRest} classes implement the {@link ResourceFinder} interface with the same
+	 * 		functionality as {@link BasicResourceFinder} that gets used if not overridden by this annotation.
 	 * 		<br>Subclasses can also alter the behavior by overriding this method.
 	 * 	<li>
 	 * 		The implementation must have one of the following constructors:
@@ -237,7 +237,7 @@ public @interface Rest {
 	 * 	<li class='jf'>{@link RestContext#REST_classpathResourceFinder}
 	 * </ul>
 	 */
-	Class<? extends ClasspathResourceFinder> classpathResourceFinder() default ClasspathResourceFinder.Null.class;
+	Class<? extends ResourceFinder> classpathResourceFinder() default ResourceFinder.Null.class;
 
 	/**
 	 * Client version header.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
index dffced0..9b592a9 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestConfigApply.java
@@ -195,7 +195,7 @@ public class RestConfigApply extends ConfigApply<Rest> {
 		if (! a.useClasspathResourceCaching().isEmpty())
 			psb.set(REST_useClasspathResourceCaching, bool(a.useClasspathResourceCaching()));
 
-		if (a.classpathResourceFinder() != ClasspathResourceFinder.Null.class)
+		if (a.classpathResourceFinder() != ResourceFinder.Null.class)
 			psb.set(REST_classpathResourceFinder, a.classpathResourceFinder());
 
 		if (! a.path().isEmpty())
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java
index 70a04db..6a56473 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java
@@ -26,10 +26,10 @@ import org.apache.juneau.svl.*;
  * <p>
  * File variables resolve to the contents of resource files located on the classpath or local JVM directory.
  * They use the {@link RestRequest#getClasspathResourceAsString(String)} method to retrieve the contents of the file.
- * That in turn uses the {@link ClasspathResourceFinder} associated with the servlet class to find the file.
+ * That in turn uses the {@link ResourceFinder} associated with the servlet class to find the file.
  *
  * <p>
- * The {@link ClasspathResourceFinder} is similar to {@link Class#getResourceAsStream(String)} except if it doesn't find the
+ * The {@link ResourceFinder} is similar to {@link Class#getResourceAsStream(String)} except if it doesn't find the
  * resource on this class, it searches up the parent hierarchy chain.
  *
  * <p>
@@ -95,7 +95,7 @@ public class FileVar extends DefaultingVar {
 			return s;
 		}
 
-		ClasspathResourceManager crm = session.getSessionObject(ClasspathResourceManager.class, SESSION_crm, false);
+		ResourceManager crm = session.getSessionObject(ResourceManager.class, SESSION_crm, false);
 		if (crm != null)
 			return crm.getString(key);
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
index 157d24c..d833b3b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
@@ -39,7 +39,7 @@ import org.apache.juneau.html.*;
  */
 public abstract class Widget implements HtmlWidget {
 
-	private final ClasspathResourceManager rm = new ClasspathResourceManager(getClass(), RecursiveClasspathResourceFinder.INSTANCE, false);
+	private final ResourceManager rm = new ResourceManager(getClass(), RecursiveResourceFinder.INSTANCE, false);
 
 	private static final String SESSION_req = "req";
 	private static final String SESSION_res = "res";