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 2018/04/09 00:03:27 UTC

[juneau] branch master updated: Create org.apache.juneau.rest.helper package.

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 98e1a9f  Create org.apache.juneau.rest.helper package.
98e1a9f is described below

commit 98e1a9f007e687c3f1efb0eb317d2b11845c477c
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sun Apr 8 20:01:52 2018 -0400

    Create org.apache.juneau.rest.helper package.
---
 .../apache/juneau/dto/swagger/OperationMap.java    |  2 +-
 juneau-doc/src/main/javadoc/overview.html          | 91 +++++++++++++---------
 .../juneau/examples/rest/DirectoryResource.java    |  1 +
 .../examples/rest/DockerRegistryResource.java      |  2 +-
 .../examples/rest/MethodExampleResource.java       |  2 +-
 .../juneau/examples/rest/PetStoreResource.java     |  1 +
 .../examples/rest/PredefinedLabelsResource.java    |  2 +-
 .../examples/rest/SystemPropertiesResource.java    | 32 ++++----
 .../juneau/examples/rest/TempDirResource.java      |  1 +
 .../rest/addressbook/AddressBookResource.java      |  1 +
 .../examples/rest/petstore/PetStoreResource.java   | 22 +-----
 .../juneau/examples/rest/RootResourcesTest.java    |  2 +-
 .../microservice/resources/DebugResource.java      |  2 +-
 .../microservice/resources/DirectoryResource.java  |  1 +
 .../microservice/resources/LogsResource.java       |  1 +
 .../java/org/apache/juneau/rest/test/Root.java     |  2 +-
 .../apache/juneau/rest/BasicRestCallHandler.java   |  1 +
 .../apache/juneau/rest/BasicRestServletGroup.java  |  2 +-
 .../org/apache/juneau/rest/ResponseHandler.java    |  1 +
 .../java/org/apache/juneau/rest/RestContext.java   |  1 +
 .../java/org/apache/juneau/rest/RestRequest.java   |  1 +
 .../rest/{labels => helper}/BeanDescription.java   |  2 +-
 .../ChildResourceDescriptions.java                 |  2 +-
 .../RedirectHandler.java => helper/Ok.java}        | 87 +++++++++++----------
 .../juneau/rest/{ => helper}/ReaderResource.java   |  2 +-
 .../rest/{ => helper}/ReaderResourceBuilder.java   |  2 +-
 .../apache/juneau/rest/{ => helper}/Redirect.java  |  5 +-
 .../RedirectServletRoot.java}                      | 76 ++++++++----------
 .../{labels => helper}/ResourceDescription.java    |  4 +-
 .../juneau/rest/{ => helper}/StreamResource.java   |  2 +-
 .../rest/{ => helper}/StreamResourceBuilder.java   |  2 +-
 .../rest/{labels => helper}/package-info.java      |  4 +-
 .../juneau/rest/response/RedirectHandler.java      |  1 +
 .../juneau/rest/response/StreamableHandler.java    |  1 +
 .../juneau/rest/response/WritableHandler.java      |  1 +
 .../java/org/apache/juneau/rest/vars/FileVar.java  |  1 +
 36 files changed, 187 insertions(+), 176 deletions(-)

diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java
index f7cae77..8221758 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/OperationMap.java
@@ -67,7 +67,7 @@ public class OperationMap extends TreeMap<String,Operation> {
 	}
 	
 	/**
-	 * Fluent-style {@link #put(String, Operation)} method.
+	 * Fluent-style put method.
 	 * 
 	 * @param httpMethodName The HTTP method name.
 	 * @param operation The operation.
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 1efcf80..21fb2a4 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -329,7 +329,7 @@
 		</ol>
 		<li><p><a class='doclink' href='#juneau-rest-server.Injection'>Using with Spring and Injection frameworks</a></p>
 		<li><p><a class='doclink' href='#juneau-rest-server.HTTP2'>Using HTTP/2 features</a></p>
-		<li><p><a class='doclink' href='#juneau-rest-server.PredefinedLabelBeans'>Predefined Label Beans</a></p>
+		<li><p><a class='doclink' href='#juneau-rest-server.PredefinedHelperBeans'>Predefined Helper Beans</a></p>
 		<li><p><a class='doclink' href='#juneau-rest-server.OtherNotes'>Other Notes</a></p>
 	</ol>
 	<li><p class='toc2'><a class='doclink' href='#juneau-rest-server-jaxrs'><i>juneau-rest-server-jaxrs</i></a></p>
@@ -12003,7 +12003,7 @@
 					{@link org.apache.juneau.rest.RestResponse#getNegotiatedWriter()}.
 					<br>Note that you should call {@link org.apache.juneau.rest.RestResponse#setContentType(String)} to set 
 					the <l>Content-Type</l> header if you use this object type.
-				<li class='jc'>{@link org.apache.juneau.rest.Redirect}
+				<li class='jc'>{@link org.apache.juneau.rest.helper.Redirect}
 					<br>Represents an HTTP redirect response.
 				<li class='jc'>{@link org.apache.juneau.Streamable}
 					<br>Interface that identifies that an object can be serialized directly to an output stream.
@@ -12079,13 +12079,13 @@
 		<h4 class='topic' onclick='toggle(this)'>7.6.11 - ReaderResource</h4>
 		<div class='topic'>
 			<p>
-				The {@link org.apache.juneau.rest.ReaderResource} class is a convenience object for defining thread-safe
+				The {@link org.apache.juneau.rest.helper.ReaderResource} class is a convenience object for defining thread-safe
 				reusable character-based responses.
 				<br>In essence, it's a container for character data with optional response headers and support for
 				resolving SVL variables.
 			</p>
 			<p>
-				The {@link org.apache.juneau.rest.ReaderResource} class implements the {@link org.apache.juneau.Writable}
+				The {@link org.apache.juneau.rest.helper.ReaderResource} class implements the {@link org.apache.juneau.Writable}
 				interface which is handled by the {@link org.apache.juneau.rest.response.WritableHandler} class.
 				<br>This allows these objects to be returned as responses by REST methods.
 			</p>
@@ -12107,12 +12107,12 @@
 				The important methods on this class are:
 			</p>
 			<ul class='doctree'>
-				<li class='jc'>{@link org.apache.juneau.rest.ReaderResourceBuilder}
+				<li class='jc'>{@link org.apache.juneau.rest.helper.ReaderResourceBuilder}
 				<ul>
-					<li class='jm'>{@link org.apache.juneau.rest.ReaderResourceBuilder#contents(Object...) contents(Object...)}
-					<li class='jm'>{@link org.apache.juneau.rest.ReaderResourceBuilder#header(String,Object) header(String,Object)}
-					<li class='jm'>{@link org.apache.juneau.rest.ReaderResourceBuilder#mediaType(MediaType) mediaType(MediaType)}
-					<li class='jm'>{@link org.apache.juneau.rest.ReaderResourceBuilder#varResolver(VarResolverSession) varResolver(VarResolverSession)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.ReaderResourceBuilder#contents(Object...) contents(Object...)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.ReaderResourceBuilder#header(String,Object) header(String,Object)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.ReaderResourceBuilder#mediaType(MediaType) mediaType(MediaType)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.ReaderResourceBuilder#varResolver(VarResolverSession) varResolver(VarResolverSession)}
 				</ul>
 			</ul>
 		</div>
@@ -12122,11 +12122,11 @@
 		<h4 class='topic' onclick='toggle(this)'>7.6.12 - StreamResource</h4>
 		<div class='topic'>
 			<p>
-				The {@link org.apache.juneau.rest.StreamResource} class is the binary equivalent to the {@link org.apache.juneau.rest.ReaderResource} object.
+				The {@link org.apache.juneau.rest.helper.StreamResource} class is the binary equivalent to the {@link org.apache.juneau.rest.helper.ReaderResource} object.
 				<br>In essence, it's a container for binary data with optional response headers.
 			</p>
 			<p>
-				The {@link org.apache.juneau.rest.StreamResource} class implements the {@link org.apache.juneau.Streamable}
+				The {@link org.apache.juneau.rest.helper.StreamResource} class implements the {@link org.apache.juneau.Streamable}
 				interface which is handled by the {@link org.apache.juneau.rest.response.StreamableHandler} class.
 				<br>This allows these objects to be returned as responses by REST methods.
 			</p>
@@ -12147,11 +12147,11 @@
 				The important methods on this class are:
 			</p>
 			<ul class='doctree'>
-				<li class='jc'>{@link org.apache.juneau.rest.StreamResourceBuilder}
+				<li class='jc'>{@link org.apache.juneau.rest.helper.StreamResourceBuilder}
 				<ul>
-					<li class='jm'>{@link org.apache.juneau.rest.StreamResourceBuilder#contents(Object...) contents(Object...)}
-					<li class='jm'>{@link org.apache.juneau.rest.StreamResourceBuilder#header(String,Object) header(String,Object)}
-					<li class='jm'>{@link org.apache.juneau.rest.StreamResourceBuilder#mediaType(MediaType) mediaType(MediaType)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.StreamResourceBuilder#contents(Object...) contents(Object...)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.StreamResourceBuilder#header(String,Object) header(String,Object)}
+					<li class='jm'>{@link org.apache.juneau.rest.helper.StreamResourceBuilder#mediaType(MediaType) mediaType(MediaType)}
 				</ul>
 			</ul>
 		</div>
@@ -12161,7 +12161,7 @@
 		<h4 class='topic' onclick='toggle(this)'>7.6.13 - Redirect</h4>
 		<div class='topic'>
 			<p>
-				The {@link org.apache.juneau.rest.Redirect} object is a convenience shortcut for performing <code>HTTP 302</code> redirects.
+				The {@link org.apache.juneau.rest.helper.Redirect} object is a convenience shortcut for performing <code>HTTP 302</code> redirects.
 			</p>
 			<p>
 				<l>Redirect</l> objects are handled by the {@link org.apache.juneau.rest.response.RedirectHandler} class.
@@ -15365,15 +15365,15 @@
 	</div>
 	
 	<!-- ======================================================================================================= -->
-	<a id='juneau-rest-server.PredefinedLabelBeans'></a>
-	<h3 class='topic' onclick='toggle(this)'>7.35 - Predefined Label Beans</h3>
+	<a id='juneau-rest-server.PredefinedHelperBeans'></a>
+	<h3 class='topic' onclick='toggle(this)'>7.35 - Predefined Helper Beans</h3>
 	<div class='topic'>
 		<p>
-			The {@link org.apache.juneau.rest.labels} package contains some reusable beans that are useful for 
+			The {@link org.apache.juneau.rest.helper} package contains some reusable beans that are useful for 
 			creating linked items in HTML views.
 		</p>
 		<p>
-			The {@link org.apache.juneau.rest.labels.ResourceDescription} class is a bean with name/description
+			The {@link org.apache.juneau.rest.helper.ResourceDescription} class is a bean with name/description
 			properties for labeling and linking to child resources.
 			<br>The following examples is pulled from the REST examples:
 		</p>
@@ -15407,7 +15407,7 @@
 	}
 		</p>
 		<p>
-			The {@link org.apache.juneau.rest.labels.BeanDescription} class provides a simple view
+			The {@link org.apache.juneau.rest.helper.BeanDescription} class provides a simple view
 			of a bean and it's properties.
 		</p>
 		<p class='bcode w800'>
@@ -17838,7 +17838,7 @@
 		</p>
 		<ul class='spaced-list'>
 			<li>
-				Using the {@link org.apache.juneau.rest.Redirect} object to perform redirections.
+				Using the {@link org.apache.juneau.rest.helper.Redirect} object to perform redirections.
 			<li>
 				Using the various Java method parameter annotations to retrieve request attributes, parameters, etc.
 			<li>
@@ -18036,7 +18036,7 @@
 				<l>doExample()</l>
 				<br>The root page. 
 				<br>Performs a simple redirection to the <l>doGetExample1()</l> method using a 
-				{@link org.apache.juneau.rest.Redirect} object.
+				{@link org.apache.juneau.rest.helper.Redirect} object.
 			<li class='jm'>
 				<l>example1()</l>
 				<br>Shows how to use the following annotations:
@@ -19894,7 +19894,7 @@
 			<li>
 				Accessing a docker registry REST API as POJOs using {@link org.apache.juneau.rest.client.RestClient}.
 			<li>
-				Using the {@link org.apache.juneau.rest.labels.ResourceDescription} class to implement a top-level 
+				Using the {@link org.apache.juneau.rest.helper.ResourceDescription} class to implement a top-level 
 				'router' page.
 			<li>
 				Using the {@link org.apache.juneau.rest.RestContext#getConfig()} method to access external 
@@ -21381,6 +21381,23 @@
 					<li class='ja'>{@link org.apache.juneau.rest.annotation.Path}
 					<li class='ja'>{@link org.apache.juneau.rest.annotation.Query}
 				</ul>
+			<li>
+				"Helper" classes (i.e. reusable beans that can be returned by REST methods) have been moved to the following package with some new additions:
+				<ul class='doctree'>
+					<li class='jp'>{@link org.apache.juneau.rest.helper}
+					<ul>
+						<li class='jc'>{@link org.apache.juneau.rest.helper.BeanDescription}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.ChildResourceDescriptions}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.Ok}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.ReaderResource}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.ReaderResourceBuilder}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.Redirect}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.RedirectServletRoot}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.ResourceDescription}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.StreamResource}
+						<li class='jc'>{@link org.apache.juneau.rest.helper.StreamResourceBuilder}
+					</ul>
+				</ul>
 		</ul>
 		
 		<h5 class='topic w800'>juneau-rest-client</h5>
@@ -21789,8 +21806,8 @@
 			<li>
 				New builder classes:
 				<ul>
-					<li>{@link org.apache.juneau.rest.ReaderResourceBuilder}
-					<li>{@link org.apache.juneau.rest.StreamResourceBuilder}
+					<li><code><del>ReaderResourceBuilder</del></code>
+					<li><code><del>StreamResourceBuilder</del></code>
 				</ul>
 			<li>
 				{@link org.apache.juneau.rest.RestResponse#getNegotiatedOutputStream()} now returns a 
@@ -22714,7 +22731,7 @@
 	)
 				</p>
 			<li>
-				New {@link org.apache.juneau.rest.ReaderResource#toCommentStrippedString()} method.
+				New <code><del>ReaderResource.toCommentStrippedString()</del></code> method.
 			<li>
 				The <code>bpIncludes()</code> and <code>bpExcludes()</code> annotations on <ja>@RestMethod</ja>
 				has been replaced with the following:
@@ -23328,8 +23345,8 @@
 	)
 				</p>
 			<li><code><del>RestResource.stylesheet()</del></code> can now take in a comma-delimited list of stylesheet paths.
-			<li>{@link org.apache.juneau.rest.StreamResource} can now contain multiple sources from a variety of source types (e.g. <code><jk>byte</jk>[]</code> arrays, <code>InputStreams</code>, <code>Files</code>, etc...)
-				and is now immutable.  It also includes a new {@link org.apache.juneau.rest.StreamResourceBuilder} class.
+			<li><code><del>StreamResource</del></code> can now contain multiple sources from a variety of source types (e.g. <code><jk>byte</jk>[]</code> arrays, <code>InputStreams</code>, <code>Files</code>, etc...)
+				and is now immutable.  It also includes a new <code><del>StreamResourceBuilder</del></code> class.
 			<li>Simplified remoteable proxies using the <code><ja>@RestMethod</ja>(name=<js>"PROXY"</js>)</code> annotation on REST methods.
 				Used to expose interface proxies without the need for {@link org.apache.juneau.rest.remoteable.RemoteableServlet}.
 			<p class='bcode w800'>
@@ -24239,12 +24256,12 @@
 
 		<h5 class='topic w800'>Server</h5>
 		<ul class='spaced-list'>
-			<li>New {@link org.apache.juneau.rest.ReaderResource} class.   
+			<li>New <code><del>ReaderResource</del></code> class.   
 				Represents the contents of a text file with convenience methods for resolving
 				<del><code>StringVar</code></del> variables and adding HTTP response headers.	
 				REST Java methods can return instances of these to serialize <code>Readers</code>
 					containing text with <del><code>StringVarResolver</code></del> variables in them.
-			<li>New {@link org.apache.juneau.rest.StreamResource} class.   
+			<li>New <code><del>StreamResource</del></code> class.   
 				REST Java methods can return instances of these to serialize <code>OutputStreams</code>.
 			<li>Fixed a bug in the stack trace hash algorithm in {@link org.apache.juneau.rest.RestException}.
 			<li>New methods in {@link org.apache.juneau.rest.RestRequest}:
@@ -24624,7 +24641,7 @@
 					<li><del><code>Param.description()</code></del>
 					<li><del><code>QParam.description()</code></del>
 				</ul>
-			<li>Support for sorting resources by name in {@link org.apache.juneau.rest.labels.ChildResourceDescriptions}.
+			<li>Support for sorting resources by name in <code><del>ChildResourceDescriptions</del></code>.
 		</ul>
 		
 		<h5 class='topic w800'>Samples</h5>
@@ -24673,7 +24690,7 @@
 		<ul class='spaced-list'>
 			<li>New <code><del>RestRequest.getServletParentURI()</del></code> method.
 			<li>New <code>$R{servletParentURI}</code> variable.
-			<li>Removed final modifier from {@link org.apache.juneau.rest.labels.ChildResourceDescriptions}.
+			<li>Removed final modifier from <code><del>ChildResourceDescriptions</del></code>.
 		</ul>
 		
 		<h5 class='topic w800'>Samples</h5>
@@ -25119,7 +25136,7 @@
 			Juno 5.1.0.5 is a moderate update.
 		</p>
 		<ul class='spaced-list'>
-			<li>New {@link org.apache.juneau.rest.Redirect} class that simplifies performing redirections in REST methods.
+			<li>New <code><del>Redirect</del></code> class that simplifies performing redirections in REST methods.
 			<li>New pluggable {@link org.apache.juneau.rest.ResponseHandler} class and {@link org.apache.juneau.rest.annotation.RestResource#responseHandlers() @RestResource.responseHandlers()} annotation
 				for defining customer response handlers for special kinds of POJOs.
 			<li>New method <del><code>UrlEncodingSerializer.serializeUrlPart(Object)</code></del> method.
@@ -25132,7 +25149,7 @@
 			<li>Fixed bug in {@link org.apache.juneau.json.JsonSerializer} where <js>"_class"</js> and <js>"items"</js> attributes were not quoted in strict mode when using SERIALIZER_addClassAttrs feature.	
 			<li>Fixed bug where <code>Content-Encoding</code> and<code>Character-Encoding</code> headers were being set when calling {@link org.apache.juneau.rest.RestResponse#getOutputStream()}.
 				These should not be set if interacting with the output streams at a low level.
-			<li>Eliminated various convenience <code>RestResponse.sendRedirect(...)</code> methods due to the introduction of the {@link org.apache.juneau.rest.Redirect} class.
+			<li>Eliminated various convenience <code>RestResponse.sendRedirect(...)</code> methods due to the introduction of the <code><del>Redirect</del></code> class.
 		</ul>
 	</div>
 
@@ -25284,7 +25301,7 @@
 			<li>Various new methods added to {@link org.apache.juneau.internal.StringUtils} and {@link org.apache.juneau.internal.ClassUtils}.
 			<li>Improved support on <code><del>BeanContext.getClassMetaFromString(String)</del></code>.<br>
 				Now supports resolving <code>"long[]"</code>, and so forth.
-			<li>{@link org.apache.juneau.rest.labels.ResourceDescription} name parameter is now automatically URL-encoded in links.
+			<li><code><del>ResourceDescription</del></code> name parameter is now automatically URL-encoded in links.
 			<li>{@link org.apache.juneau.rest.RestRequest} now correctly handles cases involving URL-encoded characters in the 
 				path info portion of URLs (e.g. <code>http://host/contextRoot/foo%2Fbar</code>).
 			<li>Removed lazy-initialization that required locking in {@link org.apache.juneau.ClassMeta}.  
@@ -25682,7 +25699,7 @@
 				Child resource paths are specified through {@link org.apache.juneau.rest.annotation.RestResource#path() @RestResource.path()}.
      		</li>
      		<li>
-     			New {@link org.apache.juneau.rest.labels.ChildResourceDescriptions} bean for automatically generating the contents of router resource pages.
+     			New <code><del>ChildResourceDescriptions</del></code> bean for automatically generating the contents of router resource pages.
      		</li>
      		<li>
 				Changed <code><ja>@RestMethod</ja>.pattern()</code> to {@link org.apache.juneau.rest.annotation.RestMethod#path() @RestMethod.path()} for naming consistency.
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
index 6bfd28c..ca7a2e2 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DirectoryResource.java
@@ -26,6 +26,7 @@ import java.util.logging.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.utils.*;
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
index a02f634..b167a76 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/DockerRegistryResource.java
@@ -21,7 +21,7 @@ import org.apache.juneau.config.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 
 /**
  * Sample resource that shows how to mirror query results from a Docker registry.
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
index fe3ae03..bcfa53b 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/MethodExampleResource.java
@@ -19,7 +19,7 @@ import java.util.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.utils.*;
 
 /**
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
index 5ca3a92..5a1f779 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PetStoreResource.java
@@ -29,6 +29,7 @@ import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
 import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transforms.*;
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
index e04ae04..73fdd69 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/PredefinedLabelsResource.java
@@ -18,7 +18,7 @@ import org.apache.juneau.examples.addressbook.*;
 import org.apache.juneau.html.annotation.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 
 /**
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
index ca27d3f..0b5b07d 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/SystemPropertiesResource.java
@@ -23,6 +23,7 @@ import org.apache.juneau.encoders.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.annotation.Body;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 
 @RestResource(
@@ -115,13 +116,13 @@ public class SystemPropertiesResource extends BasicRestServlet {
 		description="Returns the value of the specified system property.",
 		swagger={
 			"responses:{",
-				"200: {description:'The system property value, or null if not found.'}",
+				"200: {description:'The system property value, or null if not found'}",
 			"}"
 		}
 	)
 	public String getSystemProperty(
 			@Path(description="The system property name.", example="PATH") String propertyName
-		) throws Throwable {
+		) {
 		
 		return System.getProperty(propertyName);
 	}
@@ -132,13 +133,13 @@ public class SystemPropertiesResource extends BasicRestServlet {
 		description="Sets a new value for the specified system property.",
 		guards=AdminGuard.class
 	)
-	public RedirectToRoot setSystemProperty(
+	public RedirectServletRoot setSystemProperty(
 			@Path(description="The system property name") String propertyName, 
 			@Body(description="The new system property value") String value
 		) throws UserNotAdminException {
 		
 		System.setProperty(propertyName, value);
-		return new RedirectToRoot();
+		return RedirectServletRoot.INSTANCE;
 	}
 
 	@RestMethod(
@@ -147,12 +148,12 @@ public class SystemPropertiesResource extends BasicRestServlet {
 		description="Takes in a map of key/value pairs and creates a set of new system properties.",
 		guards=AdminGuard.class
 	)
-	public RedirectToRoot setSystemProperties(
+	public RedirectServletRoot setSystemProperties(
 			@Body(description="The new system property values", example="{key1:'val1',key2:123}") java.util.Properties newProperties
 		) throws UserNotAdminException {
 		
 		System.setProperties(newProperties);
-		return new RedirectToRoot();
+		return RedirectServletRoot.INSTANCE;
 	}
 
 	@RestMethod(
@@ -161,12 +162,12 @@ public class SystemPropertiesResource extends BasicRestServlet {
 		description="Deletes the specified system property.",
 		guards=AdminGuard.class
 	)
-	public RedirectToRoot deleteSystemProperty(
+	public RedirectServletRoot deleteSystemProperty(
 			@Path(description="The system property name") String propertyName
 		) throws UserNotAdminException {
 		
 		System.clearProperty(propertyName);
-		return new RedirectToRoot();
+		return RedirectServletRoot.INSTANCE;
 	}
 
 	@RestMethod(
@@ -205,9 +206,13 @@ public class SystemPropertiesResource extends BasicRestServlet {
 		description="Accepts a simple form post of a system property name/value pair.",
 		guards=AdminGuard.class
 	)
-	public RedirectToRoot formPagePost(@FormData("name") String name, @FormData("value") String value) throws UserNotAdminException {
+	public RedirectServletRoot formPagePost(
+			@FormData("name") String name, 
+			@FormData("value") String value
+		) throws UserNotAdminException {
+		
 		System.setProperty(name, value);
-		return new RedirectToRoot();
+		return RedirectServletRoot.INSTANCE;
 	}
 	
 	
@@ -223,12 +228,5 @@ public class SystemPropertiesResource extends BasicRestServlet {
 			super("User is not an administrator");
 		}
 	}
-
-	@ResponseInfo(code=302, description="Redirect to root.", headers={"Location:{description:'Redirect URI', type:'string'}"}, schema="IGNORE")
-	public static class RedirectToRoot extends Redirect {
-		public RedirectToRoot() {
-			super("servlet:/");
-		}
-	}
 	
 }
\ No newline at end of file
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
index 280884f..03cc272 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/TempDirResource.java
@@ -24,6 +24,7 @@ import org.apache.commons.io.*;
 import org.apache.juneau.dto.html5.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.utils.*;
 
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
index a356770..87da92b 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/addressbook/AddressBookResource.java
@@ -30,6 +30,7 @@ import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.transform.*;
 import org.apache.juneau.utils.*;
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
index f81a0ff..18f927d 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/petstore/PetStoreResource.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.examples.rest.petstore;
 
 import static org.apache.juneau.dto.swagger.ui.SwaggerUI.*;
+import static org.apache.juneau.rest.helper.Ok.*;
 
 import java.util.*;
 
@@ -20,7 +21,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 
 /**
@@ -474,23 +475,4 @@ public class PetStoreResource extends BasicRestServletJena {
 		req.getSession().removeAttribute("login-expires");
 		return OK;
 	}
-	
-	//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-	// Helper beans
-	//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-	
-	static final Ok OK = new Ok();
-	
-	@ResponseInfo(code=200, example="'OK'")
-	public static class Ok {
-
-		@Override
-		public String toString() {
-			return "OK";
-		}
-		
-		public static Ok fromString(String s) {
-			return OK;
-		}
-	}
 }
\ No newline at end of file
diff --git a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java b/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java
index c135a52..32cfa70 100644
--- a/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java
+++ b/juneau-examples/juneau-examples-rest/src/test/java/org/apache/juneau/examples/rest/RootResourcesTest.java
@@ -19,7 +19,7 @@ import org.apache.juneau.dto.swagger.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.rest.client.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.xml.*;
 import org.junit.*;
 
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
index 957ba0d..c41ba77 100644
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
+++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DebugResource.java
@@ -20,7 +20,7 @@ import org.apache.juneau.internal.*;
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 
 /**
  * Microservice debug utilities.
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index 7f1b24f..44e2b7f 100755
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -28,6 +28,7 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.transforms.*;
 import org.apache.juneau.utils.*;
 
diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
index 6ba43d1..aff8328 100755
--- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
+++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
@@ -29,6 +29,7 @@ import org.apache.juneau.dto.LinkString;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.transforms.*;
 
 /**
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
index f52f038..b5fc1f4 100644
--- a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
@@ -17,7 +17,7 @@ import static org.apache.juneau.http.HttpMethodName.*;
 import org.apache.juneau.microservice.resources.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 
 @RestResource(
 	path="/",
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
index 1b8a3a5..ed09093 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
@@ -24,6 +24,7 @@ import javax.servlet.*;
 import javax.servlet.http.*;
 
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.vars.*;
 
 /**
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServletGroup.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServletGroup.java
index 5c437ff..7e30ff7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServletGroup.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServletGroup.java
@@ -15,7 +15,7 @@ package org.apache.juneau.rest;
 import static org.apache.juneau.http.HttpMethodName.*;
 
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.labels.*;
+import org.apache.juneau.rest.helper.*;
 
 /**
  * Specialized subclass of {@link BasicRestServlet} for showing "group" pages.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseHandler.java
index 802d847..4432a08 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ResponseHandler.java
@@ -18,6 +18,7 @@ import javax.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.response.*;
 
 /**
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 2777171..3d212b1 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
@@ -46,6 +46,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.plaintext.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.converters.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.response.*;
 import org.apache.juneau.rest.vars.*;
 import org.apache.juneau.rest.widget.*;
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 f134546..c4c9928 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
@@ -38,6 +38,7 @@ import org.apache.juneau.httppart.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.rest.widget.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/BeanDescription.java
similarity index 96%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/BeanDescription.java
index 080594d..0d419a6 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/BeanDescription.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/BeanDescription.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest.labels;
+package org.apache.juneau.rest.helper;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/ChildResourceDescriptions.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ChildResourceDescriptions.java
similarity index 96%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/ChildResourceDescriptions.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ChildResourceDescriptions.java
index 547acd2..d20e3ae 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/ChildResourceDescriptions.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ChildResourceDescriptions.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest.labels;
+package org.apache.juneau.rest.helper;
 
 import java.util.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/Ok.java
similarity index 59%
copy from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
copy to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/Ok.java
index 798378c..99c7d85 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/Ok.java
@@ -1,42 +1,45 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.response;
-
-import java.io.*;
-
-import org.apache.juneau.rest.*;
-
-/**
- * Response handler for {@link Redirect} objects.
- * 
- * <h5 class='section'>See Also:</h5>
- * <ul>
- * 	<li class='link'><a class="juneau-rest-server &gt; " href="../../../../../overview-summary.html#juneau-rest-server.MethodReturnTypes">Overview &gt; Method Return Types</a>
- * </ul>
- */
-public final class RedirectHandler implements ResponseHandler {
-
-	@Override /* ResponseHandler */
-	public boolean handle(RestRequest req, RestResponse res, Object output) throws IOException, RestException {
-		if (output instanceof Redirect) {
-			Redirect r = (Redirect)output;
-			String uri = req.getUriResolver().resolve(r.getURI());
-			int rc = r.getHttpResponseCode();
-			if (rc != 0)
-				res.setStatus(rc);   // TODO - This may get ignored by the call below.
-			res.sendRedirect(uri);
-			return true;
-		}
-		return false;
-	}
-}
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              * 
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.rest.helper;
+
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * Represents a simple OK REST response.
+ * 
+ * <p>
+ * The response consist of the serialized string <js>"OK"</js>.
+ */
+@ResponseInfo(code=200, example="'OK'")
+public class Ok {
+	
+	/**
+	 * Reusable instance.
+	 */
+	public static final Ok OK = new Ok();
+
+	@Override /* Object */
+	public String toString() {
+		return "OK";
+	}
+	
+	/**
+	 * Used to convert example into an OK object.
+	 * 
+	 * @param s Ignored.
+	 * @return The static {@link #OK} object.
+	 */
+	public static Ok fromString(String s) {
+		return OK;
+	}
+}
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ReaderResource.java
similarity index 96%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ReaderResource.java
index c235cbd..d3d2360 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ReaderResource.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest;
+package org.apache.juneau.rest.helper;
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResourceBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ReaderResourceBuilder.java
similarity index 99%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResourceBuilder.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ReaderResourceBuilder.java
index 6cc44c7..6386433 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResourceBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ReaderResourceBuilder.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest;
+package org.apache.juneau.rest.helper;
 
 import java.io.*;
 import java.util.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/Redirect.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/Redirect.java
