Repository: incubator-juneau
Updated Branches:
  refs/heads/master edbba9377 -> d59d737c3


Code refactoring.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/d59d737c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/d59d737c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/d59d737c

Branch: refs/heads/master
Commit: d59d737c3a6791ec7f24effeb107c6f67676f98e
Parents: edbba93
Author: JamesBognar <[email protected]>
Authored: Mon Feb 27 16:56:24 2017 -0500
Committer: JamesBognar <[email protected]>
Committed: Mon Feb 27 16:56:24 2017 -0500

----------------------------------------------------------------------
 .../main/java/org/apache/juneau/Streamable.java |   2 +-
 .../org/apache/juneau/svl/vars/ArgsVar.java     |   5 +-
 .../apache/juneau/svl/vars/ConfigFileVar.java   |   5 +-
 .../apache/juneau/svl/vars/EnvVariablesVar.java |   5 +-
 .../java/org/apache/juneau/svl/vars/IfVar.java  |   5 +-
 .../apache/juneau/svl/vars/ManifestFileVar.java |   5 +-
 .../org/apache/juneau/svl/vars/SwitchVar.java   |   5 +-
 .../juneau/svl/vars/SystemPropertiesVar.java    |   5 +-
 .../juneau/rest/test/UrlPathPatternTest.java    |   2 +-
 .../org/apache/juneau/rest/ReaderResource.java  | 198 +++++++++++++++----
 .../java/org/apache/juneau/rest/Redirect.java   |  36 +++-
 .../org/apache/juneau/rest/RestException.java   |   2 +-
 .../org/apache/juneau/rest/RestRequest.java     |  26 ++-
 .../org/apache/juneau/rest/RestResponse.java    |   2 +-
 .../org/apache/juneau/rest/RestServlet.java     |  28 +--
 .../org/apache/juneau/rest/StreamResource.java  |  24 ++-
 .../org/apache/juneau/rest/UrlPathPattern.java  |  76 ++++---
 .../rest/matchers/MultipartFormDataMatcher.java |   1 +
 .../rest/matchers/UrlEncodedFormMatcher.java    |   1 +
 .../rest/remoteable/RemoteableServlet.java      |   2 +-
 .../juneau/rest/response/StreamableHandler.java |   4 +-
 .../juneau/rest/vars/LocalizationVar.java       |   5 +-
 .../org/apache/juneau/rest/vars/RequestVar.java |   5 +-
 .../rest/vars/SerializedRequestAttrVar.java     |   5 +-
 .../juneau/rest/vars/ServletInitParamVar.java   |   5 +-
 .../apache/juneau/rest/vars/UrlEncodeVar.java   |   5 +-
 26 files changed, 348 insertions(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/Streamable.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/Streamable.java 
b/juneau-core/src/main/java/org/apache/juneau/Streamable.java
index 9dc9b44..6cb8237 100644
--- a/juneau-core/src/main/java/org/apache/juneau/Streamable.java
+++ b/juneau-core/src/main/java/org/apache/juneau/Streamable.java
@@ -35,5 +35,5 @@ public interface Streamable {
         *
         * @return The media type, or <jk>null</jk> if the media type is not 
known.
         */
-       String getMediaType();
+       MediaType getMediaType();
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
index b005c1f..6ec840e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
@@ -48,11 +48,14 @@ public class ArgsVar extends DefaultingVar {
         */
        public static final String SESSION_args = "args";
 
+       /** The name of this variable. */
+       public static final String NAME = "ARG";
+
        /**
         * Constructor.
         */
        public ArgsVar() {
-               super("ARG");
+               super(NAME);
        }
 
        @Override /* Var */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
index ff0d2d3..a6f96c9 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ConfigFileVar.java
@@ -49,11 +49,14 @@ public class ConfigFileVar extends DefaultingVar {
         */
        public static final String SESSION_config = "config";
 
+       /** The name of this variable. */
+       public static final String NAME = "C";
+
        /**
         * Constructor.
         */
        public ConfigFileVar() {
-               super("C");
+               super(NAME);
        }
 
        @Override /* Var */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
index d58e442..ecda3fd 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
@@ -35,11 +35,14 @@ import org.apache.juneau.svl.*;
  */
 public class EnvVariablesVar extends DefaultingVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "E";
+
        /**
         * Constructor.
         */
        public EnvVariablesVar() {
-               super("E");
+               super(NAME);
        }
 
        @Override /* Var */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/IfVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/vars/IfVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/IfVar.java
index b0b0f1b..f7eca79 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/IfVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/IfVar.java
@@ -45,11 +45,14 @@ import org.apache.juneau.svl.*;
 */
 public class IfVar extends MultipartVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "IF";
+
        /**
         * Constructor.
         */
        public IfVar() {
-               super("IF");
+               super(NAME);
        }
 
        @Override /* MultipartVar */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
index 2e35666..f117102 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
@@ -48,11 +48,14 @@ public class ManifestFileVar extends DefaultingVar {
         */
        public static final String SESSION_manifest = "manifest";
 
+       /** The name of this variable. */
+       public static final String NAME = "MF";
+
        /**
         * Constructor.
         */
        public ManifestFileVar() {
-               super("MF");
+               super(NAME);
        }
 
        @Override /* Var */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
index 67bef8c..1f66516 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
@@ -46,11 +46,14 @@ import org.apache.juneau.svl.*;
  */
 public class SwitchVar extends MultipartVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "SWITCH";
+
        /**
         * Constructor.
         */
        public SwitchVar() {
-               super("SWITCH");
+               super(NAME);
        }
 
        @Override /* MultipartVar */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
index 937b149..7242db4 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
@@ -35,10 +35,13 @@ import org.apache.juneau.svl.*;
  */
 public class SystemPropertiesVar extends MapVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "S";
+
        /**
         * Constructor.
         */
        public SystemPropertiesVar() {
-               super("S", System.getProperties());
+               super(NAME, System.getProperties());
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
index f577d5f..c05bc2e 100644
--- 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
+++ 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/UrlPathPatternTest.java
@@ -35,6 +35,6 @@ public class UrlPathPatternTest extends RestTestcase {
                l.add(new UrlPathPattern("/foo/{id}/bar/*"));
 
                Collections.sort(l);
-               
assertEquals("['/foo/bar','/foo/bar/*','/foo/{id}/bar','/foo/{id}/bar/*','/foo/{id}','/foo/{id}/*','/foo','/foo/*']",
 JsonSerializer.DEFAULT_LAX.serialize(l));
+               
assertEquals("[{vars:[],patternString:'/foo/bar'},{vars:[],patternString:'/foo/bar/*'},{vars:['id'],patternString:'/foo/{id}/bar'},{vars:['id'],patternString:'/foo/{id}/bar/*'},{vars:['id'],patternString:'/foo/{id}'},{vars:['id'],patternString:'/foo/{id}/*'},{vars:[],patternString:'/foo'},{vars:[],patternString:'/foo/*'}]",
 JsonSerializer.DEFAULT_LAX.serialize(l));
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/ReaderResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/ReaderResource.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/ReaderResource.java
index 2dc65a1..5fd0268 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/ReaderResource.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/ReaderResource.java
@@ -16,6 +16,7 @@ import java.io.*;
 import java.util.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.response.*;
 import org.apache.juneau.svl.*;
@@ -28,44 +29,167 @@ import org.apache.juneau.svl.*;
  */
 public class ReaderResource implements Writable {
 
-       private String contents;
-       private MediaType mediaType;
-       private VarResolverSession varSession;
-       private Map<String,String> headers = new LinkedHashMap<String,String>();
+       private final MediaType mediaType;
+       private final String[] contents;
+       private final VarResolverSession varSession;
+       private final Map<String,String> headers;
 
        /**
         * Constructor.
-        *
-        * @param contents The contents of this resource.
         * @param mediaType The HTTP media type.
+        * @param contents The contents of this resource.
+        * <br>If multiple contents are specified, the results will be 
concatenated.
+        * <br>Contents can be any of the following:
+        * <ul>
+        *      <li><code>CharSequence</code>
+        *      <li><code>Reader</code>
+        *      <li><code>File</code>
+        * </ul>
+        * @throws IOException
         */
-       protected ReaderResource(String contents, MediaType mediaType) {
-               this.contents = contents;
-               this.mediaType = mediaType;
+       protected ReaderResource(MediaType mediaType, Object...contents) throws 
IOException {
+               this(mediaType, null, null, contents);
        }
 
        /**
-        * Add an HTTP response header.
-        *
-        * @param name The header name.
-        * @param value The header value converted to a string using {@link 
Object#toString()}.
-        * @return This object (for method chaining).
+        * Constructor.
+        * @param mediaType The resource media type.
+        * @param headers The HTTP response headers for this streamed resource.
+        * @param varSession Optional variable resolver for resolving variables 
in the string.
+        * @param contents The resource contents.
+        * <br>If multiple contents are specified, the results will be 
concatenated.
+        * <br>Contents can be any of the following:
+        * <ul>
+        *      <li><code>InputStream</code>
+        *      <li><code>Reader</code> - Converted to UTF-8 bytes.
+        *      <li><code>File</code>
+        *      <li><code>CharSequence</code> - Converted to UTF-8 bytes.
+        *      </ul>
+        * @throws IOException
         */
-       public ReaderResource setHeader(String name, Object value) {
-               headers.put(name, value == null ? "" : value.toString());
-               return this;
+       public ReaderResource(MediaType mediaType, Map<String,Object> headers, 
VarResolverSession varSession, Object...contents) throws IOException {
+               this.mediaType = mediaType;
+               this.varSession = varSession;
+
+               Map<String,String> m = new LinkedHashMap<String,String>();
+               if (headers != null)
+                       for (Map.Entry<String,Object> e : headers.entrySet())
+                               m.put(e.getKey(), 
StringUtils.toString(e.getValue()));
+               this.headers = Collections.unmodifiableMap(m);
+
+               this.contents = new String[contents.length];
+               for (int i = 0; i < contents.length; i++) {
+                       Object c = contents[i];
+                       if (c == null)
+                               this.contents[i] = "";
+                       else if (c instanceof InputStream)
+                               this.contents[i] = IOUtils.read((InputStream)c);
+                       else if (c instanceof File)
+                               this.contents[i] = IOUtils.read((File)c);
+                       else if (c instanceof Reader)
+                               this.contents[i] = IOUtils.read((Reader)c);
+                       else if (c instanceof CharSequence)
+                               this.contents[i] = ((CharSequence)c).toString();
+                       else
+                               throw new IOException("Invalid class type 
passed to ReaderResource: " + c.getClass().getName());
+               }
        }
 
        /**
-        * Use the specified {@link VarResolver} to resolve any {@link 
Parameter StringVars} in the
-        * contents of this file when the {@link #writeTo(Writer)} or {@link 
#toString()} methods are called.
-        *
-        * @param varSession The string variable resolver to use to resolve 
string variables.
-        * @return This object (for method chaining).
+        * Builder class for constructing {@link ReaderResource} objects.
         */
-       public ReaderResource setVarSession(VarResolverSession varSession) {
-               this.varSession = varSession;
-               return this;
+       @SuppressWarnings("hiding")
+       public static class Builder {
+               ArrayList<Object> contents = new ArrayList<Object>();
+               MediaType mediaType;
+               VarResolverSession varResolver;
+               Map<String,String> headers = new LinkedHashMap<String,String>();
+
+               /**
+                * Specifies the resource media type string.
+                * @param mediaType The resource media type string.
+                * @return This object (for method chaining).
+                */
+               public Builder mediaType(String mediaType) {
+                       this.mediaType = MediaType.forString(mediaType);
+                       return this;
+               }
+
+               /**
+                * Specifies the resource media type string.
+                * @param mediaType The resource media type string.
+                * @return This object (for method chaining).
+                */
+               public Builder mediaType(MediaType mediaType) {
+                       this.mediaType = mediaType;
+                       return this;
+               }
+
+               /**
+                * Specifies the contents for this resource.
+                * <p>
+                * This method can be called multiple times to add more content.
+                *
+                * @param contents The resource contents.
+                * <br>If multiple contents are specified, the results will be 
concatenated.
+                * <br>Contents can be any of the following:
+                * <ul>
+                *      <li><code>InputStream</code>
+                *      <li><code>Reader</code> - Converted to UTF-8 bytes.
+                *      <li><code>File</code>
+                *      <li><code>CharSequence</code> - Converted to UTF-8 
bytes.
+                *      </ul>
+                * @return This object (for method chaining).
+                */
+               public Builder contents(Object...contents) {
+                       this.contents.addAll(Arrays.asList(contents));
+                       return this;
+               }
+
+               /**
+                * Specifies an HTTP response header value.
+                *
+                * @param name The HTTP header name.
+                * @param value The HTTP header value.  Will be converted to a 
<code>String</code> using {@link Object#toString()}.
+                * @return This object (for method chaining).
+                */
+               public Builder header(String name, Object value) {
+                       this.headers.put(name, StringUtils.toString(value));
+                       return this;
+               }
+
+               /**
+                * Specifies HTTP response header values.
+                *
+                * @param headers The HTTP headers.  Values will be converted 
to <code>Strings</code> using {@link Object#toString()}.
+                * @return This object (for method chaining).
+                */
+               public Builder headers(Map<String,Object> headers) {
+                       for (Map.Entry<String,Object> e : headers.entrySet())
+                               header(e.getKey(), e.getValue());
+                       return this;
+               }
+
+               /**
+                * Specifies the variable resolver to use for this resource.
+                *
+                * @param varResolver The variable resolver.
+                * @return This object (for method chaining).
+                */
+               public Builder varResolver(VarResolverSession varResolver) {
+                       this.varResolver = varResolver;
+                       return this;
+               }
+
+               /**
+                * Create a new {@link ReaderResource} using values in this 
builder.
+                *
+                * @return A new immutable {@link ReaderResource} object.
+                * @throws IOException
+                */
+               public ReaderResource build() throws IOException {
+                       return new ReaderResource(mediaType, headers, 
varResolver, contents.toArray());
+               }
        }
 
        /**
@@ -79,21 +203,29 @@ public class ReaderResource implements Writable {
 
        @Override /* Writeable */
        public void writeTo(Writer w) throws IOException {
-               if (varSession != null)
-                       varSession.resolveTo(contents, w);
-               else
-                       w.write(contents);
+               for (String s : contents) {
+                       if (varSession != null)
+                               varSession.resolveTo(s, w);
+                       else
+                               w.write(s);
+               }
        }
 
-       @Override /* Streamable */
+       @Override /* Writeable */
        public MediaType getMediaType() {
                return mediaType;
        }
 
        @Override /* Object */
        public String toString() {
-               if (varSession != null)
-                       return varSession.resolve(contents);
-               return contents;
+               if (contents.length == 1 && varSession == null)
+                       return contents[0];
+               StringWriter sw = new StringWriter();
+               for (String s : contents) {
+                       if (varSession != null)
+                               return varSession.resolve(s);
+                       sw.write(s);
+               }
+               return sw.toString();
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
index 962e432..348346a 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/Redirect.java
@@ -66,20 +66,25 @@ import org.apache.juneau.urlencoding.*;
  */
 public final class Redirect {
 
-       private int httpResponseCode;
-       private String url;
-       private Object[] args;
+       private final int httpResponseCode;
+       private final String url;
+       private final Object[] args;
 
        /**
         * Redirect to the specified URL.
         * Relative paths are interpreted as relative to the servlet path.
         *
         * @param url The URL to redirect to.
+        * <br>Can be any of the following:
+        * <ul>
+        *      <li><code>URL</code>
+        *      <li><code>URI</code>
+        *      <li><code>CharSequence</code>
+        * </ul>
         * @param args Optional {@link MessageFormat}-style arguments.
         */
-       public Redirect(CharSequence url, Object...args) {
-               this.url = (url == null ? null : url.toString());
-               this.args = args;
+       public Redirect(Object url, Object...args) {
+               this(0, url, args);
        }
 
        /**
@@ -87,9 +92,15 @@ public final class Redirect {
         * Same as calling <code>toString()</code> on the object and using the 
other constructor.
         *
         * @param url The URL to redirect to.
+        * <br>Can be any of the following:
+        * <ul>
+        *      <li><code>URL</code>
+        *      <li><code>URI</code>
+        *      <li><code>CharSequence</code>
+        * </ul>
         */
        public Redirect(Object url) {
-               this.url = (url == null ? null : url.toString());
+               this(0, url, (Object[])null);
        }
 
        /**
@@ -98,9 +109,15 @@ public final class Redirect {
         *
         * @param httpResponseCode The HTTP response code.
         * @param url The URL to redirect to.
+        * <br>Can be any of the following:
+        * <ul>
+        *      <li><code>URL</code>
+        *      <li><code>URI</code>
+        *      <li><code>CharSequence</code>
+        * </ul>
         * @param args Optional {@link MessageFormat}-style arguments.
         */
-       public Redirect(int httpResponseCode, CharSequence url, Object...args) {
+       public Redirect(int httpResponseCode, Object url, Object...args) {
                this.httpResponseCode = httpResponseCode;
                this.url = (url == null ? null : url.toString());
                this.args = args;
@@ -110,6 +127,7 @@ public final class Redirect {
         * Shortcut for redirecting to the servlet root.
         */
        public Redirect() {
+               this(0, null, (Object[])null);
        }
 
        /**
@@ -122,7 +140,7 @@ public final class Redirect {
                if (url != null && args != null && args.length > 0) {
                        for (int i = 0; i < args.length; i++)
                                args[i] = s.serializeUrlPart(args[i]);
-                       url = MessageFormat.format(url, args);
+                       return MessageFormat.format(url, args);
                }
                return url;
        }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
index 5fd3d2c..77d695a 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestException.java
@@ -25,7 +25,7 @@ public class RestException extends RuntimeException {
 
        private static final long serialVersionUID = 1L;
 
-       private int status;
+       private final int status;
        private int occurrence;
 
        /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
index 5682f24..113d9da 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -63,8 +63,9 @@ import org.apache.juneau.utils.*;
 public final class RestRequest extends HttpServletRequestWrapper {
 
        private final RestServlet servlet;
-       private String method, pathRemainder, body;
-       Method javaMethod;
+       private final String method;
+       private String pathRemainder, body;
+       private Method javaMethod;
        private ObjectMap properties;
        private SerializerGroup serializerGroup;
        private ParserGroup parserGroup;
@@ -74,8 +75,9 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
        private UrlEncodingParser urlEncodingParser;   // The parser used to 
parse URL attributes and parameters (beanContext also used to parse headers)
        private BeanSession beanSession;
        private VarResolverSession varSession;
-       private Map<String,String[]> queryParams;
-       private Map<String,String> defaultServletHeaders, defaultMethodHeaders, 
overriddenHeaders, overriddenQueryParams, overriddenFormDataParams, 
pathParameters;
+       private final Map<String,String[]> queryParams;
+       private final Map<String,String> defaultServletHeaders;
+       private Map<String,String> defaultMethodHeaders, overriddenHeaders, 
overriddenQueryParams, overriddenFormDataParams, pathParameters;
        private boolean isPost;
        private String servletURI, relativeServletURI;
        private String charset, defaultCharset;
@@ -103,11 +105,13 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
 
                        // Get the HTTP method.
                        // Can be overridden through a "method" GET attribute.
-                       method = super.getMethod();
+                       String _method = super.getMethod();
 
                        String m = getQueryParameter("method");
                        if (! StringUtils.isEmpty(m) && 
(servlet.context.allowMethodParams.contains(m) || 
servlet.context.allowMethodParams.contains("*")))
-                               method = m;
+                               _method = m;
+
+                       method = _method;
 
                        if (servlet.context.allowBodyParam)
                                body = getQueryParameter("body");
@@ -1798,10 +1802,10 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                String s = servlet.getResourceAsString(name, getLocale());
                if (s == null)
                        return null;
-               ReaderResource rr = new ReaderResource(s, mediaType);
+               ReaderResource.Builder b = new 
ReaderResource.Builder().mediaType(mediaType).contents(s);
                if (resolveVars)
-                       rr.setVarSession(getVarResolverSession());
-               return rr;
+                       b.varResolver(getVarResolverSession());
+               return b.build();
        }
 
        /**
@@ -1969,4 +1973,8 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                }
                return h;
        }
+
+       void setJavaMethod(Method method) {
+               this.javaMethod = method;
+       }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
index d4fbd50..3fa5398 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -55,7 +55,7 @@ public final class RestResponse extends 
HttpServletResponseWrapper {
        SerializerGroup serializerGroup;
        UrlEncodingSerializer urlEncodingSerializer;         // The serializer 
used to convert arguments passed into Redirect objects.
        private EncoderGroup encoders;
-       private RestServlet servlet;
+       private final RestServlet servlet;
        private ServletOutputStream os;
 
        /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
index 9bbd5a4..396e5e1 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -825,7 +825,7 @@ public abstract class RestServlet extends HttpServlet {
                                if (sm.isRequestAllowed(req)) {
                                        Operation o = 
sm.getSwaggerOperation(req);
                                        s.path(
-                                               sm.pathPattern.patternString,
+                                               
sm.pathPattern.getPatternString(),
                                                sm.httpMethod.toLowerCase(),
                                                o
                                        );
@@ -1349,7 +1349,7 @@ public abstract class RestServlet extends HttpServlet {
                                                                String name = 
(i == -1 ? p2 : p2.substring(i+1));
                                                                String 
mediaType = getMimetypesFileTypeMap().getContentType(name);
                                                                ObjectMap 
headers = new ObjectMap().append("Cache-Control", "max-age=86400, public");
-                                                               
staticFilesCache.put(pathInfo, new StreamResource(mediaType, headers, is));
+                                                               
staticFilesCache.put(pathInfo, new 
StreamResource(MediaType.forString(mediaType), headers, is));
                                                                return 
staticFilesCache.get(pathInfo);
                                                        } finally {
                                                                is.close();
@@ -1864,7 +1864,7 @@ public abstract class RestServlet extends HttpServlet {
                                for (String path : 
StringUtils.split(getVarResolver().resolve(r.stylesheet()), ','))
                                        contents.add(getResource(path, null));
 
-                               return new StreamResource("text/css", 
contents.toArray());
+                               return new 
StreamResource(MediaType.forString("text/css"), contents.toArray());
                        }
                return null;
        }
@@ -1890,7 +1890,7 @@ public abstract class RestServlet extends HttpServlet {
                                InputStream is = getResource(path, null);
                                if (is != null) {
                                        try {
-                                               return new 
StreamResource("image/x-icon", is);
+                                               return new 
StreamResource(MediaType.forString("image/x-icon"), is);
                                        } finally {
                                                is.close();
                                        }
@@ -2268,9 +2268,9 @@ public abstract class RestServlet extends HttpServlet {
                                for (int i = 0; i < params.length; i++) {
                                        params[i] = new MethodParam(this, 
pt[i], method, pa[i]);
                                        if (params[i].paramType == PATH && 
params[i].name.isEmpty()) {
-                                               if (pathPattern.vars.length <= 
attrIdx)
+                                               if 
(pathPattern.getVars().length <= attrIdx)
                                                        throw new 
RestServletException("Number of attribute parameters in method ''{0}'' exceeds 
the number of URL pattern variables.", method.getName());
-                                               params[i].name = 
pathPattern.vars[attrIdx++];
+                                               params[i].name = 
pathPattern.getVars()[attrIdx++];
                                        }
                                }
 
@@ -2309,8 +2309,8 @@ public abstract class RestServlet extends HttpServlet {
 
                private Operation getSwaggerOperationFromFile(RestRequest req) {
                        Swagger s = req.getSwaggerFromFile();
-                       if (s != null && s.getPaths() != null && 
s.getPaths().get(pathPattern.patternString) != null)
-                               return 
s.getPaths().get(pathPattern.patternString).get(httpMethod);
+                       if (s != null && s.getPaths() != null && 
s.getPaths().get(pathPattern.getPatternString()) != null)
+                               return 
s.getPaths().get(pathPattern.getPatternString()).get(httpMethod);
                        return null;
                }
 
@@ -2580,7 +2580,7 @@ public abstract class RestServlet extends HttpServlet {
 
                private boolean isRequestAllowed(RestRequest req) {
                        for (RestGuard guard : guards) {
-                               req.javaMethod = method;
+                               req.setJavaMethod(method);
                                if (! guard.isRequestAllowed(req))
                                        return false;
                        }
@@ -2595,10 +2595,10 @@ public abstract class RestServlet extends HttpServlet {
                                return SC_NOT_FOUND;
 
                        String remainder = null;
-                       if (patternVals.length > pathPattern.vars.length)
-                               remainder = 
patternVals[pathPattern.vars.length];
-                       for (int i = 0; i < pathPattern.vars.length; i++)
-                               req.setPathParameter(pathPattern.vars[i], 
patternVals[i]);
+                       if (patternVals.length > pathPattern.getVars().length)
+                               remainder = 
patternVals[pathPattern.getVars().length];
+                       for (int i = 0; i < pathPattern.getVars().length; i++)
+                               req.setPathParameter(pathPattern.getVars()[i], 
patternVals[i]);
 
                        req.init(method, remainder, 
createRequestProperties(mProperties, req), mDefaultRequestHeaders, 
mDefaultEncoding, mSerializers, mParsers, mUrlEncodingParser);
                        res.init(req.getProperties(), mDefaultEncoding, 
mSerializers, mUrlEncodingSerializer, mEncoders);
@@ -2679,7 +2679,7 @@ public abstract class RestServlet extends HttpServlet {
 
                @Override /* Object */
                public String toString() {
-                       return "SimpleMethod: name=" + httpMethod + ", path=" + 
pathPattern.patternString;
+                       return "SimpleMethod: name=" + httpMethod + ", path=" + 
pathPattern.getPatternString();
                }
 
                /*

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/StreamResource.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/StreamResource.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/StreamResource.java
index 31290ae..dbd5076 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/StreamResource.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/StreamResource.java
@@ -31,13 +31,12 @@ import org.apache.juneau.rest.response.*;
  */
 public class StreamResource implements Streamable {
 
+       private final MediaType mediaType;
        private final byte[][] contents;
-       private final String mediaType;
        private final Map<String,String> headers;
 
        /**
         * Constructor.
-        *
         * @param mediaType The resource media type.
         * @param contents The resource contents.
         * <br>If multiple contents are specified, the results will be 
concatenated.
@@ -51,13 +50,12 @@ public class StreamResource implements Streamable {
         *      </ul>
         * @throws IOException
         */
-       public StreamResource(String mediaType, Object...contents) throws 
IOException {
+       public StreamResource(MediaType mediaType, Object...contents) throws 
IOException {
                this(mediaType, null, contents);
        }
 
        /**
         * Constructor.
-        *
         * @param mediaType The resource media type.
         * @param headers The HTTP response headers for this streamed resource.
         * @param contents The resource contents.
@@ -72,7 +70,7 @@ public class StreamResource implements Streamable {
         *      </ul>
         * @throws IOException
         */
-       public StreamResource(String mediaType, Map<String,Object> headers, 
Object...contents) throws IOException {
+       public StreamResource(MediaType mediaType, Map<String,Object> headers, 
Object...contents) throws IOException {
                this.mediaType = mediaType;
 
                Map<String,String> m = new LinkedHashMap<String,String>();
@@ -103,12 +101,11 @@ public class StreamResource implements Streamable {
 
        /**
         * Builder class for constructing {@link StreamResource} objects.
-        * <p>
         */
        @SuppressWarnings("hiding")
        public static class Builder {
                ArrayList<Object> contents = new ArrayList<Object>();
-               String mediaType;
+               MediaType mediaType;
                Map<String,String> headers = new LinkedHashMap<String,String>();
 
                /**
@@ -117,6 +114,16 @@ public class StreamResource implements Streamable {
                 * @return This object (for method chaining).
                 */
                public Builder mediaType(String mediaType) {
+                       this.mediaType = MediaType.forString(mediaType);
+                       return this;
+               }
+
+               /**
+                * Specifies the resource media type string.
+                * @param mediaType The resource media type string.
+                * @return This object (for method chaining).
+                */
+               public Builder mediaType(MediaType mediaType) {
                        this.mediaType = mediaType;
                        return this;
                }
@@ -178,7 +185,6 @@ public class StreamResource implements Streamable {
                }
        }
 
-
        /**
         * Get the HTTP response headers.
         * @return The HTTP response headers.  An unmodifiable map.  Never 
<jk>null</jk>.
@@ -194,7 +200,7 @@ public class StreamResource implements Streamable {
        }
 
        @Override /* Streamable */
-       public String getMediaType() {
+       public MediaType getMediaType() {
                return mediaType;
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
index 25fe89d..ad6eb60 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/UrlPathPattern.java
@@ -26,10 +26,11 @@ import org.apache.juneau.rest.annotation.*;
  * Handles aspects of matching and precedence ordering.
  */
 public final class UrlPathPattern implements Comparable<UrlPathPattern> {
-       private Pattern pattern;
-       String patternString;
-       private boolean isOnlyDotAll, isDotAll;
-       String[] vars = new String[0];
+
+       private final Pattern pattern;
+       private final String patternString;
+       private final boolean isOnlyDotAll, isDotAll;
+       private final String[] vars;
 
        /**
         * Constructor.
@@ -38,26 +39,39 @@ public final class UrlPathPattern implements 
Comparable<UrlPathPattern> {
         */
        public UrlPathPattern(String patternString) {
                this.patternString = patternString;
-               if (! StringUtils.startsWith(patternString, '/'))
-                       patternString = '/' + patternString;
-               if (patternString.equals("/*")) {
-                       isOnlyDotAll = true;
-                       return;
+               Builder b = new Builder(patternString);
+               pattern = b.pattern;
+               isDotAll = b.isDotAll;
+               isOnlyDotAll = b.isOnlyDotAll;
+               vars = b.vars.toArray(new String[b.vars.size()]);
+       }
+
+       @SuppressWarnings("hiding")
+       class Builder {
+               boolean isDotAll, isOnlyDotAll;
+               Pattern pattern;
+               List<String> vars = new LinkedList<String>();
+
+               private Builder(String patternString) {
+                       if (! StringUtils.startsWith(patternString, '/'))
+                               patternString = '/' + patternString;
+                       if (patternString.equals("/*")) {
+                               isOnlyDotAll = true;
+                               return;
+                       }
+                       if (patternString.endsWith("/*"))
+                               isDotAll = true;
+
+                       // Find all {xxx} variables.
+                       Pattern p = Pattern.compile("\\{([^\\}]+)\\}");
+                       Matcher m = p.matcher(patternString);
+                       while (m.find())
+                               vars.add(m.group(1));
+
+                       patternString = 
patternString.replaceAll("\\{[^\\}]+\\}", "([^\\/]+)");
+                       patternString = patternString.replaceAll("\\/\\*$", 
"((?:)|(?:\\/.*))");
+                       pattern = Pattern.compile(patternString);
                }
-               if (patternString.endsWith("/*"))
-                       isDotAll = true;
-
-               // Find all {xxx} variables.
-               Pattern p = Pattern.compile("\\{([^\\}]+)\\}");
-               List<String> vl = new LinkedList<String>();
-               Matcher m = p.matcher(patternString);
-               while (m.find())
-                       vl.add(m.group(1));
-               this.vars = vl.toArray(new String[vl.size()]);
-
-               patternString = patternString.replaceAll("\\{[^\\}]+\\}", 
"([^\\/]+)");
-               patternString = patternString.replaceAll("\\/\\*$", 
"((?:)|(?:\\/.*))");
-               pattern = Pattern.compile(patternString);
        }
 
        /**
@@ -156,4 +170,20 @@ public final class UrlPathPattern implements 
Comparable<UrlPathPattern> {
        public String toRegEx() {
                return isOnlyDotAll ? "*" : pattern.pattern();
        }
+
+       /**
+        * Bean property getter:  <property>vars</property>.
+        * @return The value of the <property>vars</property> property on this 
bean, or <jk>null</jk> if it is not set.
+        */
+       public String[] getVars() {
+               return vars;
+       }
+
+       /**
+        * Bean property getter:  <property>patternString</property>.
+        * @return The value of the <property>patternString</property> property 
on this bean, or <jk>null</jk> if it is not set.
+        */
+       public String getPatternString() {
+               return patternString;
+       }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
index a27d0f1..b7ffdfa 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/MultipartFormDataMatcher.java
@@ -18,6 +18,7 @@ import org.apache.juneau.rest.*;
  * Predefined matcher for matching requests with content type 
<js>"multipart/form-data"</js>.
  */
 public class MultipartFormDataMatcher extends RestMatcher {
+
        @Override /* RestMatcher */
        public boolean matches(RestRequest req) {
                String contentType = req.getContentType();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
index 6a39db6..d0ed660 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/matchers/UrlEncodedFormMatcher.java
@@ -18,6 +18,7 @@ import org.apache.juneau.rest.*;
  * Predefined matcher for matching requests with content type 
<js>"application/x-www-form-urlencoded"</js>.
  */
 public class UrlEncodedFormMatcher extends RestMatcher {
+
        @Override /* RestMatcher */
        public boolean matches(RestRequest req) {
                String contentType = req.getContentType();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/remoteable/RemoteableServlet.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/remoteable/RemoteableServlet.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/remoteable/RemoteableServlet.java
index df1a7e3..6ba3997 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/remoteable/RemoteableServlet.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/remoteable/RemoteableServlet.java
@@ -36,7 +36,7 @@ import org.apache.juneau.rest.annotation.*;
 @SuppressWarnings("serial")
 public abstract class RemoteableServlet extends RestServletDefault {
 
-       private Map<String,Class<?>> classNameMap = new 
ConcurrentHashMap<String,Class<?>>();
+       private final Map<String,Class<?>> classNameMap = new 
ConcurrentHashMap<String,Class<?>>();
 
        
//--------------------------------------------------------------------------------
        // Abstract methods

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
index 724584e..041665b 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/response/StreamableHandler.java
@@ -33,9 +33,9 @@ public final class StreamableHandler implements 
ResponseHandler {
                if (output instanceof Streamable) {
                        if (output instanceof StreamResource) {
                                StreamResource r = (StreamResource)output;
-                               String mediaType = r.getMediaType();
+                               MediaType mediaType = r.getMediaType();
                                if (mediaType != null)
-                                       res.setContentType(mediaType);
+                                       
res.setContentType(mediaType.toString());
                                for (Map.Entry<String,String> h : 
r.getHeaders().entrySet())
                                        res.setHeader(h.getKey(), h.getValue());
                        }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
index 10161cd..341c3cf 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
@@ -35,11 +35,14 @@ import org.apache.juneau.svl.*;
  */
 public class LocalizationVar extends MultipartVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "L";
+
        /**
         * Constructor.
         */
        public LocalizationVar() {
-               super("L");
+               super(NAME);
        }
 
        @Override /* Parameter */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
index 5d3c31d..455a375 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
@@ -51,11 +51,14 @@ public class RequestVar extends SimpleVar {
         */
        public static final String SESSION_req = "req";
 
+       /** The name of this variable. */
+       public static final String NAME = "R";
+
        /**
         * Constructor.
         */
        public RequestVar() {
-               super("R");
+               super(NAME);
        }
 
        @Override /* Parameter */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
index d4c24fa..a7af629 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
@@ -34,11 +34,14 @@ import org.apache.juneau.svl.*;
  */
 public class SerializedRequestAttrVar extends StreamedVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "SA";
+
        /**
         * Constructor.
         */
        public SerializedRequestAttrVar() {
-               super("SA");
+               super(NAME);
        }
 
        @Override /* Parameter */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
index f24cd98..7f534ce 100644
--- 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
+++ 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
@@ -32,11 +32,14 @@ import org.apache.juneau.svl.*;
  */
 public class ServletInitParamVar extends DefaultingVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "I";
+
        /**
         * Constructor.
         */
        public ServletInitParamVar() {
-               super("I");
+               super(NAME);
        }
 
        @Override /* Parameter */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/d59d737c/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
index d3e85e2..cc7f4c8 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
@@ -29,11 +29,14 @@ import org.apache.juneau.svl.*;
  */
 public class UrlEncodeVar extends SimpleVar {
 
+       /** The name of this variable. */
+       public static final String NAME = "UE";
+
        /**
         * Constructor.
         */
        public UrlEncodeVar() {
-               super("UE");
+               super(NAME);
        }
 
        @Override /* Parameter */


Reply via email to