juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [juneau] branch master updated: Javadoc updates.
Date Thu, 08 Feb 2018 02:05:46 GMT
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 <jamesbognar@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
jamesbognar@apache.org.

Mime
View raw message