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 e92db67  Javadoc updates.
e92db67 is described below

commit e92db67039ad2c283643c971f5cf10f18fe9639f
Author: JamesBognar <jamesbog...@apache.org>
AuthorDate: Wed Feb 7 21:05:41 2018 -0500

    Javadoc updates.
---
 .../java/org/apache/juneau/ini/ConfigFileImpl.java |   1 +
 .../org/apache/juneau/ini/ConfigFileWrapped.java   |   1 +
 .../juneau/ini/{ => vars}/ConfigFileVar.java       |   9 +-
 .../org/apache/juneau/ini/vars/package-info.java}  |  62 +--
 .../java/org/apache/juneau/svl/DefaultingVar.java  |  10 +-
 .../main/java/org/apache/juneau/svl/MapVar.java    |   5 +-
 .../apache/juneau/svl/MultipartResolvingVar.java   |  10 +-
 .../java/org/apache/juneau/svl/MultipartVar.java   |  11 +-
 .../org/apache/juneau/svl/ResolvingObjectMap.java  |   5 +
 .../main/java/org/apache/juneau/svl/SimpleVar.java |  12 +-
 .../java/org/apache/juneau/svl/StreamedVar.java    |  14 +-
 .../src/main/java/org/apache/juneau/svl/Var.java   |  19 +-
 .../java/org/apache/juneau/svl/VarResolver.java    |  79 +--
 .../org/apache/juneau/svl/VarResolverBuilder.java  |   9 +-
 .../org/apache/juneau/svl/VarResolverContext.java  |   5 +-
 .../org/apache/juneau/svl/VarResolverSession.java  |   9 +-
 .../juneau/svl/{MapVar.java => package-info.java}  |  34 +-
 .../main/java/org/apache/juneau/svl/package.html   | 302 ------------
 .../juneau/svl/vars/CoalesceAndRecurseVar.java     |   7 +-
 .../org/apache/juneau/svl/vars/CoalesceVar.java    |   7 +-
 .../apache/juneau/svl/vars/EnvVariablesVar.java    |   9 +-
 .../java/org/apache/juneau/svl/vars/IfVar.java     |  11 +-
 .../java/org/apache/juneau/svl/vars/SwitchVar.java |   9 +-
 .../juneau/svl/vars/SystemPropertiesVar.java       |   9 +-
 juneau-doc/src/main/javadoc/overview.html          | 529 +++++++++++++++++----
 .../apache/juneau/microservice/Microservice.java   |   2 +
 .../org/apache/juneau/microservice/Resource.java   |   2 +-
 .../apache/juneau/microservice/ResourceGroup.java  |   2 +-
 .../juneau/microservice/ResourceJenaGroup.java     |   2 +-
 .../apache/juneau/microservice}/vars/ArgsVar.java  |   2 +-
 .../juneau/microservice}/vars/ManifestFileVar.java |   2 +-
 .../juneau/microservice/vars/package-info.java     |  62 +--
 .../org/apache/juneau/rest/RestContextBuilder.java |   1 +
 .../juneau/rest/annotation/ResourceSwagger.java    |   2 +-
 .../java/org/apache/juneau/rest/vars/FileVar.java  |   2 +-
 35 files changed, 638 insertions(+), 619 deletions(-)

diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java
index a504261..820abb8 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java
@@ -23,6 +23,7 @@ import java.util.*;
 import java.util.concurrent.locks.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.ini.vars.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java
index a1db452..11dd437 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java
@@ -19,6 +19,7 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.ini.vars.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.svl.*;
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileVar.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/ConfigFileVar.java
similarity index 91%
rename from 
juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileVar.java
rename to 
juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/ConfigFileVar.java
index 70406cc..75f25df 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileVar.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/ConfigFileVar.java
@@ -10,8 +10,9 @@
 // * "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.ini;
+package org.apache.juneau.ini.vars;
 
+import org.apache.juneau.ini.*;
 import org.apache.juneau.svl.*;
 
 /**
@@ -42,8 +43,10 @@ import org.apache.juneau.svl.*;
  * Since this is a {@link SimpleVar}, any variables contained in the result 
will be recursively resolved.
  * Likewise, if the arguments contain any variables, those will be resolved 
before they are passed to this var.
  * 
- * @see org.apache.juneau.ini.ConfigFile
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.VarResolvers">Overview 
&gt; juneau-svl &gt; VarResolvers and VarResolverSessions</a>
+ * </ul>
  */
 public class ConfigFileVar extends DefaultingVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/package-info.java
old mode 100644
new mode 100755
similarity index 65%
copy from 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
copy to 
juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/package-info.java
index 4dd0471..97742b2
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/package-info.java
@@ -1,44 +1,18 @@
-// 
***************************************************************************************************************************
-// * 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.svl.vars;
-
-import org.apache.juneau.svl.*;
-
-/**
- * A basic variable resolver that returns the first non-null value.
- * 
- * <p>
- * The format for this var is <js>"$CR{arg1[,arg2...]}"</js>.
- * 
- * <p>
- * The difference between {@link CoalesceVar} and {@link 
CoalesceAndRecurseVar} is that the first will not resolve
- * inner variables nor recursively resolve variables, and the second will.
- * Use {@link CoalesceVar} when resolving user-input.
- */
-public class CoalesceAndRecurseVar extends MultipartResolvingVar {
-
-       /** The name of this variable. */
-       public static final String NAME = "CR";
-
-       /**
-        * Constructor.
-        */
-       public CoalesceAndRecurseVar() {
-               super(NAME);
-       }
-
-       @Override
-       public String resolve(VarResolverSession session, String arg) throws 
Exception {
-               return arg;
-       }
-}
+// 
***************************************************************************************************************************
+// * 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.                                              *
+// 
***************************************************************************************************************************
+
+/**
+ * Predefined SVL Variables
+ */
+package org.apache.juneau.ini.vars;
+
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java
index 3b3d2a6..1a0a1ef 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java
@@ -22,9 +22,15 @@ import static org.apache.juneau.internal.StringUtils.*;
  * property doesn't exist: <js>"$S{myProperty,not found}"</js>
  * 
  * <p>