similarity index 92%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/Redirect.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/Redirect.java
index ce222f6..3dcd402 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/Redirect.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/Redirect.java
@@ -10,13 +10,15 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest;
+package org.apache.juneau.rest.helper;
 
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
 import java.text.*;
 
+import org.apache.juneau.rest.annotation.*;
+
 /**
  * REST methods can return this object as a shortcut for performing <code>HTTP 302</code> redirects.
  * 
@@ -25,6 +27,7 @@ import java.text.*;
  * 	<li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-rest-server.Redirect">Overview &gt; juneau-rest-server &gt; Redirect</a>
  * </ul>
  */
+@ResponseInfo(code=302, description="Redirect", headers={"Location:{description:'Redirect URI', type:'string', format:'uri'}"}, schema="IGNORE")
 public class Redirect {
 
 	private final int httpResponseCode;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/RedirectServletRoot.java
similarity index 59%
copy from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
copy to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/RedirectServletRoot.java
index 798378c..71f6f2a 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/RedirectServletRoot.java
@@ -1,42 +1,34 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.response;
-
-import java.io.*;
-
-import org.apache.juneau.rest.*;
-
-/**
- * Response handler for {@link Redirect} objects.
- * 
- * <h5 class='section'>See Also:</h5>
- * <ul>
- * 	<li class='link'><a class="juneau-rest-server &gt; " href="../../../../../overview-summary.html#juneau-rest-server.MethodReturnTypes">Overview &gt; Method Return Types</a>
- * </ul>
- */
-public final class RedirectHandler implements ResponseHandler {
-
-	@Override /* ResponseHandler */
-	public boolean handle(RestRequest req, RestResponse res, Object output) throws IOException, RestException {
-		if (output instanceof Redirect) {
-			Redirect r = (Redirect)output;
-			String uri = req.getUriResolver().resolve(r.getURI());
-			int rc = r.getHttpResponseCode();
-			if (rc != 0)
-				res.setStatus(rc);   // TODO - This may get ignored by the call below.
-			res.sendRedirect(uri);
-			return true;
-		}
-		return false;
-	}
-}
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                                                              * 
+// *                                                                                                                         *
+// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
+// *                                                                                                                         *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the License.                                              *
+// ***************************************************************************************************************************
+package org.apache.juneau.rest.helper;
+
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * Convenience subclass of {@link Redirect} for redirecting a response to the servlet root.
+ */
+@ResponseInfo(description="Redirect to servlet root")
+public class RedirectServletRoot extends Redirect {
+	
+	/**
+	 * Reusable instance.
+	 */
+	public static final RedirectServletRoot INSTANCE = new RedirectServletRoot();
+	
+	/**
+	 * Constructor.
+	 */
+	public RedirectServletRoot() {
+		super("servlet:/");
+	}
+}
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ResourceDescription.java
similarity index 94%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ResourceDescription.java
index 68376b0..d419358 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/ResourceDescription.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/ResourceDescription.java
@@ -10,10 +10,11 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest.labels;
+package org.apache.juneau.rest.helper;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.html.annotation.*;
+import org.apache.juneau.rest.annotation.*;
 
 /**
  * Shortcut label for child resources.  Typically used in router resources.
@@ -29,6 +30,7 @@ import org.apache.juneau.html.annotation.*;
  * </ul>
  */
 @Bean(properties="name,description", fluentSetters=true)
+@ResponseInfo(schema="IGNORE")
 public final class ResourceDescription implements Comparable<ResourceDescription> {
 
 	private String name, description;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StreamResource.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/StreamResource.java
similarity index 96%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StreamResource.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/StreamResource.java
index 999c80e..0a68c36 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StreamResource.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/StreamResource.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest;
+package org.apache.juneau.rest.helper;
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StreamResourceBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/StreamResourceBuilder.java
similarity index 99%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StreamResourceBuilder.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/StreamResourceBuilder.java
index df55172..226de63 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/StreamResourceBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/StreamResourceBuilder.java
@@ -10,7 +10,7 @@
 // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
 // * specific language governing permissions and limitations under the License.                                              *
 // ***************************************************************************************************************************
-package org.apache.juneau.rest;
+package org.apache.juneau.rest.helper;
 
 import java.io.*;
 import java.util.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/package-info.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/package-info.java
similarity index 93%
rename from juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/package-info.java
rename to juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/package-info.java
index 3ea441b..fa950f7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/labels/package-info.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/helper/package-info.java
@@ -13,6 +13,6 @@
  ***************************************************************************************************************************/
 
 /**
- * REST Interface Label Classes
+ * REST Interface Helper Classes
  */
-package org.apache.juneau.rest.labels;
\ No newline at end of file
+package org.apache.juneau.rest.helper;
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
index 798378c..9964c42 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/RedirectHandler.java
@@ -15,6 +15,7 @@ package org.apache.juneau.rest.response;
 import java.io.*;
 
 import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.helper.*;
 
 /**
  * Response handler for {@link Redirect} objects.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
index 766016b..6a92040 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
@@ -20,6 +20,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.helper.*;
 
 /**
  * Response handler for {@link Writable} and {@link ReaderResource} objects.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/WritableHandler.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/WritableHandler.java
index dad3bec..b5f37b8 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/WritableHandler.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/response/WritableHandler.java
@@ -20,6 +20,7 @@ import java.util.*;
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.helper.*;
 
 /**
  * Response handler for {@link Writable} and {@link ReaderResource} objects.
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 1f3e3e8..384c81b 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
@@ -13,6 +13,7 @@
 package org.apache.juneau.rest.vars;
 
 import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.helper.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
 

-- 
To stop receiving notification emails like this one, please contact
jamesbognar@apache.org.