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 5ac48a1  JUNEAU-102 Expanded REST annotations
5ac48a1 is described below

commit 5ac48a18b0e326c35b536aecc6c63b819c936639
Author: JamesBognar <[email protected]>
AuthorDate: Sun May 12 14:58:26 2019 -0400

    JUNEAU-102 Expanded REST annotations
---
 .../org/apache/juneau/testutils/TestUtils.java     |  7 ++++-
 .../java/org/apache/juneau/html/HtmlWidgetVar.java |  2 +-
 .../org/apache/juneau/svl/VarResolverSession.java  | 15 +++++++++++
 .../juneau/examples/rest/ContentComboTestBase.java |  8 +++---
 .../org/apache/juneau/examples/rest/TestUtils.java | 25 +++++++++++++++++
 .../apache/juneau/rest/BasicRestCallHandler.java   |  6 ++---
 .../java/org/apache/juneau/rest/RestRequest.java   | 11 +++++++-
 .../java/org/apache/juneau/rest/vars/FileVar.java  |  7 ++++-
 .../apache/juneau/rest/vars/LocalizationVar.java   | 11 ++++++--
 .../juneau/rest/vars/RequestAttributeVar.java      | 12 +++++----
 .../juneau/rest/vars/RequestFormDataVar.java       | 13 ++++-----
 .../apache/juneau/rest/vars/RequestHeaderVar.java  | 13 ++++-----
 .../apache/juneau/rest/vars/RequestPathVar.java    | 13 ++++-----
 .../apache/juneau/rest/vars/RequestQueryVar.java   | 13 ++++-----
 .../org/apache/juneau/rest/vars/RequestVar.java    | 18 ++++++-------
 .../org/apache/juneau/rest/vars/RestInfoVar.java   | 13 ++++-----
 .../juneau/rest/vars/SerializedRequestAttrVar.java | 11 ++++++--
 .../juneau/rest/vars/ServletInitParamVar.java      | 11 ++++++--
 .../org/apache/juneau/rest/vars/SwaggerVar.java    | 13 ++++-----
 .../org/apache/juneau/rest/vars/UrlEncodeVar.java  |  2 +-
 .../java/org/apache/juneau/rest/vars/UrlVar.java   |  7 ++++-
 .../org/apache/juneau/rest/vars/WidgetVar.java     | 11 +++++---
 .../java/org/apache/juneau/rest/widget/Widget.java | 31 +++++++++++++++++++++-
 23 files changed, 197 insertions(+), 76 deletions(-)