- * Subclasses must implement the {@link #resolve(VarResolverSession, String)} 
method.
+ * Subclasses must implement the following method:
+ * <ul>
+ *     <li class='jm'>{@link #resolve(VarResolverSession, String)} 
+ * </ul>
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public abstract class DefaultingVar extends SimpleVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java
index 41e5bc7..f8ee406 100644
--- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java
+++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java
@@ -21,7 +21,10 @@ import org.apache.juneau.internal.*;
 /**
  * A subclass of {@link DefaultingVar} that simply pulls values from a {@link 
Map}.
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 @SuppressWarnings("rawtypes")
 public abstract class MapVar extends DefaultingVar {
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
index 9ba8acf..15e1da4 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java
@@ -22,9 +22,15 @@ import static org.apache.juneau.internal.StringUtils.*;
  * property doesn't exist: <js>"$S{myProperty1,myProperty2}"</js>
  * 
  * <p>
- * Subclasses must implement the {@link #resolve(VarResolverSession, String)} 
method.
+ * Subclasses must implement the following method:
+ * <ul>
+ *     <li class='jm'>{@link #resolve(VarResolverSession, String)}
+ * </ul>
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public abstract class MultipartResolvingVar extends SimpleVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java
index 7fe18c0..17e2fd6 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java
@@ -17,10 +17,15 @@ import static org.apache.juneau.internal.StringUtils.*;
 /**
  * Interface for the resolution of vars that consist of a comma-delimited list.
  * 
- * <p>
- * (e.g. <js>"$X{foo, bar, baz}"</js>)
+ * <h5 class='figure'>Example:</h5>
+ * <p class='bcode'>
+ *     <js>"$X{foo, bar, baz}"</js>
+ * </p>
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public abstract class MultipartVar extends SimpleVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java
index 75d2506..cfaf6c3 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java
@@ -28,6 +28,11 @@ import org.apache.juneau.*;
  * 
  * <p>
  * All other data types are left as-is.
+ * 
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 @SuppressWarnings({"serial"})
 public class ResolvingObjectMap extends ObjectMap {
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java
index fcf2ff0..284caee 100644
--- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java
+++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java
@@ -19,13 +19,19 @@ import java.io.*;
  * 
  * <p>
  * Note the difference between this class and {@link StreamedVar} that streams 
values to writers.
- * Unlike the {@link StreamedVar} class, the returned value from this class 
can contain nested variables that will be
+ * <br>Unlike the {@link StreamedVar} class, the returned value from this 
class can contain nested variables that will be
  * recursively resolved by {@link VarResolver}.
  * 
  * <p>
- * Subclasses must implement the {@link #resolve(VarResolverSession, String)} 
method.
+ * Subclasses must implement the following method:
+ * <ul>
+ *     <li class='jm'>{@link #resolve(VarResolverSession, String)}
+ * </ul>
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public abstract class SimpleVar extends Var {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java
index 4819cf8..665be5e 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java
@@ -17,14 +17,20 @@ package org.apache.juneau.svl;
  * 
  * <p>
  * Note the difference between this class and {@link SimpleVar} that returns 
simple string values.
- * Unlike the {@link SimpleVar} class, the output from this class cannot 
contain nested variables.
- * However, this class can be more efficient for variables that produce large 
amounts of output so that the creation
+ * <br>Unlike the {@link SimpleVar} class, the output from this class cannot 
contain nested variables.
+ * <br>However, this class can be more efficient for variables that produce 
large amounts of output so that the creation
  * of large in-memory strings is avoided.
  * 
  * <p>
- * Subclasses must implement the {@link #resolveTo(VarResolverSession, 
java.io.Writer, String)} method.
+ * Subclasses must implement the following method:
+ * <ul>
+ *     <li class='jm'>{@link #resolveTo(VarResolverSession, java.io.Writer, 
String)}
+ * </ul>
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public abstract class StreamedVar extends Var {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java
index 5d76c85..3bb7a72 100644
--- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java
+++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java
@@ -26,23 +26,26 @@ import java.io.*;
  * <p>
  * Subclasses must implement one of the following two methods:
  * <ul>
- *     <li>{@link #resolve(VarResolverSession,String)} - For simple vars.
- *     <li>{@link #resolveTo(VarResolverSession,Writer,String)} - For streamed 
vars.
+ *     <li class='jm'>{@link #resolve(VarResolverSession,String)} - For simple 
vars.
+ *     <li class='jm'>{@link #resolveTo(VarResolverSession,Writer,String)} - 
For streamed vars.
  * </ul>
  * 
  * <p>
  * Subclasses MUST implement a no-arg constructor so that class names can be 
passed to the
  * {@link VarResolverBuilder#vars(Class...)} method.
- * They must also be thread safe!
+ * <br><b>They must also be thread safe!</b>
  * 
  * <p>
  * Two direct abstract subclasses are provided to differentiated between 
simple and streamed vars:
  * <ul>
- *     <li>{@link SimpleVar}
- *     <li>{@link StreamedVar}
+ *     <li class='jac'>{@link SimpleVar}
+ *     <li class='jac'>{@link StreamedVar}
  * </ul>
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview &gt; 
juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public abstract class Var {
 
@@ -111,7 +114,7 @@ public abstract class Var {
         * 
         * <p>
         * The default implementation of this method always returns 
<jk>true</jk>.  
-        * Subclasses can override this method to override the default behavior.
+        * <br>Subclasses can override this method to override the default 
behavior.
         * 
         * <h5 class='topic'>Important Note</h5>
         * <p>
@@ -129,7 +132,7 @@ public abstract class Var {
         * 
         * <p>
         * Can be overridden to intercept the request and do special handling.
-        * Default implementation simply calls resolve(String).
+        * <br>Default implementation simply calls resolve(String).
         * 
         * @param session The session object used for a single instance of a 
string resolution.
         * @param arg The inside argument of the variable.
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java
index 1a9976a..dfabaa6 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.svl;
 
-
 import java.io.*;
 import java.util.*;
 
@@ -47,56 +46,16 @@ import org.apache.juneau.svl.vars.*;
  *     }
  * 
  *     <jc>// Create a variable resolver that resolves system properties (e.g. 
"$S{java.home}")</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(SystemPropertiesVar.<js>class</js>);
+ *     VarResolver r = 
VarResolver.<jsm>create</jsm>().vars(SystemPropertiesVar.<jk>class</jk>).build();
  * 
  *     <jc>// Use it!</jc>
  *     System.<jsf>out</jsf>.println(r.resolve(<js>"java.home is set to 
$S{java.home}"</js>));
  * </p>
  * 
- * <h5 class='topic'>Context objects</h5>
- * 
- * Var resolvers can have zero or more context objects associated with them.
- * 
- * <p>
- * Context objects are arbitrary objects associated with this var resolver, 
such as a <code>ConfigFile</code> object.
- * They can be any class type.
- * 
- * <p>
- * Context objects can be retrieved by {@link Var} classes through the
- * {@link VarResolverSession#getSessionObject(Class, String)} method.
- * 
- * <h5 class='topic'>Session objects</h5>
- * 
- * Session objects are considered more ephemeral than context objects.
- * While a context object is unlikely to ever change, a session object may 
change on every use of the var resolver.
- * For example, the server API defines various <code>Var</code> objects that 
use the <code>RestRequest</code>
- * object as a session object for the duration of a single HTTP request.
- * 
- * <p>
- * Session objects are used by calling the {@link #createSession()} or {@link 
#createSession(Map)} methods to create
- * an instance of a {@link VarResolverSession} object that contains {@link 
VarResolverSession#resolve(String)}
- * and {@link VarResolverSession#resolveTo(String,Writer)} methods that are 
identical to
- * {@link VarResolver#resolve(String)} and {@link 
VarResolver#resolveTo(String, Writer)} except that the
- * <code>Var</code> objects have access to the session objects through the
- * {@link VarResolverSession#getSessionObject(Class, String)} method.
- * 
- * <p>
- * Session objects are specified through either the {@link 
#createSession(Map)} method or the
- * {@link VarResolverSession#sessionObject(String, Object)} methods.
- * 
- * <h5 class='topic'>Cloning</h5>
- * 
- * Var resolvers can be cloned by using the {@link #builder()} method.
- * Cloning a resolver will copy it's {@link Var} class names and context 
objects.
- * 
- * <h5 class='section'>Example:</h5>
- * <p class='bcode'>
- *     <jc>// Create a resolver that copies the default resolver and adds $C 
and $ARG vars.</jc>
- *     VarResolver myVarResolver = 
VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigVar.<jk>class</jk>,
- *             ArgsVar.<jk>class</jk>).build();
- * </p>
- * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview &gt; 
juneau-svl &gt; VarResolvers and VarResolverSessions</a>
+ * </ul>
  */
 public class VarResolver {
 
@@ -104,10 +63,12 @@ public class VarResolver {
         * Default string variable resolver with support for system properties 
and environment variables:
         * 
         * <ul>
-        *      <li><code>$S{key}</code>,<code>$S{key,default}</code> - System 
properties.
-        *      <li><code>$E{key}</code>,<code>$E{key,default}</code> - 
Environment variables.
-        *      <li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - 
If-else patterns.
-        *      
<li><code>$SW{test,matchPattern,thenValue[,matchPattern,thenValue][,elseValue]}</code>
 - Switch patterns.
+        *      <li><code>$S{key}</code>,<code>$S{key,default}</code> - {@link 
SystemPropertiesVar}
+        *      <li><code>$E{key}</code>,<code>$E{key,default}</code> - {@link 
EnvVariablesVar}
+        *      <li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - 
{@link IfVar}
+        *      
<li><code>$SW{test,matchPattern,thenValue[,matchPattern,thenValue][,elseValue]}</code>
 - {@link SwitchVar}
+        *      <li><code>$CO{arg1[,arg2...]}</code> - {@link CoalesceVar}
+        *      <li><code>$CR{arg1[,arg2...]}</code> - {@link 
CoalesceAndRecurseVar}
         * </ul>
         * 
         * @see SystemPropertiesVar
@@ -118,12 +79,24 @@ public class VarResolver {
        final VarResolverContext ctx;
 
        /**
+        * Instantiates a new clean-slate {@link VarResolverBuilder} object.
+        * 
+        * <p>
+        * This is equivalent to simply calling <code><jk>new</jk> 
VarResolverBuilder()</code>.
+        * 
+        * @return A new {@link VarResolverBuilder} object.
+        */
+       public static VarResolverBuilder create() {
+               return new VarResolverBuilder();
+       }
+
+       /**
         * Constructor.
         * 
         * @param vars The var classes
         * @param contextObjects
         */
-       public VarResolver(Class<? extends Var>[] vars, Map<String,Object> 
contextObjects) {
+       VarResolver(Class<? extends Var>[] vars, Map<String,Object> 
contextObjects) {
                this.ctx = new VarResolverContext(vars, contextObjects);
        }
 
@@ -175,7 +148,7 @@ public class VarResolver {
         * 
         * <p>
         * This is a shortcut for calling 
<code>createSession(<jk>null</jk>).resolve(s);</code>.
-        * This method can only be used if the string doesn't contain variables 
that rely on the existence of session
+        * <br>This method can only be used if the string doesn't contain 
variables that rely on the existence of session
         * variables.
         * 
         * @param s The input string.
@@ -190,7 +163,7 @@ public class VarResolver {
         * 
         * <p>
         * This is a shortcut for calling 
<code>createSession(<jk>null</jk>).resolveTo(s, w);</code>.
-        * This method can only be used if the string doesn't contain variables 
that rely on the existence of session
+        * <br>This method can only be used if the string doesn't contain 
variables that rely on the existence of session
         * variables.
         * 
         * @param s The input string.
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
index 58d02b1..3f2ccf5 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
@@ -20,6 +20,11 @@ import org.apache.juneau.svl.vars.*;
 
 /**
  * Builder class for building instances of {@link VarResolver}.
+ * 
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview &gt; 
juneau-svl &gt; VarResolvers and VarResolverSessions</a>
+ * </ul>
  */
 public class VarResolverBuilder {
 
@@ -62,12 +67,14 @@ public class VarResolverBuilder {
         *      <li>{@link EnvVariablesVar}
         *      <li>{@link SwitchVar}
         *      <li>{@link IfVar}
+        *      <li>{@link CoalesceVar}
+        *      <li>{@link CoalesceAndRecurseVar}
         * </ul>
         * 
         * @return This object (for method chaining).
         */
        public VarResolverBuilder defaultVars() {
-               return vars(SystemPropertiesVar.class, EnvVariablesVar.class, 
SwitchVar.class, IfVar.class);
+               return vars(SystemPropertiesVar.class, EnvVariablesVar.class, 
SwitchVar.class, IfVar.class, CoalesceAndRecurseVar.class, CoalesceVar.class);
        }
 
        /**
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java
index 5283de8..be59001 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java
@@ -23,7 +23,10 @@ import java.util.concurrent.*;
  * <p>
  * Used to associate {@link Var Vars} and context objects with {@link 
VarResolver VarResolvers}.
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview &gt; 
juneau-svl &gt; VarResolvers and VarResolverSessions</a>
+ * </ul>
  */
 public class VarResolverContext {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java
index 4009b56..dd2cbbd 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java
@@ -36,7 +36,10 @@ import org.apache.juneau.*;
  * <p>
  * Instances of this class are NOT guaranteed to be thread safe.
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview &gt; 
juneau-svl &gt; VarResolvers and VarResolverSessions</a>
+ * </ul>
  */
 public class VarResolverSession {
 
@@ -370,7 +373,9 @@ public class VarResolverSession {
         * 
         * @param c The class type to cast to.
         * @param name The name of the session object.
-        * @return The session object.  Never <jk>null</jk>.
+        * @return 
+        *      The session object.  
+        *      <br>Never <jk>null</jk>.
         * @throws RuntimeException If session object with specified name does 
not exist.
         */
        @SuppressWarnings("unchecked")
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package-info.java
old mode 100644
new mode 100755
similarity index 66%
copy from juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java
copy to 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package-info.java
index 41e5bc7..4b8eabf
--- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package-info.java
@@ -10,39 +10,9 @@
 // * "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.svl;
-
-import static org.apache.juneau.internal.ThrowableUtils.*;
-
-import java.util.*;
-
-import org.apache.juneau.internal.*;
 
 /**
- * A subclass of {@link DefaultingVar} that simply pulls values from a {@link 
Map}.
- * 
- * @see org.apache.juneau.svl
+ * Simple Variable Language
  */
-@SuppressWarnings("rawtypes")
-public abstract class MapVar extends DefaultingVar {
-
-       private final Map m;
-
-       /**
-        * Constructor.
-        * 
-        * @param name The name of this variable.
-        * @param m The map to pull values from.
-        */
-       public MapVar(String name, Map m) {
-               super(name);
-               if (m == null)
-                       illegalArg("''m'' parameter cannot be null.");
-               this.m = m;
-       }
+package org.apache.juneau.svl;
 
-       @Override /* Var */
-       public String resolve(VarResolverSession session, String varVal) {
-               return StringUtils.toString(m.get(varVal));
-       }
-}
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package.html 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package.html
deleted file mode 100644
index c9189db..0000000
--- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package.html
+++ /dev/null
@@ -1,302 +0,0 @@
-<!DOCTYPE HTML>
-<!--
-/***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *  
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
- * specific language governing permissions and limitations under the License.
- *
- 
***************************************************************************************************************************/
- -->
-<html>
-<head>
-       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-       <style type="text/css">
-               /* For viewing in Page Designer */
-               @IMPORT url("../../../../../../javadoc.css");
-
-               /* For viewing in REST interface */
-               @IMPORT url("../htdocs/javadoc.css");
-               body { 
-                       margin: 20px; 
-               }       
-       </style>
-       <script>
-               /* Replace all @code and @link tags. */ 
-               window.onload = function() {
-                       document.body.innerHTML = 
document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>');
-                       document.body.innerHTML = 
document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, 
'<code>$3</code>');
-               }
-       </script>
-</head>
-<body>
-<p>Simple Variable Language</p>
-
-<script>
-       function toggle(x) {
-               var div = x.nextSibling;
-               while (div != null && div.nodeType != 1)
-                       div = div.nextSibling;
-               if (div != null) {
-                       var d = div.style.display;
-                       if (d == 'block' || d == '') {
-                               div.style.display = 'none';
-                               x.className += " closed";
-                       } else {
-                               div.style.display = 'block';
-                               x.className = 
x.className.replace(/(?:^|\s)closed(?!\S)/g , '' );
-                       }
-               }
-       }
-</script>
-<a id='TOC'></a><h5 class='toc'>Table of Contents</h5>
-<ol class='toc'>
-       <li><p><a class='doclink' href='#SimpleVarLanguage'>Simple Variable 
Language</a></p>
-               <ol>
-                       <li><p><a class='doclink' href='#Vars'>Vars</a></p>
-                       <li><p><a class='doclink' 
href='#VarResolvers'>VarResolvers and VarResolverSessions</a></p>
-                       <li><p><a class='doclink' href='#OtherNotes'>Other 
Notes</a></p>
-               </ol>
-       </li>
-</ol>
-
-<!-- 
========================================================================================================
 -->
-<a id="SimpleVarLanguage"></a>
-<h2 class='topic' onclick='toggle(this)'>1 - Simple Variable Language</h2>
-<div class='topic'>
-       <p>
-               The <code>org.apache.juneau.svl</code> package defines an API 
for a language called "Simple Variable Language".
-               In a nutshell, Simple Variable Language (or SVL) is text that 
contains variables of the form <js>"$varName{varKey}"</js>.
-       </p>
-       <p>
-               Variables can be recursively nested within the varKey (e.g. 
<js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>).
-               Variables can also return values that themselves contain more 
variables.
-       </p>
-       <p>
-               The {@link org.apache.juneau.svl.VarResolver} class is used to 
resolve variables.
-               The {@link org.apache.juneau.svl.VarResolver#DEFAULT} resolver 
will resolve <js>"$S{systemProperty}"</js> 
-               and <js>"$E{envVariable}"</js> variables.
-       </p>
-       <p class='bcode'>
-       <jc>// Use the default variable resolver to resolve a string that 
contains $S (system property) variables</jc>
-       String myProperty = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The 
Java home directory is $S{java.home}"</js>);
-       </p>
-       <p>
-               The following shows how variables can be arbitrarily nested...
-       </p>
-       <p class='bcode'>
-       <jc>// Look up a property in the following order:
-       // 1) MYPROPERTY environment variable.
-       // 2) 'my.property' system property if environment variable not found.
-       // 3) 'not found' string if system property not found.</jc>
-       String myproperty = 
VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not 
found}}"</js>);
-       </p>
-
-       <!-- 
========================================================================================================
 -->
-       <a id="Vars"></a>
-       <h3 class='topic' onclick='toggle(this)'>1.1 - Vars</h3>
-       <div class='topic'>
-               <p>
-                       Variables are defined through the {@link 
org.apache.juneau.svl.Var} API.
-               </p>
-               <p class='bcode'>
-       <jc>// Create a var resolver that extends the default resolver and 
appends our own "$URLEncode{...}" variable</jc>
-       
-       <jc>// First create our var.</jc>
-       <jk>public class</jk> UrlEncodeVar <jk>extends</jk> SimpleVar {
-               
-               <jc>// Must have a no-arg constructor!</jc>
-               <jk>public</jk> UrlEncodeVar() {
-                       <jk>super</jk>(<js>"URLEncode"</js>);
-               }       
-               
-               <jc>// The method we must implement</jc>
-               <ja>@Override</ja>
-               <jk>public</jk> String resolve(VarResolverSession session, 
String varVal) {
-                       <jk>return</jk> URLEncoder.<jsm>encode</jsm>(varVal, 
<js>"UTF-8"</js>);
-               }
-       }
-       
-       <jc>// Next create a var resolver that extends the existing DEFAULT 
resolver
-       // that supports resolving system properties.</jc>
-       VarResolver r = 
VarResolver.<jsf>DEFAULT</jsf>.builder().vars(UrlEncodeVar.<jk>class</jk>).build();
-       
-       <jc>// Retrieve a system property and URL-encode it if necessary.</jc>
-       String myProperty = r.resolve(<js>"$URLEncode{$S{my.property}}"</js>);
-               </p>
-               <p>
-                       The following shows the class hierarchy of the {@link 
org.apache.juneau.svl.Var} class and all current
-                       predefined implementations.
-               </p>  
-               <ul class='doctree'>
-                       <li class='jac'>
-                               {@link org.apache.juneau.svl.Var} 
-                               - Superclass of all vars.
-                               <ul>
-                                       <li class='jac'>
-                                               {@link 
org.apache.juneau.svl.SimpleVar} 
-                                               - Superclass of all vars that 
return strings.
-                                               <ul>
-                                                       <li class='jac'>
-                                                               {@link 
org.apache.juneau.svl.DefaultingVar} 
-                                                               - Variables 
that define a default value if the resolve method returns null.
-                                                               <ul>
-                                                                       <li 
class='jac'>
-                                                                               
{@link org.apache.juneau.svl.MapVar} 
-                                                                               
- Variables that pull values from maps.
-                                                                               
<ul>
-                                                                               
        <li class='jc'>
-                                                                               
                {@link org.apache.juneau.svl.vars.SystemPropertiesVar} 
-                                                                               
                - Resolves system properties.
-                                                                               
</ul>
-                                                                       </li>
-                                                                       <li 
class='jc'>
-                                                                               
{@link org.apache.juneau.svl.vars.ArgsVar} 
-                                                                               
- Resolves variables from an {@link org.apache.juneau.utils.Args} object.
-                                                                       <li 
class='jc'>
-                                                                               
<code>ConfigFileVar</code> 
-                                                                               
- Resolves variables from a {@link org.apache.juneau.ini.ConfigFile} object.
-                                                                       <li 
class='jc'>
-                                                                               
{@link org.apache.juneau.svl.vars.EnvVariablesVar} 
-                                                                               
- Resolves environment variables.
-                                                                       <li 
class='jc'>
-                                                                               
{@link org.apache.juneau.svl.vars.ManifestFileVar} 
-                                                                               
- Resolves variables from a {@link org.apache.juneau.utils.ManifestFile} object.
-                                                                       <li 
class='jc'>
-                                                                               
{@link org.apache.juneau.rest.vars.ServletInitParamVar} 
-                                                                               
- Resolves servlet initialization parameters.
-                                                               </ul>
-                                                       </li>
-                                                       <li class='jac'>
-                                                               {@link 
org.apache.juneau.svl.MultipartVar} 
-                                                               - Variables 
that consist of 2 or more comma-delimited arguments.
-                                                               <ul>
-                                                                       <li 
class='jc'>
-                                                                               
{@link org.apache.juneau.rest.vars.LocalizationVar} 
-                                                                               
- Resolves localized strings for an HTTP request.
-                                                               </ul>
-                                                       </li>
-                                                       <li class='jc'>
-                                                               {@link 
org.apache.juneau.rest.vars.RequestVar} 
-                                                               - Resolves 
specialized HTTP request values.
-                                                       <li class='jc'>
-                                                               {@link 
org.apache.juneau.rest.vars.UrlEncodeVar} 
-                                                               - URL-encodes 
the value inside the variable.
-                                               </ul>
-                                       </li>
-                                       <li class='jac'>
-                                               {@link 
org.apache.juneau.svl.StreamedVar} 
-                                               - Superclass of all vars that 
stream their value to writers.
-                                               <ul>
-                                                       <li class='jc'>
-                                                               {@link 
org.apache.juneau.rest.vars.SerializedRequestAttrVar} 
-                                                               - Resolves HTTP 
request attribute values passed through a 
-                                                               {@link 
org.apache.juneau.serializer.Serializer}.
-                                               </ul>
-                                       </li>
-                               </ul>
-                       </li>
-               </ul>
-       </div>
-       
-       <!-- 
========================================================================================================
 -->
-       <a id="VarResolvers"></a>
-       <h3 class='topic' onclick='toggle(this)'>1.2 - VarResolvers and 
VarResolverSessions</h3>
-       <div class='topic'>
-               <p>
-                       The main class for performing variable resolution is 
{@link org.apache.juneau.svl.VarResolver}.
-                       Two methods are provided for resolving variables:
-               </p>
-               <ul class='doctree'>
-                       <li class='jm'>
-                               {@link 
org.apache.juneau.svl.VarResolver#resolve(String)} 
-                               - Resolves variables and returns the results as 
a simple string.
-                       <li class='jm'>
-                               {@link 
org.apache.juneau.svl.VarResolver#resolveTo(String,Writer)} 
-                               - Resolves variables and sends results to a 
writer.
-               </ul>
-               <p>
-                       Var resolvers can have zero or more context objects 
associated with them.
-                       Some {@link org.apache.juneau.svl.Var Vars} rely on the 
existence of some other object, such as an 
-                       {@link org.apache.juneau.utils.Args} object
-                       for {@link org.apache.juneau.svl.vars.ArgsVar} or a 
{@link org.apache.juneau.ini.ConfigFile} for a 
-                       <code>ConfigFileVar</code>.
-                       These object dependencies are made by setting context 
objects on the var resolver.
-               </p>
-               <p>
-                       Context objects are set through the {@link 
org.apache.juneau.svl.VarResolverBuilder
-                       #contextObject(String,Object)} method.
-                       They can be any class type.
-               </p>
-               <p>
-                       Context objects are used by {@link 
org.apache.juneau.svl.Var Vars} by calling the 
-                       {@link 
org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} 
method.
-               </p>
-               <p>
-                       In addition to context objects, there are also session 
objects.
-                       Session objects are considered more ephemeral than 
context objects.
-                       While a context object is unlikely to ever change, a 
session object may change on every use of the var 
-                       resolver.
-                       For example, the server API defines various 
<code>Var</code> objects that use the <code>RestRequest</code>
-                               object as a session object for the duration of 
a single HTTP request.
-               </p>
-               <p>
-                       Session objects are used by calling the {@link 
org.apache.juneau.svl.VarResolver#createSession()} or 
-                       {@link 
org.apache.juneau.svl.VarResolver#createSession(Map)} methods to create an 
instance of a 
-                       {@link org.apache.juneau.svl.VarResolverSession} object 
that contains 
-                       {@link 
org.apache.juneau.svl.VarResolverSession#resolve(String)} and 
-                       {@link 
org.apache.juneau.svl.VarResolverSession#resolveTo(String,Writer)} methods that 
are identical to 
-                       {@link 
org.apache.juneau.svl.VarResolver#resolve(String)} and 
-                       {@link 
org.apache.juneau.svl.VarResolver#resolveTo(String, Writer)} except that the 
<code>Var</code> objects
-                       have access to the session objects through the 
-                       {@link 
org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} 
method.
-                       Session objects are specified through either the {@link 
org.apache.juneau.svl.VarResolver#createSession(Map)} 
-                       method or the {@link 
org.apache.juneau.svl.VarResolverSession#sessionObject(String, Object)} methods.
-               </p>
-               <p>
-                       Like Context object, Session objects are used by {@link 
org.apache.juneau.svl.Var Vars} by calling the 
-                       {@link 
org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} 
method.
-               </p>
-               <p>
-                       Var resolvers can be cloned and extended by using the 
{@link org.apache.juneau.svl.VarResolver#builder()} 
-                       method.
-                       Cloning a resolver will copy it's {@link 
org.apache.juneau.svl.Var} class names and context objects.
-               </p>
-               
-               <h5 class='topic'>Example:</h5>
-               <p class='bcode'>
-                       <jc>// Create a resolver that copies the default 
resolver and adds $C and $ARG vars.</jc>
-                       VarResolver myVarResolver = 
VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigFileVar.<jk>class</jk>, 
-                               ArgsVar.<jk>class</jk>).build();
-               </p>
-       </div>  
-       
-       <!-- 
========================================================================================================
 -->
-       <a id="OtherNotes"></a>
-       <h3 class='topic' onclick='toggle(this)'>1.3 - Other Notes</h3>
-       <div class='topic'>
-               <ul class='spaced-list'>
-                       <li>
-                               The escape character <js>'\'</js> can be used 
when necessary to escape the following characters: 
-                               <code>$ , { }</code>
-                       <li>
-                               <b>WARNING:</b>  It is possible to cause {@link 
java.lang.StackOverflowError StackOverflowErrors} if 
-                               your nested variables result in a recursive 
loop (e.g. the environment variable 
-                               <code>'MYPROPERTY'</code> has the value 
<code>'$E{MYPROPERTY}'</code>).
-                               So don't do that!
-                       <li>
-                               As a general rule, this class tries to be as 
efficient as possible by not creating new strings when not 
-                               needed.
-                               <br>For example, calling the resolve method on 
a string that doesn't contain variables (e.g. 
-                               
<code>resolver.resolve(<js>"foobar"</js>)</code>) will simply be a no-op and 
return the same string.
-               </ul>
-       </div>  
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
index 4dd0471..98bc245 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
@@ -23,7 +23,12 @@ import org.apache.juneau.svl.*;
  * <p>
  * The difference between {@link CoalesceVar} and {@link 
CoalesceAndRecurseVar} is that the first will not resolve
  * inner variables nor recursively resolve variables, and the second will.
- * Use {@link CoalesceVar} when resolving user-input.
+ * <br>Use {@link CoalesceVar} when resolving user-input.
+ * 
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public class CoalesceAndRecurseVar extends MultipartResolvingVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java
index 6844a3a..4e7af41 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java
@@ -23,7 +23,12 @@ import org.apache.juneau.svl.*;
  * <p>
  * The difference between {@link CoalesceVar} and {@link 
CoalesceAndRecurseVar} is that the first will not resolve
  * inner variables nor recursively resolve variables, and the second will.
- * Use {@link CoalesceVar} when resolving user-input.
+ * <br>Use {@link CoalesceVar} when resolving user-input.
+ * 
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public class CoalesceVar extends MultipartResolvingVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
index f9da2fd..ccf0ab2 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java
@@ -23,7 +23,7 @@ import org.apache.juneau.svl.*;
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create a variable resolver that resolves environment variables 
(e.g. "$E{PATH}")</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(EnvVariablesVar.<js>class</js>);
+ *     VarResolver r = 
VarResolver.<jsm>create</jsm>().vars(EnvVariablesVar.<jk>class</jk>).build();
  * 
  *     <jc>// Use it!</jc>
  *     System.<jsf>out</jsf>.println(r.resolve(<js>"Environment variable PATH 
is set to $E{PATH}"</js>));
@@ -31,9 +31,12 @@ import org.apache.juneau.svl.*;
  * 
  * <p>
  * Since this is a {@link SimpleVar}, any variables contained in the result 
will be recursively resolved.
- * Likewise, if the arguments contain any variables, those will be resolved 
before they are passed to this var.
+ * <br>Likewise, if the arguments contain any variables, those will be 
resolved before they are passed to this var.
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public class EnvVariablesVar extends DefaultingVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java
index e26f306..6c3f857 100644
--- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java
+++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java
@@ -35,7 +35,7 @@ import org.apache.juneau.svl.*;
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create a variable resolver that resolves system properties and 
$IF vars.</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(IfVar.<jk>class</jk>, SystemPropertiesVar.<jk>class</jk>);
+ *     VarResolver r = 
VarResolver.<jsm>create</jsm>().vars(IfVar.<jk>class</jk>, 
SystemPropertiesVar.<jk>class</jk>).build();
  * 
  *     <jc>// Use it!</jc>
  *     System.<jsf>out</jsf>.println(r.resolve(<js>"Property 
$IF{$S{someBooleanFlag},IS,IS NOT} set!"</js>));
@@ -43,10 +43,13 @@ import org.apache.juneau.svl.*;
  * 
  * <p>
  * Since this is a {@link MultipartVar}, any variables contained in the result 
will be recursively resolved.
- * Likewise, if the arguments contain any variables, those will be resolved 
before they are passed to this var.
+ * <br>Likewise, if the arguments contain any variables, those will be 
resolved before they are passed to this var.
  * 
- * @see org.apache.juneau.svl
-*/
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-svl &gt; SVL Variables</a>
+ * </ul>
+ */
 public class IfVar extends MultipartVar {
 
        /** The name of this variable. */
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
index e51740c..2cdbbed 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java
@@ -38,7 +38,7 @@ import org.apache.juneau.svl.*;
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create a variable resolver that resolves system properties and 
$SW vars.</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(SwitchVar.<jk>class</jk>, 
SystemPropertiesVar.<jk>class</jk>);
+ *     VarResolver r = 
VarResolver.<jsm>create</jsm>().vars(SwitchVar.<jk>class</jk>, 
SystemPropertiesVar.<jk>class</jk>).build();
  * 
  *     <jc>// Use it!</jc>
  *     System.<jsf>out</jsf>.println(r.resolve(<js>"We are running on 
$SW{$P{os.name},*win*,Windows,Something else}!"</js>));
@@ -46,7 +46,12 @@ import org.apache.juneau.svl.*;
  * 
  * <p>
  * Since this is a {@link MultipartVar}, any variables contained in the result 
will be recursively resolved.
- * Likewise, if the arguments contain any variables, those will be resolved 
before they are passed to this var.
+ * <br>Likewise, if the arguments contain any variables, those will be 
resolved before they are passed to this var.
+ * 
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public class SwitchVar extends MultipartVar {
 
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
index 2218df7..65aecb0 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
+++ 
b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java
@@ -23,7 +23,7 @@ import org.apache.juneau.svl.*;
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create a variable resolver that resolves system properties (e.g. 
"$S{java.home}")</jc>
- *     VarResolver r = <jk>new</jk> 
VarResolver().addVars(SystemPropertiesVar.<js>class</js>);
+ *     VarResolver r = 
VarResolver.<jsm>create</jsm>().vars(SystemPropertiesVar.<jk>class</jk>).build();
  * 
  *     <jc>// Use it!</jc>
  *     System.<jsf>out</jsf>.println(r.resolve(<js>"java.home is set to 
$S{java.home}"</js>));
@@ -31,9 +31,12 @@ import org.apache.juneau.svl.*;
  * 
  * <p>
  * Since this is a {@link SimpleVar}, any variables contained in the result 
will be recursively resolved.
- * Likewise, if the arguments contain any variables, those will be resolved 
before they are passed to this var.
+ * <br>Likewise, if the arguments contain any variables, those will be 
resolved before they are passed to this var.
  * 
- * @see org.apache.juneau.svl
+ * <h5 class='section'>See Also:</h5>
+ * <ul>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-svl &gt; SVL Variables</a>
+ * </ul>
  */
 public class SystemPropertiesVar extends MapVar {
 
diff --git a/juneau-doc/src/main/javadoc/overview.html 
b/juneau-doc/src/main/javadoc/overview.html
index 46579a3..18209e6 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -136,6 +136,12 @@
                <li><p><a class='doclink' 
href='#juneau-dto.Swagger'>Swagger</a></p>
        </ol>
        <li><p><a class='doclink' href='#juneau-svl'><i>juneau-svl</i></a></p>
+       <ol>
+               <li><p><a class='doclink' 
href='#juneau-svl.SimpleVarLanguage'>Simple Variable Language</a></p>
+               <li><p><a class='doclink' href='#juneau-svl.SvlVariables'>SVL 
Variables</a></p>
+               <li><p><a class='doclink' 
href='#juneau-svl.VarResolvers'>VarResolvers and VarResolverSessions</a></p>
+               <li><p><a class='doclink' href='#juneau-svl.OtherNotes'>Other 
Notes</a></p>
+       </ol>
        <li><p><a class='doclink' 
href='#juneau-config'><i>juneau-config</i></a></p>
        <li><p><a class='doclink' 
href='#juneau-rest-server'><i>juneau-rest-server</i></a></p>
        <ol>
@@ -4321,44 +4327,291 @@
        org.apache.juneau.svl_7.0.0.jar 
        </p>    
 
-       <p>
-               The <code>juneau-svl</code> library defines an API for a 
language called "Simple Variable Language".
-               In a nutshell, Simple Variable Language (or SVL) is text that 
contains variables of the form
-               <js>"$varName{varKey}"</js>.
-       </p>
-       <p>
-               Variables can be recursively nested within the varKey (e.g. 
<js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>).
-               Variables can also return values that themselves contain more 
variables.
-       </p>
-       <p class='bcode'>
+       <!-- 
========================================================================================================
 -->
+       <a id="juneau-svl.SimpleVarLanguage"></a>
+       <h3 class='topic' onclick='toggle(this)'>5.1 - Simple Variable 
Language</h3>
+       <div class='topic'>
+               <p>
+                       The <l>juneau-svl</l> module defines an API for a 
language called <l>Simple Variable Language</l>.
+                       <br>In a nutshell, Simple Variable Language (or SVL) is 
text that contains variables of the form <js>"$varName{varKey}"</js>.
+                       <br>It is used extensively in the ConfigFile, REST and 
Microservice APIs.
+               </p>
+               <p>
+                       Most variables can be recursively nested within the 
varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>)
+                       and can return values that themselves contain more 
variables.
+               </p>
+               <p>
+                       The {@link org.apache.juneau.svl.VarResolver} class is 
used to resolve variables.
+                       <br>The {@link 
org.apache.juneau.svl.VarResolver#DEFAULT} resolver is a reusable instance of 
this class 
+                       configured with the following basic variables:
+               </p>
+               <ul>
+                       <li><code>$S{key}</code>,<code>$S{key,default}</code> - 
System properties.
+                       <li><code>$E{key}</code>,<code>$E{key,default}</code> - 
Environment variables.
+                       
<li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - If-else patterns.
+                       
<li><code>$SW{test,matchPattern,thenValue[,matchPattern,thenValue][,elseValue]}</code>
 - Switch patterns.
+                       <li><code>$CO{arg1[,arg2...]}</code> - Coalesce 
variable.
+                       <li><code>$CR{arg1[,arg2...]}</code> - 
Coalesce-and-recurse variable.
+               </ul>
+               <h5 class='figure'>Example:</h5>
+               <p class='bcode'>
        <jc>// Use the default variable resolver to resolve a string that 
contains $S (system property) variables</jc>
        String myProperty = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The 
Java home directory is $S{java.home}"</js>);
-       </p>
-       <p>
-               The following shows how variables can be arbitrarily nested...
-       </p>
-       <p class='bcode'>
+               </p>
+               <p>
+                       The following shows how variables can be arbitrarily 
nested...
+               </p>
+               <p class='bcode'>
        <jc>// Look up a property in the following order:
        // 1) MYPROPERTY environment variable.
        // 2) 'my.property' system property if environment variable not found.
        // 3) 'not found' string if system property not found.</jc>
        String myproperty = 
VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not 
found}}"</js>);
-       </p>
-       <p>
-               SVL is a large topic on it's own. 
-               It is used extensively in the ConfigFile, REST and Microservice 
APIs.
-       </p>
+               </p>
+        </div>
        
-       <h5 class='toc'>Additional Information - org.apache.juneau.svl</h5>
-       <ol class='toc'>
-               <li><p><a class='doclink' 
href='org/apache/juneau/svl/package-summary.html#SimpleVarLanguage'>Simple 
Variable Language</a></p>
-                       <ol>
-                               <li><p><a class='doclink' 
href='org/apache/juneau/svl/package-summary.html#Vars'>Vars</a></p>
-                               <li><p><a class='doclink' 
href='org/apache/juneau/svl/package-summary.html#VarResolvers'>VarResolvers and 
VarResolverSessions</a></p>
-                               <li><p><a class='doclink' 
href='org/apache/juneau/svl/package-summary.html#OtherNotes'>Other Notes</a></p>
-                       </ol>
-               </li>
-       </ol>
+       <!-- 
========================================================================================================
 -->
+       <a id="juneau-svl.SvlVariables"></a>
+       <h3 class='topic' onclick='toggle(this)'>5.2 - SVL Variables</h3>
+       <div class='topic'>
+               <p>
+                       Variables are defined through the {@link 
org.apache.juneau.svl.Var} API.
+                       <br>The API comes with several predefined variables and 
is easily extensible.
+               </p>
+               <p>
+                       The following is an example of a variable that performs 
URL-Encoding on strings.
+               </p>
+               <p class='bcode'>
+       <jc>// First create our var.</jc>
+       <jk>public class</jk> UrlEncodeVar <jk>extends</jk> SimpleVar {
+               
+               <jc>// Must have a no-arg constructor!</jc>
+               <jk>public</jk> UrlEncodeVar() {
+                       <jk>super</jk>(<js>"UE"</js>);
+               }       
+               
+               <jc>// The method we must implement</jc>
+               <ja>@Override</ja>
+               <jk>public</jk> String resolve(VarResolverSession session, 
String key) {
+                       <jk>return</jk> URLEncoder.<jsm>encode</jsm>(key, 
<js>"UTF-8"</js>);
+               }
+       }
+       
+       <jc>// Next create a var resolver that extends the existing DEFAULT 
resolver
+       // that supports resolving system properties.</jc>
+       VarResolver r = VarResolver.<jsf>DEFAULT</jsf>
+               .builder()
+               .vars(UrlEncodeVar.<jk>class</jk>)
+               .build();
+       
+       <jc>// Retrieve a system property and URL-encode it if necessary.</jc>
+       String myProperty = r.resolve(<js>"$UE{$S{my.property}}"</js>);
+               </p>
+               <p>
+                       The following shows the class hierarchy of the {@link 
org.apache.juneau.svl.Var} class:
+               </p>  
+               <ul class='doctree'>
+                       <li class='jac'>{@link org.apache.juneau.svl.Var} - 
Superclass of all vars.
+                       <ul>
+                               <li class='jac'>{@link 
org.apache.juneau.svl.SimpleVar} - Superclass of all vars that return strings.
+                               <ul>
+                                       <li class='jac'>{@link 
org.apache.juneau.svl.DefaultingVar} - Variables that define a default value if 
the resolve method returns null.
+                                       <ul>
+                                               <li class='jac'>{@link 
org.apache.juneau.svl.MapVar} - Variables that pull values from maps.
+                                       </ul>
+                                       <li class='jac'>{@link 
org.apache.juneau.svl.MultipartVar} - Variables that consist of 2 or more 
comma-delimited arguments.
+                               </ul>
+                               <li class='jac'>{@link 
org.apache.juneau.svl.StreamedVar} - Superclass of all vars that stream their 
value to writers.
+                       </ul>
+               </ul>
+               <p>
+                       The following is the list of default variables defined 
in all modules:
+               </p>
+               <table class='styled' style='min-width:800px;width:50%'>
+                       <tr>
+                               <th>Module</th><th>Class</th><th>Pattern</th>
+                       </tr>
+                       <tr class='dark'>
+                               <td rowspan="6" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-svl</td>
+                               <td>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar}</td>
+                               <td class='code'>$E{envVar[,defaultValue]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar}</td>
+                               <td 
class='code'>$S{systemProperty[,defaultValue]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceVar}</td>
+                               <td class='code'>$CO{arg1[,arg2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceAndRecurseVar}</td>
+                               <td class='code'>$CR{arg1[,arg2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.IfVar}</td>
+                               <td 
class='code'>$IF{booleanArg,thenValue[,elseValue]}</td>
+                       </tr>
+                       <tr class='dark dd'>
+                               <td>{@link 
org.apache.juneau.svl.vars.SwitchVar}</td>
+                               <td 
class='code'>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</td>
+                       </tr>
+                       <tr class='light dd'>
+                               <td rowspan="1" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-config</td>
+                               <td>{@link 
org.apache.juneau.ini.vars.ConfigFileVar}</td>
+                               <td class='code'>$C{key[,defaultValue]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td rowspan="14" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-rest-server</td>
+                               <td>{@link 
org.apache.juneau.rest.vars.FileVar}</td>
+                               <td class='code'>$F{path[,defaultValue]}}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.ServletInitParamVar}</td>
+                               <td class='code'>$I{name[,defaultValue]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.LocalizationVar}</td>
+                               <td class='code'>$L{key[,args...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestAttributeVar}</td>
+                               <td class='code'>$RA{key1[,key2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestFormDataVar}</td>
+                               <td class='code'>$RF{key1[,key2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestHeaderVar}</td>
+                               <td class='code'>$RH{key1[,key2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestHeaderVar}</td>
+                               <td class='code'>$RI{key}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestPathVar}</td>
+                               <td class='code'>$RP{key1[,key2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestQueryVar}</td>
+                               <td class='code'>$RQ{key1[,key2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestVar}</td>
+                               <td class='code'>$R{key1[,key2...]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td>
+                               <td 
class='code'>$SA{contentType,key[,defaultValue]}</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.UrlVar}</td>
+                               <td class='code'>$U{uri}></td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.UrlEncodeVar}</td>
+                               <td class='code'>$UE{uriPart}</td>
+                       </tr>
+                       <tr class='dark dd'>
+                               <td>{@link 
org.apache.juneau.rest.vars.WidgetVar}</td>
+                               <td class='code'>$W{widgetName}</td>
+                       </tr>
+                       <tr class='light'>
+                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-microservice-server</td>
+                               <td>{@link 
org.apache.juneau.microservice.vars.ArgsVar}</td>
+                               <td class='code'>$ARG{key[,defaultValue]}</td>
+                       </tr>
+                       <tr class='light dd'>
+                               <td>{@link 
org.apache.juneau.microservice.vars.ManifestFileVar}</td>
+                               <td class='code'>$MF{key[,defaultValue]}</td>
+                       </tr>
+               </table>
+       </div>
+       
+       <!-- 
========================================================================================================
 -->
+       <a id="juneau-svl.VarResolvers"></a>
+       <h3 class='topic' onclick='toggle(this)'>5.3 - VarResolvers and 
VarResolverSessions</h3>
+       <div class='topic'>
+               <p>
+                       The main class for performing variable resolution is 
{@link org.apache.juneau.svl.VarResolver}.
+                       <br>Two methods are provided for resolving variables:
+               </p>
+               <ul class='doctree'>
+                       <li class='jc'>{@link org.apache.juneau.svl.VarResolver}
+                       <ul>
+                               <li class='jm'>{@link 
org.apache.juneau.svl.VarResolver#resolve(String) resolve(String)} 
+                                       - Resolves variables and returns the 
results as a simple string.
+                               <li class='jm'>{@link 
org.apache.juneau.svl.VarResolver#resolveTo(String,Writer) 
resolveTo(String,Writer)} 
+                                       - Resolves variables and sends results 
to a writer.
+                       </ul>
+               </ul>
+               <p>
+                       Var resolvers can rely on the existence of other 
objects.
+                       <br>For example, {@link 
org.apache.juneau.ini.vars.ConfigFileVar} relies on the existence of a {@link 
org.apache.juneau.ini.ConfigFile}.
+                       <br>This is accomplished through the following:
+               </p>
+               <ul class='spaced-list'>
+                       <li>Context-objects - Objects set on the resolver.
+                       <li>Session-objects - Objects set on the resolver 
session.
+               </ul>
+               <p>
+                       The following two classes are identical in behavior 
except for which objects they can access:
+               </p>
+               <ul>
+                       <li class='jc'>{@link 
org.apache.juneau.svl.VarResolver} - Has access to context objects only.
+                       <li class='jc'>{@link 
org.apache.juneau.svl.VarResolverSession} - Has access to context and session 
objects.
+               </ul>
+               <p>
+                       Context and session objects are set through the 
following methods:
+               </p>
+               <ul>
+                       <li class='jm'>{@link 
org.apache.juneau.svl.VarResolverBuilder#contextObject(String,Object)} - 
Context objects.
+                       <li class='jm'>{@link 
org.apache.juneau.svl.VarResolverSession#sessionObject(String,Object)} - 
Session objects.
+                       <li class='jm'>{@link 
org.apache.juneau.svl.VarResolver#createSession(Map)} - Session objects.
+               </ul>
+               <p>
+                       Both kinds of objects are accessible through the 
following method:
+               </p>
+               <ul>
+                       <li class='jm'>{@link 
org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)}
+               </ul>
+               <p>
+                       Var resolvers can be cloned and extended by using the 
{@link org.apache.juneau.svl.VarResolver#builder()} method.
+                       <br>Cloning a resolver will copy it's {@link 
org.apache.juneau.svl.Var} class names and context objects.
+               </p>
+               
+               <h5 class='figure'>Example:</h5>
+               <p class='bcode'>
+       <jc>// Create a resolver that copies the default resolver and adds $C 
and $ARG vars.</jc>
+       VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>
+               .builder()
+               .vars(ConfigFileVar.<jk>class</jk>, ArgsVar.<jk>class</jk>)
+               .build();
+               </p>
+       </div>  
+       
+       <!-- 
========================================================================================================
 -->
+       <a id="juneau-svl.OtherNotes"></a>
+       <h3 class='topic' onclick='toggle(this)'>5.4 - Other Notes</h3>
+       <div class='topic'>
+               <ul class='spaced-list'>
+                       <li>
+                               The escape character <js>'\'</js> can be used 
when necessary to escape the following characters: 
+                               <code>$ , { }</code>
+                       <li>
+                               <b>WARNING:</b>  It is possible to cause {@link 
java.lang.StackOverflowError StackOverflowErrors} if 
+                               your nested variables result in a recursive 
loop (e.g. the environment variable 
+                               <code>'MYPROPERTY'</code> has the value 
<code>'$E{MYPROPERTY}'</code>).
+                               So don't do that!
+                       <li>
+                               As a general rule, this class tries to be as 
efficient as possible by not creating new strings when not 
+                               needed.
+                               <br>For example, calling the resolve method on 
a string that doesn't contain variables (e.g. 
+                               
<code>resolver.resolve(<js>"foobar"</js>)</code>) will simply be a no-op and 
return the same string.
+               </ul>
+       </div>  
 </div>
 
 <!-- 
===========================================================================================================
 -->
@@ -7221,68 +7474,158 @@
                <p>
                        The following is the default list of supported 
variables.
                </p>
-               <a id="DefaultRestSvlVariables"></a>
-               <h5 class='topic'>Default REST SVL variables</h5>
-               <ul class='spaced-list'>
-                       <li><b>Initialization-time variables:</b>
-                       <ul>
-                               <li><l>$C{key[,defaultValue]}</l> - {@link 
org.apache.juneau.ini.ConfigFileVar}
-                               <li><l>$E{envVar[,defaultValue]}</l> - {@link 
org.apache.juneau.svl.vars.EnvVariablesVar}
-                               <li><l>$S{systemProperty[,defaultValue]}</l> - 
{@link org.apache.juneau.svl.vars.SystemPropertiesVar}
-                       </ul>
-                       <li><b>Initialization-time construct variables:</b>
-                       <ul>
-                               <li><l>$CO{arg1[,arg2...]}</l> - {@link 
org.apache.juneau.svl.vars.CoalesceVar}
-                               <li><l>$CR{arg1[,arg2...]}</l> - {@link 
org.apache.juneau.svl.vars.CoalesceAndRecurseVar}
-                               
<li><l>$IF{booleanArg,thenValue[,elseValue]}</l> - {@link 
org.apache.juneau.svl.vars.IfVar}
-                               
<li><l>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</l> - {@link 
org.apache.juneau.svl.vars.SwitchVar}
-                       </ul>
-                       <li><b>Request-time variables:</b>
-                       <ul>
-                               <li><l>$F{path[,defaultValue]}</l> - {@link 
org.apache.juneau.rest.vars.FileVar}
-                               <li><l>$I{name[,defaultValue]}</l> - {@link 
org.apache.juneau.rest.vars.ServletInitParamVar}
-                               <li><l>$L{key[,args...]}</l> - {@link 
org.apache.juneau.rest.vars.LocalizationVar}
-                               <li><l>$RA{key1[,key2...]}</l> - {@link 
org.apache.juneau.rest.vars.RequestAttributeVar}
-                               <li><l>$RF{key1[,key2...]}</l> - {@link 
org.apache.juneau.rest.vars.RequestFormDataVar}
-                               <li><l>$RH{key1[,key2...]}</l> - {@link 
org.apache.juneau.rest.vars.RequestHeaderVar}
-                               <li><l>$RI{key}</l> - {@link 
org.apache.juneau.rest.vars.RequestHeaderVar}
-                                       <br>Possible keys:
-                                       <ul>
-                                               <li><l>$RI{contact}</l> - 
{@link org.apache.juneau.dto.swagger.Info#getContact()}
-                                               <li><l>$RI{description}</l> - 
{@link org.apache.juneau.rest.RestInfoProvider#getDescription(RestRequest)}
-                                               <li><l>$RI{externalDocs}</l> - 
{@link org.apache.juneau.dto.swagger.Swagger#getExternalDocs()}
-                                               <li><l>$RI{license}</l> - 
{@link org.apache.juneau.dto.swagger.Info#getLicense()}
-                                               
<li><l>$RI{methodDescription}</l> - {@link 
org.apache.juneau.rest.RestInfoProvider#getMethodDescription(Method,RestRequest)}
-                                               <li><l>$RI{methodSummary}</l> - 
{@link 
org.apache.juneau.rest.RestInfoProvider#getMethodSummary(Method,RestRequest)}
-                                               <li><l>$RI{siteName}</l> - 
{@link org.apache.juneau.rest.RestInfoProvider#getSiteName(RestRequest)}
-                                               <li><l>$RI{tags}</l> - {@link 
org.apache.juneau.dto.swagger.Swagger#getTags()}
-                                               <li><l>$RI{termsOfService}</l> 
- {@link org.apache.juneau.dto.swagger.Info#getTermsOfService()}
-                                               <li><l>$RI{title}</l> - {@link 
org.apache.juneau.rest.RestInfoProvider#getTitle(RestRequest)}
-                                               <li><l>$RI{version}</l> - 
{@link org.apache.juneau.dto.swagger.Info#getVersion()}
-                                       </ul>
-                               <li><l>$RP{key1[,key2...]}</l> - {@link 
org.apache.juneau.rest.vars.RequestPathVar}
-                               <li><l>$RQ{key1[,key2...]}</l> - {@link 
org.apache.juneau.rest.vars.RequestQueryVar}
-                               <li><l>$R{key1[,key2...]}</l> - {@link 
org.apache.juneau.rest.vars.RequestVar}
-                                       <br>Possible keys:
-                                       <ul>
-                                               <li><l>$R{method}</l> - {@link 
org.apache.juneau.rest.RestRequest#getMethod()}
-                                               <li><l>$R{methodSummary}</l> - 
{@link org.apache.juneau.rest.RestRequest#getMethodSummary()}
-                                               
<li><l>$R{methodDescription}</l> - {@link 
org.apache.juneau.rest.RestRequest#getMethodDescription()}
-                                               <li><l>$R{pathInfo}</l> - 
{@link org.apache.juneau.rest.RestRequest#getPathInfo()}
-                                               <li><l>$R{requestParentURI}</l> 
- {@link org.apache.juneau.UriContext#getRootRelativePathInfoParent()}
-                                               <li><l>$R{requestURI}</l> - 
{@link org.apache.juneau.rest.RestRequest#getRequestURI()}
-                                               
<li><l>$R{resourceDescription}</l> - {@link 
org.apache.juneau.rest.RestRequest#getResourceDescription()}
-                                               <li><l>$R{resourceTitle}</l> - 
{@link org.apache.juneau.rest.RestRequest#getResourceTitle()}
-                                               <li><l>$R{servletParentURI}</l> 
- {@link org.apache.juneau.UriContext#getRootRelativeServletPathParent()}
-                                               <li><l>$R{servletPath}</l> - 
{@link org.apache.juneau.rest.RestRequest#getServletPath()}
-                                               <li><l>$R{servletURI}</l> - 
{@link org.apache.juneau.UriContext#getRootRelativeServletPath()}
-                                       </ul>
-                               <li><l>$SA{contentType,key[,defaultValue]}</l> 
- {@link org.apache.juneau.rest.vars.SerializedRequestAttrVar}
-                               <li><l>$U{uri}</l> - {@link 
org.apache.juneau.rest.vars.UrlVar}
-                               <li><l>$UE{uriPart}</l> - {@link 
org.apache.juneau.rest.vars.UrlEncodeVar}
-                               <li><l>$W{widgetName}</l> - {@link 
org.apache.juneau.rest.vars.WidgetVar}
-                       </ul>
-               </ul>
+               <a id='DefaultRestSvlVariables'></a>
+               <h5 class='figure'>Default REST SVL Variables:</h5>
+               <table class='styled' style='min-width:800px;width:50%'>
+                       <tr>
+                               
<th>Module</th><th>Class</th><th>Pattern</th><th>Initialization<br>time</th><th>Request<br>time</th>
+                       </tr>
+                       <tr class='dark'>
+                               <td rowspan="6" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-svl</td>
+                               <td>{@link 
org.apache.juneau.svl.vars.EnvVariablesVar}</td>
+                               <td class='code'>$E{envVar[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.SystemPropertiesVar}</td>
+                               <td 
class='code'>$S{systemProperty[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceVar}</td>
+                               <td class='code'>$CO{arg1[,arg2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.CoalesceAndRecurseVar}</td>
+                               <td class='code'>$CR{arg1[,arg2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.svl.vars.IfVar}</td>
+                               <td 
class='code'>$IF{booleanArg,thenValue[,elseValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark dd'>
+                               <td>{@link 
org.apache.juneau.svl.vars.SwitchVar}</td>
+                               <td 
class='code'>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='light dd'>
+                               <td rowspan="1" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-config</td>
+                               <td>{@link 
org.apache.juneau.ini.vars.ConfigFileVar}</td>
+                               <td class='code'>$C{key[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td rowspan="14" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-rest-server</td>
+                               <td>{@link 
org.apache.juneau.rest.vars.FileVar}</td>
+                               <td class='code'>$F{path[,defaultValue]}}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.ServletInitParamVar}</td>
+                               <td class='code'>$I{name[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.LocalizationVar}</td>
+                               <td class='code'>$L{key[,args...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestAttributeVar}</td>
+                               <td class='code'>$RA{key1[,key2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestFormDataVar}</td>
+                               <td class='code'>$RF{key1[,key2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestHeaderVar}</td>
+                               <td class='code'>$RH{key1[,key2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestHeaderVar}</td>
+                               <td class='code'>$RI{key}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestPathVar}</td>
+                               <td class='code'>$RP{key1[,key2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestQueryVar}</td>
+                               <td class='code'>$RQ{key1[,key2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.RequestVar}</td>
+                               <td class='code'>$R{key1[,key2...]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td>
+                               <td 
class='code'>$SA{contentType,key[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.UrlVar}</td>
+                               <td class='code'>$U{uri}></td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark'>
+                               <td>{@link 
org.apache.juneau.rest.vars.UrlEncodeVar}</td>
+                               <td class='code'>$UE{uriPart}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='dark dd'>
+                               <td>{@link 
org.apache.juneau.rest.vars.WidgetVar}</td>
+                               <td class='code'>$W{widgetName}</td>
+                               <td 
style='text-align:center;font-weight:bold'>no</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes</td>
+                       </tr>
+                       <tr class='light'>
+                               <td rowspan="2" 
style='text-align:center;font-weight:bold;padding:20px;' 
class='code'>juneau-microservice-server</td>
+                               <td>{@link 
org.apache.juneau.microservice.vars.ArgsVar}</td>
+                               <td class='code'>$ARG{key[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
+                       </tr>
+                       <tr class='light dd'>
+                               <td>{@link 
org.apache.juneau.microservice.vars.ManifestFileVar}</td>
+                               <td class='code'>$MF{key[,defaultValue]}</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
+                               <td 
style='text-align:center;font-weight:bold'>yes*</td>
+                       </tr>
+               </table>
+               <p>
+                       * = Only if extending from {@link 
org.apache.juneau.microservice.Resource}
+               <p>
        </div>
        
        <!-- 
========================================================================================================
 -->
@@ -17208,7 +17551,7 @@
                                        <li>More consistent handling of 
exceptions.
                                        <li>More consistent method declarations.
                                </ul>
-                       <li>Refactored var resolver API and added them to a new 
package - <a class='doclink' 
href='org/apache/juneau/svl/package-summary.html#TOC'>org.apache.juneau.svl</a>.
+                       <li>Refactored var resolver API and added them to a new 
package - <code>org.apache.juneau.svl</code>.
                                <ul>
                                        <li>Support for stream-based variables 
- {@link org.apache.juneau.svl.StreamedVar}.
                                        <li>Added support for context and 
session objects.
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
index c15753f..5746d35 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -25,9 +25,11 @@ import java.util.logging.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.ini.*;
+import org.apache.juneau.ini.vars.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.microservice.console.*;
 import org.apache.juneau.microservice.resources.*;
+import org.apache.juneau.microservice.vars.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.svl.vars.*;
 import org.apache.juneau.utils.*;
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
index 0e1d64b..c0d7014 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java
@@ -14,9 +14,9 @@ package org.apache.juneau.microservice;
 
 import static org.apache.juneau.rest.annotation.HookEvent.*;
 
+import org.apache.juneau.microservice.vars.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.svl.vars.*;
 
 /**
  * Superclass for all REST resources.
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
index c27c6e5..3b2da75 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java
@@ -14,9 +14,9 @@ package org.apache.juneau.microservice;
 
 import static org.apache.juneau.rest.annotation.HookEvent.*;
 
+import org.apache.juneau.microservice.vars.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.svl.vars.*;
 
 /**
  * Superclass for all REST resource groups.
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
index 535af3a..d31ca0c 100644
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java
@@ -15,9 +15,9 @@ package org.apache.juneau.microservice;
 import static org.apache.juneau.rest.annotation.HookEvent.*;
 
 import org.apache.juneau.jena.*;
+import org.apache.juneau.microservice.vars.*;
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.svl.vars.*;
 
 /**
  * Superclass for all REST resource groups.
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java
similarity index 98%
rename from 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
rename to 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java
index 5387299..d3cb8cb 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.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.svl.vars;
+package org.apache.juneau.microservice.vars;
 
 import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java
similarity index 98%
rename from 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
rename to 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java
index d6bbc83..ae7d3a6 100644
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.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.svl.vars;
+package org.apache.juneau.microservice.vars;
 
 import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
diff --git 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java
old mode 100644
new mode 100755
similarity index 65%
copy from 
juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
copy to 
juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java
index 4dd0471..40b9863
--- 
a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java
@@ -1,44 +1,18 @@
-// 
***************************************************************************************************************************
-// * 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.svl.vars;
-
-import org.apache.juneau.svl.*;
-
-/**
- * A basic variable resolver that returns the first non-null value.
- * 
- * <p>
- * The format for this var is <js>"$CR{arg1[,arg2...]}"</js>.
- * 
- * <p>
- * The difference between {@link CoalesceVar} and {@link 
CoalesceAndRecurseVar} is that the first will not resolve
- * inner variables nor recursively resolve variables, and the second will.
- * Use {@link CoalesceVar} when resolving user-input.
- */
-public class CoalesceAndRecurseVar extends MultipartResolvingVar {
-
-       /** The name of this variable. */
-       public static final String NAME = "CR";
-
-       /**
-        * Constructor.
-        */
-       public CoalesceAndRecurseVar() {
-               super(NAME);
-       }
-
-       @Override
-       public String resolve(VarResolverSession session, String arg) throws 
Exception {
-               return arg;
-       }
-}
+// 
***************************************************************************************************************************
+// * 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.                                              *
+// 
***************************************************************************************************************************
+
+/**
+ * Predefined SVL Variables
+ */
+package org.apache.juneau.microservice.vars;
+
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index b93b69b..9ae0f9c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -31,6 +31,7 @@ import org.apache.juneau.encoders.Encoder;
 import org.apache.juneau.http.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.ini.*;
+import org.apache.juneau.ini.vars.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.rest.annotation.*;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java
index 14713fa..2b1bdb7 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java
@@ -12,7 +12,7 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.annotation;
 
-import org.apache.juneau.ini.*;
+import org.apache.juneau.ini.vars.*;
 import org.apache.juneau.rest.vars.*;
 import org.apache.juneau.svl.vars.*;
 
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 b5ef9c3..1f3e3e8 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
@@ -61,7 +61,7 @@ import org.apache.juneau.utils.*;
  * 
  * <h5 class='section'>See Also:</h5>
  * <ul>
- *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-rest-server.SvlVariables">Overview
 &gt; juneau-rest-server &gt; SVL Variables</a>
+ *     <li class='link'><a class="doclink" 
href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview 
&gt; juneau-rest-server &gt; SVL Variables</a>
  * </ul>
  */
 public class FileVar extends DefaultingVar {

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

Reply via email to