diff --git 
a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
 
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
index 6455cd4..cd9aec1 100644
--- 
a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
+++ 
b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/testutils/TestUtils.java
@@ -484,8 +484,13 @@ public class TestUtils {
 
        public static final void assertContains(Object value, 
String...substrings) {
                for (String substring : substrings)
-                       if (! contains(toString(value), substring))
+                       if (! contains(toString(value), substring)) {
+                               System.err.println("Text did not contain 
expected substring: '" + toString(substring) + "'");
+                               System.err.println("=== TEXT ===");
+                               System.err.println(toString(value));
+                               System.err.println("============");
                                throw new ComparisonFailure("Text did not 
contain expected substring.", toString(substring), toString(value));
+                       }
        }
 
        public static final void assertContains(Exception e, 
String...substrings) {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetVar.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetVar.java
index 12c7383..eb83946 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetVar.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetVar.java
@@ -70,6 +70,6 @@ public class HtmlWidgetVar extends SimpleVar {
 
        @Override
        public boolean canResolve(VarResolverSession session) {
-               return session.getSessionObject(Object.class, 
SESSION_htmlWidgets, false) != null;
+               return session.hasSessionObject(SESSION_htmlWidgets);
        }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
index 0a716bf..828ed8e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
@@ -414,6 +414,16 @@ public class VarResolverSession {
        }
 
        /**
+        * Returns <jk>true</jk> if this session has the specified session 
object.
+        *
+        * @param name Session object name.
+        * @return <jk>true</jk> if this session has the specified session 
object
+        */
+       public boolean hasSessionObject(String name) {
+               return getSessionObject(Object.class, name, false) != null;
+       }
+
+       /**
         * Returns the {@link Var} with the specified name.
         *
         * @param name The var name (e.g. <js>"S"</js>).
@@ -423,4 +433,9 @@ public class VarResolverSession {
                Var v = this.context.getVarMap().get(name);
                return v != null && v.canResolve(this) ? v : null;
        }
+
+       @Override /* Object */
+       public String toString() {
+               return "var=" + this.context.getVarMap().keySet() + ", 
contextObjects=" + this.context.getContextObjects().keySet() + ", 
sessionObjects=" + this.sessionObjects.keySet();
+       }
 }
diff --git 
a/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
 
b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
index e376d8c..4203744 100644
--- 
a/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
+++ 
b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
@@ -12,6 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.examples.rest;
 
+import static org.apache.juneau.examples.rest.TestUtils.*;
+
 import java.io.*;
 import java.util.*;
 
@@ -98,10 +100,6 @@ public class ContentComboTestBase extends RestTestcase {
        public void doTest() throws Exception {
                RestClient rc = getClient(comboInput.mediaType);
                String s = rc.doGet(comboInput.url).getResponseAsString();
-               for (String s2 : comboInput.expectedResults) {
-                       if (! s.contains(s2)) {
-                               throw new FormattedRuntimeException("String 
''{0}'' not found at URL ''{1}'' for media type ''{2}''", s2, comboInput.url, 
comboInput.mediaType);
-                       }
-               }
+               assertContains(s, comboInput.expectedResults);
        }
 }
diff --git 
a/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
 
b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
index 5961649..4642866 100644
--- 
a/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
+++ 
b/juneau-examples/juneau-examples-rest-jetty/src/test/java/org/apache/juneau/examples/rest/TestUtils.java
@@ -365,4 +365,29 @@ public class TestUtils {
                String s2 = o.toString().replaceAll("\\r?\\n", "|");
                Assert.assertEquals(s, s2);
        }
+
+       /**
+        * Tries to turn the serialized output to a String.
+        * If it's a byte[], convert it to a UTF-8 encoded String.
+        */
+       public static final String toString(Object o) {
+               if (o == null)
+                       return null;
+               if (o instanceof String)
+                       return (String)o;
+               if (o instanceof byte[])
+                       return new String((byte[])o, UTF8);
+               return o.toString();
+       }
+
+       public static final void assertContains(Object value, 
String...substrings) {
+               for (String substring : substrings)
+                       if (! contains(toString(value), substring)) {
+                               System.err.println("Text did not contain 
expected substring: '" + toString(substring) + "'");
+                               System.err.println("=== TEXT ===");
+                               System.err.println(toString(value));
+                               System.err.println("============");
+                               throw new ComparisonFailure("Text did not 
contain expected substring.", toString(substring), toString(value));
+                       }
+       }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
index 2c524f9..9d23a0d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
@@ -28,7 +28,6 @@ import org.apache.juneau.http.StreamResource;
 import org.apache.juneau.rest.RestContext.*;
 import org.apache.juneau.rest.exception.*;
 import org.apache.juneau.rest.util.RestUtils;
-import org.apache.juneau.rest.vars.*;
 
 /**
  * Default implementation of {@link RestCallHandler}.
@@ -141,6 +140,7 @@ public class BasicRestCallHandler implements 
RestCallHandler {
 
                        req = createRequest(r1);
                        RestResponse res = createResponse(req, r2);
+                       req.setResponse(res);
                        context.setRequest(req);
                        context.setResponse(res);
                        String method = req.getMethod();
@@ -334,8 +334,8 @@ public class BasicRestCallHandler implements 
RestCallHandler {
        @Override /* RestCallHandler */
        public Map<String,Object> getSessionObjects(RestRequest req, 
RestResponse res) {
                Map<String,Object> m = new HashMap<>();
-               m.put(RequestVar.SESSION_req, req);
-               m.put(RequestVar.SESSION_res, res);
+               m.put("req", req);
+               m.put("res", res);
                return m;
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index 4d1742d..20bec98 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -212,6 +212,11 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                }
        }
 
+       RestRequest setResponse(RestResponse res) {
+               this.res = res;
+               return this;
+       }
+
        /**
         * Returns a string of the form <js>"HTTP method-name full-url"</js>
         *
@@ -1317,7 +1322,11 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
         */
        public VarResolverSession getVarResolverSession() {
                if (varSession == null)
-                       varSession = 
context.getVarResolver().createSession(context.getCallHandler().getSessionObjects(this,
 context.getResponse()));
+                       varSession = context
+                               .getVarResolver()
+                               
.createSession(context.getCallHandler().getSessionObjects(this, 
context.getResponse()))
+                               .sessionObject("req", this)
+                               .sessionObject("res", res);
                return varSession;
        }
 
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 6fb42eb..d882823 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
@@ -82,7 +82,7 @@ public class FileVar extends DefaultingVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) throws 
Exception {
 
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, false);
@@ -97,4 +97,9 @@ public class FileVar extends DefaultingVar {
 
                return null;
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req) || 
session.hasSessionObject(SESSION_crm);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
index 7ad5d53..0bc9f90 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/LocalizationVar.java
@@ -42,6 +42,8 @@ import org.apache.juneau.svl.*;
  */
 public class LocalizationVar extends MultipartVar {
 
+       private static final String SESSION_req = "req";
+
        /** The name of this variable. */
        public static final String NAME = "L";
 
@@ -52,13 +54,18 @@ public class LocalizationVar extends MultipartVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String[] args) {
                if (args.length > 0) {
                        String key = args[0];
                        String[] a = (args.length > 1) ? 
Arrays.copyOfRange(args, 1, args.length) : new String[0];
-                       return session.getSessionObject(RestRequest.class, 
RequestVar.SESSION_req, true).getMessage(key, (Object[])a);
+                       return session.getSessionObject(RestRequest.class, 
SESSION_req, true).getMessage(key, (Object[])a);
                }
                return "";
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
index 86c77ac..6f5d00c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
@@ -51,10 +51,7 @@ import org.apache.juneau.svl.*;
  */
 public class RequestAttributeVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
+       private static final String SESSION_req = "req";
 
 
        /** The name of this variable. */
@@ -77,9 +74,14 @@ public class RequestAttributeVar extends 
MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                return stringify(req.getAttribute(key));
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestFormDataVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestFormDataVar.java
index 54107f9..de8e085 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestFormDataVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestFormDataVar.java
@@ -47,11 +47,7 @@ import org.apache.juneau.svl.*;
  */
 public class RequestFormDataVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
+       private static final String SESSION_req = "req";
 
        /** The name of this variable. */
        public static final String NAME = "RF";
@@ -73,9 +69,14 @@ public class RequestFormDataVar extends 
MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                return req.getFormData(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
index b61c1b0..a6ce8b4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
@@ -47,11 +47,7 @@ import org.apache.juneau.svl.*;
  */
 public class RequestHeaderVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
+       private static final String SESSION_req = "req";
 
        /** The name of this variable. */
        public static final String NAME = "RH";
@@ -73,9 +69,14 @@ public class RequestHeaderVar extends MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                return req.getHeader(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestPathVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestPathVar.java
index a910e1d..d231f35 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestPathVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestPathVar.java
@@ -48,11 +48,7 @@ import org.apache.juneau.svl.*;
  */
 public class RequestPathVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
+       private static final String SESSION_req = "req";
 
        /** The name of this variable. */
        public static final String NAME = "RP";
@@ -74,11 +70,16 @@ public class RequestPathVar extends MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                if ("REMAINDER".equals(key))
                        return req.getPathRemainder();
                return req.getPath(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestQueryVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestQueryVar.java
index 68d9e44..0990929 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestQueryVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestQueryVar.java
@@ -48,11 +48,7 @@ import org.apache.juneau.svl.*;
  */
 public class RequestQueryVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
+       private static final String SESSION_req = "req";
 
        /** The name of this variable. */
        public static final String NAME = "RQ";
@@ -74,9 +70,14 @@ public class RequestQueryVar extends MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                return req.getQuery(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
index b6cf13d..af51584 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
@@ -64,15 +64,8 @@ import org.apache.juneau.svl.*;
  */
 public class RequestVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
-       /**
-        * The name of the session or context object that identifies the {@link 
RestResponse} object.
-        */
-       public static final String SESSION_res = "res";
+       private static final String SESSION_req = "req";
+       private static final String SESSION_res = "res";
 
 
        /** The name of this variable. */
@@ -95,7 +88,7 @@ public class RequestVar extends MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                char c = StringUtils.charAt(key, 0);
@@ -140,4 +133,9 @@ public class RequestVar extends MultipartResolvingVar {
                }
                return req.getProperties().getString(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req) && 
session.hasSessionObject(SESSION_res);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RestInfoVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RestInfoVar.java
index 7c5c0c1..6091f32 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RestInfoVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RestInfoVar.java
@@ -71,11 +71,7 @@ import org.apache.juneau.svl.*;
  */
 public class RestInfoVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
+       private static final String SESSION_req = "req";
 
        /** The name of this variable. */
        public static final String NAME = "RI";
@@ -97,7 +93,7 @@ public class RestInfoVar extends MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) throws 
RestException, InternalServerError {
                try {
                        RestRequest req = 
session.getSessionObject(RestRequest.class, SESSION_req, true);
@@ -151,4 +147,9 @@ public class RestInfoVar extends MultipartResolvingVar {
                        throw new InternalServerError(e);
                }
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
index f922a94..62fb3da 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SerializedRequestAttrVar.java
@@ -41,6 +41,8 @@ import org.apache.juneau.svl.*;
  */
 public class SerializedRequestAttrVar extends StreamedVar {
 
+       private static final String SESSION_req = "req";
+
        /** The name of this variable. */
        public static final String NAME = "SA";
 
@@ -51,13 +53,13 @@ public class SerializedRequestAttrVar extends StreamedVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public void resolveTo(VarResolverSession session, Writer w, String key) 
throws Exception {
                int i = key.indexOf(',');
                if (i == -1)
                        throw new RuntimeException("Invalid format for $SA var. 
 Must be of the format $SA{contentType,key[,defaultValue]}");
                String[] s2 = split(key);
-               RestRequest req = session.getSessionObject(RestRequest.class, 
RequestVar.SESSION_req, true);
+               RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                if (req != null) {
                        Object o = req.getAttribute(key);
                        if (o == null)
@@ -77,4 +79,9 @@ public class SerializedRequestAttrVar extends StreamedVar {
        protected boolean allowRecurse() {
                return false;
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
index 388065d..95c74b5 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/ServletInitParamVar.java
@@ -39,6 +39,8 @@ import org.apache.juneau.svl.*;
  */
 public class ServletInitParamVar extends DefaultingVar {
 
+       private static final String SESSION_req = "req";
+
        /** The name of this variable. */
        public static final String NAME = "I";
 
@@ -49,8 +51,13 @@ public class ServletInitParamVar extends DefaultingVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
-               return session.getSessionObject(RestRequest.class, 
RequestVar.SESSION_req, true).getContext().getServletInitParameter(key);
+               return session.getSessionObject(RestRequest.class, SESSION_req, 
true).getContext().getServletInitParameter(key);
+       }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SwaggerVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SwaggerVar.java
index 0fb9dba..2ef272d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SwaggerVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/SwaggerVar.java
@@ -46,11 +46,7 @@ import org.apache.juneau.svl.*;
  */
 public class SwaggerVar extends MultipartResolvingVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
-       public static final String SESSION_req = "req";
-
+       private static final String SESSION_req = "req";
 
        /** The name of this variable. */
        public static final String NAME = "SS";
@@ -72,9 +68,14 @@ public class SwaggerVar extends MultipartResolvingVar {
                return false;
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                return req.getProperties().getString(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
index 20ff8e2..aa47b43 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlEncodeVar.java
@@ -48,7 +48,7 @@ public class UrlEncodeVar extends SimpleVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                return urlEncode(key);
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
index 113cf9c..a1b5581 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
@@ -55,9 +55,14 @@ public class UrlVar extends SimpleVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                return req.getUriResolver().resolve(key);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/WidgetVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/WidgetVar.java
index f0d1288..b404677 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/WidgetVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/WidgetVar.java
@@ -39,9 +39,6 @@ import org.apache.juneau.svl.*;
  */
 public class WidgetVar extends SimpleVar {
 
-       /**
-        * The name of the session or context object that identifies the {@link 
RestRequest} object.
-        */
        private static final String SESSION_req = "req";
        private static final String SESSION_res = "res";
 
@@ -57,12 +54,13 @@ public class WidgetVar extends SimpleVar {
                super(NAME);
        }
 
-       @Override /* Parameter */
+       @Override /* Var */
        public String resolve(VarResolverSession session, String key) throws 
Exception {
                RestRequest req = session.getSessionObject(RestRequest.class, 
SESSION_req, true);
                RestResponse res = session.getSessionObject(RestResponse.class, 
SESSION_res, true);
                boolean isScript = false, isStyle = false;
 
+               // TODO - The following lines are deprecated.
                if (key.endsWith(".script")) {
                        key = key.substring(0, key.length() - 7);
                        isScript = true;
@@ -83,4 +81,9 @@ public class WidgetVar extends SimpleVar {
                        return w.getStyle(req, res);
                return w.getHtml(req, res);
        }
+
+       @Override /* Var */
+       public boolean canResolve(VarResolverSession session) {
+               return session.hasSessionObject(SESSION_req) && 
session.hasSessionObject(SESSION_res);
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
index 0011d06..1ee6e6d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/widget/Widget.java
@@ -16,7 +16,9 @@ import java.io.*;
 import java.util.*;
 
 import org.apache.juneau.rest.*;
+import org.apache.juneau.svl.*;
 import org.apache.juneau.utils.*;
+import org.apache.juneau.html.*;
 
 /**
  * Defines an interface for resolvers of <js>"$W{...}"</js> string variables.
@@ -36,10 +38,13 @@ import org.apache.juneau.utils.*;
  *     <li class='link'>{@doc juneau-rest-server.HtmlDocAnnotation.Widgets}
  * </ul>
  */
-public abstract class Widget {
+public abstract class Widget implements HtmlWidget {
 
        private final ClasspathResourceManager rm = new 
ClasspathResourceManager(getClass(), ClasspathResourceFinderRecursive.INSTANCE, 
false);
 
+       private static final String SESSION_req = "req";
+       private static final String SESSION_res = "res";
+
        /**
         * The widget key.
         *
@@ -54,10 +59,34 @@ public abstract class Widget {
         *
         * @return The widget key.
         */
+       @Override
        public String getName() {
                return getClass().getSimpleName();
        }
 
+       private RestRequest req(VarResolverSession session) {
+               return session.getSessionObject(RestRequest.class, SESSION_req, 
true);
+       }
+
+       private RestResponse res(VarResolverSession session) {
+               return session.getSessionObject(RestResponse.class, 
SESSION_res, true);
+       }
+
+       @Override /* HtmlWidget */
+       public String getHtml(VarResolverSession session) throws Exception {
+               return getHtml(req(session), res(session));
+       }
+
+       @Override /* HtmlWidget */
+       public String getScript(VarResolverSession session) throws Exception {
+               return getScript(req(session), res(session));
+       }
+
+       @Override /* HtmlWidget */
+       public String getStyle(VarResolverSession session) throws Exception {
+               return getStyle(req(session), res(session));
+       }
+
        /**
         * Resolves the HTML content for this widget.
         *

Reply via email to