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 7926fc5 VarResolvers should use BeanFactories.
7926fc5 is described below
commit 7926fc54a33c3d736345ae019b7439de058e967b
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jan 30 13:58:19 2021 -0500
VarResolvers should use BeanFactories.
---
.../main/java/org/apache/juneau/config/Config.java | 2 +-
.../org/apache/juneau/config/vars/ConfigVar.java | 26 +++----
.../org/apache/juneau/html/HtmlDocSerializer.java | 12 ++--
.../juneau/html/HtmlDocSerializerSession.java | 2 +-
.../java/org/apache/juneau/html/HtmlWidgetMap.java | 57 ++++-----------
.../java/org/apache/juneau/html/HtmlWidgetVar.java | 14 +---
.../juneau/serializer/SerializerSession.java | 8 +--
.../java/org/apache/juneau/svl/VarResolver.java | 20 +++---
.../org/apache/juneau/svl/VarResolverBuilder.java | 32 ++++-----
.../org/apache/juneau/svl/VarResolverContext.java | 31 ++++----
.../org/apache/juneau/svl/VarResolverSession.java | 83 +++++++---------------
.../apache/juneau/microservice/Microservice.java | 5 +-
.../juneau/microservice/MicroserviceBuilder.java | 13 ++--
.../jetty/JettyMicroserviceBuilder.java | 4 +-
.../java/org/apache/juneau/rest/RestContext.java | 18 +----
.../org/apache/juneau/rest/RestContextBuilder.java | 20 +++---
.../java/org/apache/juneau/rest/RestRequest.java | 7 +-
.../org/apache/juneau/rest/SwaggerProvider.java | 2 +-
.../java/org/apache/juneau/rest/vars/FileVar.java | 32 ++++-----
.../apache/juneau/rest/vars/LocalizationVar.java | 15 ++--
.../juneau/rest/vars/RequestAttributeVar.java | 15 ++--
.../juneau/rest/vars/RequestFormDataVar.java | 16 ++---
.../apache/juneau/rest/vars/RequestHeaderVar.java | 15 ++--
.../apache/juneau/rest/vars/RequestPathVar.java | 14 ++--
.../apache/juneau/rest/vars/RequestQueryVar.java | 15 ++--
.../apache/juneau/rest/vars/RequestSwaggerVar.java | 13 ++--
.../org/apache/juneau/rest/vars/RequestVar.java | 15 ++--
.../juneau/rest/vars/SerializedRequestAttrVar.java | 24 +++----
.../juneau/rest/vars/ServletInitParamVar.java | 10 ++-
.../org/apache/juneau/rest/vars/SwaggerVar.java | 10 ++-
.../java/org/apache/juneau/rest/vars/UrlVar.java | 11 +--
.../java/org/apache/juneau/rest/widget/Widget.java | 8 +--
32 files changed, 219 insertions(+), 350 deletions(-)
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index ca94200..90476bd 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -457,7 +457,7 @@ public final class Config extends Context implements
ConfigEventListener, Writab
varSession = getInstanceProperty(CONFIG_varResolver,
VarResolver.class, VarResolver.DEFAULT)
.builder()
.vars(ConfigVar.class)
- .contextObject(ConfigVar.SESSION_config, this)
+ .bean(Config.class, this)
.build()
.createSession();
binaryLineLength = getIntegerProperty(CONFIG_binaryLineLength);
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
index 0e14b01..f52c2d2 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/vars/ConfigVar.java
@@ -23,20 +23,22 @@ import org.apache.juneau.svl.*;
* See {@link Config#getString(String)} for the format of the key.
*
* <p>
- * This variable resolver requires that a {@link Config} object be set as a
context object on the resolver or a
- * session object on the resolver session.
+ * This variable resolver requires that a {@link Config} bean be available in
the resolver session bean factory.
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
* <jc>// Create a config object.</jc>
- * Config config =
Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();
+ * Config <jv>config</jv> =
Config.<jsm>create</jsm>().name(<js>"MyConfig.cfg"</js>).build();
*
* <jc>// Create a variable resolver that resolves config file entries
(e.g. "$C{MySection/myKey}")</jc>
- * VarResolver r = <jk>new</jk>
VarResolver().addVars(ConfigVar.<jk>class</jk>)
- * .addContextObject(<jsf>SESSION_config</jsf>, configFile);
+ * VarResolver <jv>resolver<jv> = VarResolver
+ * .<jsm>create</jsm>()
+ * .vars(ConfigVar.<jk>class</jk>)
+ * .bean(Config.<jk>class</jk>, <jv>config</jv>)
+ * .build();
*
* <jc>// Use it!</jc>
- * System.<jsf>out</jsf>.println(r.resolve(<js>"Value for myKey in section
MySection is $C{MySection/myKey}"</js>));
+ * System.<jsf>out</jsf>.println(<jv>resolver<jv>.resolve(<js>"Value for
myKey in section MySection is $C{MySection/myKey}"</js>));
* </p>
*
* <p>
@@ -50,11 +52,6 @@ import org.apache.juneau.svl.*;
*/
public class ConfigVar extends DefaultingVar {
- /**
- * The name of the session or context object that identifies the {@link
Config} object.
- */
- public static final String SESSION_config = "config";
-
/** The name of this variable. */
public static final String NAME = "C";
@@ -67,6 +64,11 @@ public class ConfigVar extends DefaultingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- return session.getSessionObject(Config.class, SESSION_config,
true).getString(key);
+ return session.getBean(Config.class).get().getString(key);
+ }
+
+ @Override /* Var */
+ public boolean canResolve(VarResolverSession session) {
+ return session.getBean(Config.class).isPresent();
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 5bc31c5..deab185 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.html;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
@@ -723,7 +721,7 @@ public class HtmlDocSerializer extends
HtmlStrippedDocSerializer {
private final String noResultsMessage;
private final boolean nowrap;
private final HtmlDocTemplate template;
- private final Map<String,HtmlWidget> widgets;
+ private final HtmlWidgetMap widgets;
private volatile HtmlSchemaDocSerializer schemaSerializer;
@@ -779,10 +777,8 @@ public class HtmlDocSerializer extends
HtmlStrippedDocSerializer {
noResultsMessage = getStringProperty(HTMLDOC_noResultsMessage,
"<p>no results</p>");
template = getInstanceProperty(HTMLDOC_template,
HtmlDocTemplate.class, BasicHtmlDocTemplate.class);
- Map<String,HtmlWidget> widgets = new HashMap<>();
- for (HtmlWidget w : getInstanceArrayProperty(HTMLDOC_widgets,
HtmlWidget.class))
- widgets.put(w.getName(), w);
- this.widgets = Collections.unmodifiableMap(widgets);
+ widgets = new HtmlWidgetMap();
+ widgets.append(getInstanceArrayProperty(HTMLDOC_widgets,
HtmlWidget.class));
}
@Override /* Context */
@@ -977,7 +973,7 @@ public class HtmlDocSerializer extends
HtmlStrippedDocSerializer {
* @return
* Widgets defined on this serializers.
*/
- protected final Map<String,HtmlWidget> getWidgets() {
+ protected final HtmlWidgetMap getWidgets() {
return widgets;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 21bc892..1120fe6 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -69,7 +69,7 @@ public class HtmlDocSerializerSession extends
HtmlStrippedDocSerializerSession {
head = getProperty(HTMLDOC_head, String[].class, ctx.getHead());
nowrap = getProperty(HTMLDOC_nowrap, boolean.class,
ctx.isNowrap());
- varSessionObject(HtmlWidgetVar.SESSION_htmlWidgets,
ctx.getWidgets());
+ addVarBean(HtmlWidgetMap.class, ctx.getWidgets());
}
@Override /* SerializerSession */
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java
similarity index 56%
copy from
juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
copy to
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java
index 7240bdf..3132f43 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/UrlVar.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWidgetMap.java
@@ -10,54 +10,25 @@
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied. See the License for the *
// * specific language governing permissions and limitations under the
License. *
//
***************************************************************************************************************************
-package org.apache.juneau.rest.vars;
+package org.apache.juneau.html;
-import org.apache.juneau.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.svl.*;
+import org.apache.juneau.collections.*;
/**
- * URL variable resolver.
- *
- * <p>
- * The format for this var is <js>"$U{uri}"</js>.
- *
- * <p>
- * The advantage of using this variable is that you can resolve URLs with
special protocols such as
- * <js>"servlet:/xxx"</js>.
- *
- * <p>
- * See {@link UriResolver} for the kinds of URIs that can be resolved.
- *
- * <p>
- * Uses the URI resolver returned by {@link RestRequest#getUriResolver()}.
- *
- * <ul class='seealso'>
- * <li class='link'>{@doc RestSvlVariables}
- * </ul>
+ * A collection of {@link HtmlWidget} objects keyed by their names.
*/
-public class UrlVar extends SimpleVar {
-
- private static final String SESSION_req = "req";
-
- /** The name of this variable. */
- public static final String NAME = "U";
+public class HtmlWidgetMap extends AMap<String,HtmlWidget> {
+ private static final long serialVersionUID = 1L;
/**
- * Constructor.
+ * Adds the specified widgets to this map.
+ *
+ * @param w The widgets to add to this map.
+ * @return This object (for method chaining).
*/
- public UrlVar() {
- super(NAME);
- }
-
- @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);
+ public HtmlWidgetMap append(HtmlWidget...w) {
+ for (HtmlWidget ww : w)
+ put(ww.getName(), ww);
+ return this;
}
-}
\ No newline at end of file
+}
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 3f4ed9b..983c5cb 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
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.html;
-import java.util.*;
-
import org.apache.juneau.html.annotation.*;
import org.apache.juneau.svl.*;
@@ -39,11 +37,6 @@ import org.apache.juneau.svl.*;
public class HtmlWidgetVar extends SimpleVar {
/**
- * The name of the session or context object that identifies the object
containing the widgets to resolve.
- */
- public static final String SESSION_htmlWidgets = "htmlWidgets";
-
- /**
* The name of this variable.
*/
public static final String NAME = "W";
@@ -55,12 +48,11 @@ public class HtmlWidgetVar extends SimpleVar {
super(NAME);
}
- @SuppressWarnings("unchecked")
@Override /* Parameter */
public String resolve(VarResolverSession session, String key) throws
Exception {
- Map<String,HtmlWidget> widgets =
(Map<String,HtmlWidget>)session.getSessionObject(Object.class,
SESSION_htmlWidgets, false);
+ HtmlWidgetMap m =
session.getBean(HtmlWidgetMap.class).orElseThrow(RuntimeException::new);
- HtmlWidget w = widgets.get(key);
+ HtmlWidget w = m.get(key);
if (w == null)
return "unknown-widget-"+key;
@@ -69,6 +61,6 @@ public class HtmlWidgetVar extends SimpleVar {
@Override
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_htmlWidgets);
+ return session.getBean(HtmlWidgetMap.class).isPresent();
}
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 47a3c59..90fa7d1 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -86,12 +86,12 @@ public abstract class SerializerSession extends
BeanTraverseSession {
/**
* Adds a session object to the {@link VarResolverSession} in this
session.
*
- * @param name The session object key.
- * @param value The session object.
+ * @param c The bean type being added.
+ * @param value The bean being added.
* @return This object (for method chaining).
*/
- public SerializerSession varSessionObject(String name, Object value) {
- getVarResolver().sessionObject(name, value);
+ public <T> SerializerSession addVarBean(Class<T> c, T value) {
+ getVarResolver().bean(c, value);
return this;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
index bf3d01c..e43c90a 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -13,8 +13,8 @@
package org.apache.juneau.svl;
import java.io.*;
-import java.util.*;
+import org.apache.juneau.cp.*;
import org.apache.juneau.svl.vars.*;
/**
@@ -101,8 +101,8 @@ public class VarResolver {
* @param vars The var classes
* @param contextObjects
*/
- VarResolver(Var[] vars, Map<String,Object> contextObjects) {
- this.ctx = new VarResolverContext(vars, contextObjects);
+ VarResolver(Var[] vars, BeanFactory beanFactory) {
+ this.ctx = new VarResolverContext(vars, beanFactory);
}
/**
@@ -113,7 +113,7 @@ public class VarResolver {
public VarResolverBuilder builder() {
return new VarResolverBuilder()
.vars(ctx.getVars())
- .contextObjects(ctx.getContextObjects());
+ .beanFactory(ctx.beanFactory);
}
/**
@@ -128,10 +128,6 @@ public class VarResolver {
/**
* Creates a new resolver session with no session objects.
*
- * <p>
- * Session objects can be associated with the specified session using
the {@link VarResolverSession#sessionObject(String, Object)}
- * method.
- *
* @return A new resolver session.
*/
public VarResolverSession createSession() {
@@ -139,13 +135,13 @@ public class VarResolver {
}
/**
- * Same as {@link #createSession()} except allows you to specify
session objects as a map.
+ * Same as {@link #createSession()} except allows you to specify a bean
factory for resolving beans.
*
- * @param sessionObjects The session objects to associate with the
session.
+ * @param beanFactory The bean factory to associate with this session.
* @return A new resolver session.
*/
- public VarResolverSession createSession(Map<String,Object>
sessionObjects) {
- return new VarResolverSession(ctx, sessionObjects);
+ public VarResolverSession createSession(BeanFactory beanFactory) {
+ return new VarResolverSession(ctx, beanFactory);
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
index 0f1fba6..bdf13fa 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.ClassUtils.*;
import java.util.*;
import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.*;
import org.apache.juneau.svl.vars.*;
/**
@@ -29,7 +30,7 @@ import org.apache.juneau.svl.vars.*;
public class VarResolverBuilder {
private final List<Var> vars = AList.create();
- private final Map<String,Object> contextObjects = new HashMap<>();
+ private BeanFactory beanFactory = new BeanFactory();
/**
* Create a new var resolver using the settings in this builder.
@@ -37,7 +38,7 @@ public class VarResolverBuilder {
* @return A new var resolver.
*/
public VarResolver build() {
- return new VarResolver(vars.toArray(new Var[vars.size()]),
contextObjects);
+ return new VarResolver(vars.toArray(new Var[vars.size()]),
beanFactory);
}
/**
@@ -126,33 +127,26 @@ public class VarResolverBuilder {
}
/**
- * Associates a context object with this resolver.
+ * Associates a bean factory with this builder.
*
- * <p>
- * A context object is essentially some environmental object that
doesn't change but is used by vars to customize
- * output.
- *
- * @param name The name of the context object.
- * @param object The context object.
+ * @param value The bean factory to associate with this var resolver.
* @return This object (for method chaining).
*/
- public VarResolverBuilder contextObject(String name, Object object) {
- contextObjects.put(name, object);
+ public VarResolverBuilder beanFactory(BeanFactory value) {
+ this.beanFactory = BeanFactory.of(value);
return this;
}
/**
- * Associates multiple context objects with this resolver.
- *
- * <p>
- * A context object is essentially some environmental object that
doesn't change but is used by vars to customize
- * output.
+ * Adds a bean to the bean factory in this session.
*
- * @param map A map of context objects keyed by their name.
+ * @param <T> The bean type.
+ * @param c The bean type.
+ * @param value The bean.
* @return This object (for method chaining).
*/
- public VarResolverBuilder contextObjects(Map<String,Object> map) {
- contextObjects.putAll(map);
+ public <T> VarResolverBuilder bean(Class<T> c, T value) {
+ beanFactory.addBean(c, value);
return this;
}
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
index 97cb057..0645a37 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
@@ -16,6 +16,7 @@ import java.util.*;
import java.util.concurrent.*;
import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.*;
/**
* Configurable properties on the {@link VarResolver} class.
@@ -31,15 +32,15 @@ public class VarResolverContext {
private final Var[] vars;
private final Map<String,Var> varMap;
- private final Map<String,Object> contextObjects;
+ final BeanFactory beanFactory;
/**
* Constructor.
*
* @param vars The Var classes used for resolving string variables.
- * @param contextObjects Read-only context objects.
+ * @param beanFactory Used to resolve beans needed by individual vars.
*/
- public VarResolverContext(Var[] vars, Map<String,Object>
contextObjects) {
+ public VarResolverContext(Var[] vars, BeanFactory beanFactory) {
this.vars = vars;
@@ -48,7 +49,7 @@ public class VarResolverContext {
m.put(v.getName(), v);
this.varMap = AMap.unmodifiable(m);
- this.contextObjects = AMap.unmodifiable(contextObjects);
+ this.beanFactory = BeanFactory.of(beanFactory);
}
/**
@@ -70,21 +71,15 @@ public class VarResolverContext {
}
/**
- * Returns the context object with the specified name.
+ * Adds a bean to this session.
*
- * @param name The name of the context object.
- * @return The context object, or <jk>null</jk> if no context object is
specified with that name.
+ * @param <T> The bean type.
+ * @param c The bean type.
+ * @param value The bean.
+ * @return This object (for method chaining).
*/
- protected Object getContextObject(String name) {
- return contextObjects == null ? null : contextObjects.get(name);
- }
-
- /**
- * Returns the context map of this variable resolver context.
- *
- * @return An unmodifiable map of the context objects of this variable
resolver context.
- */
- protected Map<String,Object> getContextObjects() {
- return contextObjects;
+ public <T> VarResolverContext addBean(Class<T> c, T value) {
+ beanFactory.addBean(c, value);
+ return this;
}
}
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 2af9030..e3e6e77 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
@@ -18,6 +18,7 @@ import java.io.*;
import java.lang.reflect.*;
import java.util.*;
+import org.apache.juneau.cp.*;
import org.apache.juneau.internal.*;
/**
@@ -31,7 +32,7 @@ import org.apache.juneau.internal.*;
*
* <p>
* Instances of this class are created through the {@link
VarResolver#createSession()} and
- * {@link VarResolver#createSession(Map)} methods.
+ * {@link VarResolver#createSession(BeanFactory)} methods.
*
* <p>
* Instances of this class are NOT guaranteed to be thread safe.
@@ -43,7 +44,7 @@ import org.apache.juneau.internal.*;
public class VarResolverSession {
private final VarResolverContext context;
- private final Map<String,Object> sessionObjects;
+ private final BeanFactory beanFactory;
/**
* Constructor.
@@ -51,27 +52,12 @@ public class VarResolverSession {
* @param context
* The {@link VarResolver} context object that contains the {@link
Var Vars} and context objects associated with
* that resolver.
- * @param sessionObjects The session objects.
+ * @param beanFactory The bean factory to use for resolving beans
needed by vars.
*
*/
- public VarResolverSession(VarResolverContext context,
Map<String,Object> sessionObjects) {
+ public VarResolverSession(VarResolverContext context, BeanFactory
beanFactory) {
this.context = context;
- if (sessionObjects != null)
- this.sessionObjects = sessionObjects;
- else
- this.sessionObjects = new HashMap<>();
- }
-
- /**
- * Adds a session object to this session.
- *
- * @param name The name of the session object.
- * @param o The session object.
- * @return This method (for method chaining).
- */
- public VarResolverSession sessionObject(String name, Object o) {
- sessionObjects.put(name, o);
- return this;
+ this.beanFactory = BeanFactory.of(beanFactory, null);
}
/**
@@ -380,49 +366,21 @@ public class VarResolverSession {
;
/**
- * Returns the session object with the specified name.
+ * Returns the bean from the registered bean factory.
*
- * <p>
- * Casts it to the specified class type for you.
- *
- * @param c The class type to cast to.
- * @param name The name of the session object.
- * @param throwNotSetException Throw a {@link VarResolverException} if
the session object is not set.
+ * @param c The bean type.
* @return
- * The session object.
+ * The bean.
* <br>Never <jk>null</jk>.
- * @throws VarResolverException If session object with specified name
does not exist.
*/
- @SuppressWarnings("unchecked")
- public <T> T getSessionObject(Class<T> c, String name, boolean
throwNotSetException) {
- T t = null;
- try {
- t = (T)sessionObjects.get(name);
- if (t == null) {
- sessionObjects.put(name,
this.context.getContextObject(name));
- t = (T)sessionObjects.get(name);
- }
- } catch (Exception e) {
- throw new VarResolverException(e,
- "Session object ''{0}'' or context object
''SvlContext.{0}'' could not be converted to type ''{1}''.", name, c);
- }
- if (t == null && throwNotSetException)
- throw new VarResolverException(
- "Session object ''{0}'' or context object
''SvlContext.{0}'' not found.", name);
+ public <T> Optional<T> getBean(Class<T> c) {
+ Optional<T> t = beanFactory.getBean(c);
+ if (! t.isPresent())
+ t = context.beanFactory.getBean(c);
return t;
}
/**
- * 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>).
@@ -446,8 +404,21 @@ public class VarResolverSession {
return out;
}
+ /**
+ * Adds a bean to this session.
+ *
+ * @param <T> The bean type.
+ * @param c The bean type.
+ * @param value The bean.
+ * @return This object (for method chaining).
+ */
+ public <T> VarResolverSession bean(Class<T> c, T value) {
+ beanFactory.addBean(c, value);
+ return this;
+ }
+
@Override /* Object */
public String toString() {
- return "var=" + this.context.getVarMap().keySet() + ",
contextObjects=" + this.context.getContextObjects().keySet() + ",
sessionObjects=" + this.sessionObjects.keySet();
+ return "var=" + this.context.getVarMap().keySet() + ",
context.beanFactory=" + this.context.beanFactory + ", session.beanFactory=" +
beanFactory;
}
}
diff --git
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
index dff54ec..0134a75 100755
---
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
+++
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -31,7 +31,6 @@ import org.apache.juneau.collections.*;
import org.apache.juneau.config.*;
import org.apache.juneau.config.event.*;
import org.apache.juneau.config.store.*;
-import org.apache.juneau.config.vars.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.microservice.console.*;
import org.apache.juneau.microservice.resources.*;
@@ -226,7 +225,7 @@ public class Microservice implements ConfigEventListener {
// Var resolver.
//-------------------------------------------------------------------------------------------------------------
VarResolverBuilder varResolverBuilder =
builder.varResolverBuilder;
- this.varResolver =
varResolverBuilder.contextObject(ConfigVar.SESSION_config, config).build();
+ this.varResolver = varResolverBuilder.bean(Config.class,
config).build();
//
--------------------------------------------------------------------------------
// Initialize console commands.
@@ -601,7 +600,7 @@ public class Microservice implements ConfigEventListener {
* Variables can be controlled by the following methods:
* <ul class='javatree'>
* <li class='jm'>{@link MicroserviceBuilder#vars(Class...)}
- * <li class='jm'>{@link MicroserviceBuilder#varContext(String,
Object)}
+ * <li class='jm'>{@link MicroserviceBuilder#varBean(Class,Object)}
* </ul>
*
* @return The VarResolver used by this Microservice, or <jk>null</jk>
if it was never created.
diff --git
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java
index ca073e5..f14cba6 100644
---
a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java
+++
b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/MicroserviceBuilder.java
@@ -369,18 +369,19 @@ public class MicroserviceBuilder {
}
/**
- * Adds a var resolver context object for vars defined in the
configuration and var resolver.
+ * Adds a bean for vars defined in the var resolver.
*
* <p>
- * This calls {@link VarResolverBuilder#contextObject(String,Object)}
on the var resolver used to construct the configuration
+ * This calls {@link VarResolverBuilder#bean(Class,Object)} on the var
resolver used to construct the configuration
* object returned by {@link Microservice#getConfig()} and the var
resolver returned by {@link Microservice#getVarResolver()}.
*
- * @param name The context object name.
- * @param object The context object.
+ * @param c The bean type.
+ * @param value The bean.
+ * @param <T> The bean type.
* @return This object (for method chaining).
*/
- public MicroserviceBuilder varContext(String name, Object object) {
- varResolverBuilder.contextObject(name, object);
+ public <T> MicroserviceBuilder varBean(Class<T> c, T value) {
+ varResolverBuilder.bean(c, value);
return this;
}
diff --git
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroserviceBuilder.java
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroserviceBuilder.java
index 502a7ef..57071a4 100644
---
a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroserviceBuilder.java
+++
b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroserviceBuilder.java
@@ -336,8 +336,8 @@ public class JettyMicroserviceBuilder extends
MicroserviceBuilder {
}
@Override /* MicroserviceBuilder */
- public JettyMicroserviceBuilder varContext(String name, Object object) {
- super.varContext(name, object);
+ public <T> JettyMicroserviceBuilder varBean(Class<T> c, T value) {
+ super.varBean(c, value);
return this;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index ef53109..cbe8a26 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -4609,7 +4609,7 @@ public class RestContext extends BeanContext {
if (x == null)
x = builder.varResolverBuilder
.vars(createVars(resource,beanFactory))
- .contextObject("messages", getMessages())
+ .bean(Messages.class, getMessages())
.build();
x = BeanFactory
@@ -6268,22 +6268,6 @@ public class RestContext extends BeanContext {
}
/**
- * Returns the session objects for the specified request.
- *
- * <p>
- * The default implementation simply returns a single map containing
<c>{'req':req,'res',res}</c>.
- *
- * @param call The current REST call.
- * @return The session objects for that request.
- */
- public Map<String,Object> getSessionObjects(RestCall call) {
- Map<String,Object> m = new HashMap<>();
- m.put("req", call.getRequest());
- m.put("res", call.getResponse());
- return m;
- }
-
- /**
* Called at the start of a request to invoke all {@link
HookEvent#START_CALL} methods.
*
* @param call The current request.
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 d445b93..06bd2f4 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
@@ -149,7 +149,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
.defaultVars()
.vars(ConfigVar.class)
.vars(FileVar.class)
- .contextObject("crm",
FileFinder.create().cp(resourceClass,null,true).build());
+ .bean(FileFinder.class,
FileFinder.create().cp(resourceClass,null,true).build());
VarResolver vr = varResolverBuilder.build();
beanFactory.addBean(VarResolver.class, vr);
@@ -159,7 +159,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
beanFactory.addBean(Config.class, config);
// Add our config file to the variable resolver.
-
varResolverBuilder.contextObject(ConfigVar.SESSION_config, config);
+ varResolverBuilder.bean(Config.class, config);
vr = varResolverBuilder.build();
beanFactory.addBean(VarResolver.class, vr);
@@ -313,20 +313,20 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
* information.
*
* <p>
- * For example, the {@link ConfigVar} needs access to this resource's
{@link Config} through the
- * {@link ConfigVar#SESSION_config} object that can be specified as
either a session object (temporary) or
- * context object (permanent).
+ * For example, the {@link ConfigVar} needs access to this resource's
{@link Config} object
+ *
* In this case, we call the following code to add it to the context
map:
* <p class='bcode w800'>
- * config.addVarContextObject(<jsf>SESSION_config</jsf>,
configFile);
+ * config.varBean(Config.<jk>class</jk>, configFile);
* </p>
*
- * @param name The context object key (i.e. the name that the Var class
looks for).
- * @param object The context object.
+ * @param beanType The bean type being added.
+ * @param bean The bean being added.
+ * @param <T> The bean type being added.
* @return This object (for method chaining).
*/
- public RestContextBuilder varContextObject(String name, Object object) {
- this.varResolverBuilder.contextObject(name, object);
+ public <T> RestContextBuilder varBean(Class<T> beanType, T bean) {
+ this.varResolverBuilder.bean(beanType, bean);
return this;
}
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 a57401c..6171b10 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
@@ -1192,9 +1192,10 @@ public final class RestRequest extends
HttpServletRequestWrapper {
if (varSession == null)
varSession = context
.getVarResolver()
- .createSession(context.getSessionObjects(call))
- .sessionObject("req", this)
- .sessionObject("res", res);
+ .createSession(call.getBeanFactory())
+ .bean(RestRequest.class, this)
+ .bean(RestResponse.class, res)
+ .bean(RestCall.class, call);
return varSession;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
index d79f52c..d5723c8 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerProvider.java
@@ -83,7 +83,7 @@ public class SwaggerProvider {
Class<?> c = context.getResourceClass();
FileFinder ff = fileFinder != null ? fileFinder :
FileFinder.create().cp(c,null,false).build();
Messages mb = messages != null ? messages.forLocale(locale) :
Messages.create(c).build().forLocale(locale);
- VarResolverSession vrs =
vr.createSession().sessionObject("messages", mb);
+ VarResolverSession vrs =
vr.createSession().bean(Messages.class, mb);
SwaggerProviderSession session = new
SwaggerProviderSession(context, locale, ff, messages, vrs, js.createSession());
return session.getSwagger();
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 9260a67..2f0c4d6 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
@@ -12,6 +12,7 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -47,14 +48,15 @@ import org.apache.juneau.svl.*;
* Files of type HTML, XHTML, XML, JSON, Javascript, and CSS will be stripped
of comments.
* This allows you to place license headers in files without them being
serialized to the output.
*
+ * <p>
+ * This variable resolver requires that a {@link RestRequest} bean be
available in the session bean factory.
+ *
* <ul class='seealso'>
* <li class='link'>{@doc SvlVariables}
* </ul>
*/
public class FileVar extends DefaultingVar {
- private static final String SESSION_req = "req";
-
/**
* The name of this variable.
*/
@@ -70,25 +72,21 @@ public class FileVar extends DefaultingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) throws
Exception {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, false);
- if (req != null) {
-
- String s =
req.getFileFinder().getString(key).orElse(null);
- if (s == null)
- return null;
- String subType = FileUtils.getExtension(key);
- if ("html".equals(subType) || "xhtml".equals(subType)
|| "xml".equals(subType))
- s = s.replaceAll("(?s)<!--(.*?)-->\\s*", "");
- else if ("json".equals(subType) ||
"javascript".equals(subType) || "css".equals(subType))
- s = s.replaceAll("(?s)\\/\\*(.*?)\\*\\/\\s*",
"");
- return s;
- }
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
- return null;
+ String s = req.getFileFinder().getString(key).orElse(null);
+ if (s == null)
+ return null;
+ String subType = FileUtils.getExtension(key);
+ if ("html".equals(subType) || "xhtml".equals(subType) ||
"xml".equals(subType))
+ s = s.replaceAll("(?s)<!--(.*?)-->\\s*", "");
+ else if ("json".equals(subType) || "javascript".equals(subType)
|| "css".equals(subType))
+ s = s.replaceAll("(?s)\\/\\*(.*?)\\*\\/\\s*", "");
+ return s;
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 7c0688d..8341477 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
@@ -15,6 +15,7 @@ package org.apache.juneau.rest.vars;
import java.util.*;
import org.apache.juneau.cp.*;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -25,8 +26,7 @@ import org.apache.juneau.svl.*;
* The format for this var is <js>"$L{key[,args...]}"</js>.
*
* <p>
- * This variable resolver requires that a {@link RestRequest} object be set as
a context object on the resolver or a
- * session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean be
available in the session bean factory.
*
* <p>
* Values are pulled from the {@link RestRequest#getMessage(String,Object[])}
method.
@@ -42,9 +42,6 @@ import org.apache.juneau.svl.*;
*/
public class LocalizationVar extends MultipartVar {
- private static final String SESSION_messages = "messages";
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "L";
@@ -60,9 +57,11 @@ public class LocalizationVar extends MultipartVar {
if (args.length > 0) {
String key = args[0];
String[] a = (args.length > 1) ?
Arrays.copyOfRange(args, 1, args.length) : new String[0];
- Messages messages =
session.getSessionObject(Messages.class, SESSION_messages, false);
+ Messages messages = null;
+ if (session.getBean(RestRequest.class).isPresent())
+ messages =
session.getBean(RestRequest.class).get().getMessages();
if (messages == null)
- messages =
session.getSessionObject(RestRequest.class, SESSION_req, true).getMessages();
+ messages =
session.getBean(Messages.class).orElseThrow(InternalServerError::new);
return messages.getString(key, (Object[])a);
}
return "";
@@ -70,6 +69,6 @@ public class LocalizationVar extends MultipartVar {
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_messages) ||
session.hasSessionObject(SESSION_req);
+ return session.getBean(Messages.class).isPresent() ||
session.getBean(RestRequest.class).isPresent();
}
}
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 2f7e31c..77a1317 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
@@ -16,6 +16,7 @@ import static org.apache.juneau.internal.StringUtils.*;
import javax.servlet.http.*;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -31,14 +32,13 @@ import org.apache.juneau.svl.*;
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * String foo = restRequest.resolveVars(<js>"$RA{foo}"</js>);
- * String fooOrBar = restRequest.resolveVars(<js>"$RA{foo,bar}"</js>);
+ * String <jv>foo</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RA{foo}"</js>);
+ * String <jv>fooOrBar</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RA{foo,bar}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -49,9 +49,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestAttributeVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
-
/** The name of this variable. */
public static final String NAME = "RA";
@@ -74,12 +71,12 @@ public class RequestAttributeVar extends
MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
return stringify(req.getAttribute(key));
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 3fee404..cb0c6f0 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
@@ -12,6 +12,8 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -27,14 +29,13 @@ import org.apache.juneau.svl.*;
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * String foo = restRequest.resolveVars(<js>"$RF{foo}"</js>);
- * String fooOrBar = restRequest.resolveVars(<js>"$RF{foo,bar}"</js>);
+ * String <jv>foo</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RF{foo}"</js>);
+ * String <jv>fooOrBar</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RF{foo,bar}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -45,8 +46,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestFormDataVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "RF";
@@ -69,12 +68,11 @@ public class RequestFormDataVar extends
MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
- return req.getFormData(key);
+ return
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getFormData(key);
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 6a58ffc..49bf226 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
@@ -12,6 +12,7 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -27,14 +28,13 @@ import org.apache.juneau.svl.*;
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * String foo = restRequest.resolveVars(<js>"$RH{Foo}"</js>);
- * String fooOrBar = restRequest.resolveVars(<js>"$RH{Foo,Bar}"</js>);
+ * String <jv>foo</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RH{foo}"</js>);
+ * String <jv>fooOrBar</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RH{foo,bar}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -45,8 +45,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestHeaderVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "RH";
@@ -69,12 +67,11 @@ public class RequestHeaderVar extends MultipartResolvingVar
{
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
- return req.getHeader(key);
+ return
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getHeader(key);
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 7b65578..2a35fc9 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
@@ -12,6 +12,7 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -28,14 +29,13 @@ import org.apache.juneau.svl.*;
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
* <jc>// URI path pattern = "/foo/{foo}/bar/{bar}"</jc>
- * String foo = restRequest.resolveVars(<js>"$RP{foo}"</js>);
- * String fooOrBar = restRequest.resolveVars(<js>"$RP{foo,bar}"</js>);
+ * String <jv>foo</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RP{foo}"</js>);
+ * String <jv>fooOrBar</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RP{foo,bar}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -46,8 +46,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestPathVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "RP";
@@ -70,7 +68,7 @@ public class RequestPathVar extends MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
if ("REMAINDER".equals(key))
return req.getPathRemainder();
return req.getPath(key);
@@ -78,6 +76,6 @@ public class RequestPathVar extends MultipartResolvingVar {
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 67915d8..0bf345a 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
@@ -12,6 +12,7 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -28,14 +29,13 @@ import org.apache.juneau.svl.*;
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
* <jc>// URI = "...?foo=X&bar=Y"</jc>
- * String foo = restRequest.resolveVars(<js>"$RQ{foo}"</js>);
- * String fooOrBar = restRequest.resolveVars(<js>"$RQ{foo,bar}"</js>);
+ * String <jv>foo</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RQ{foo}"</js>);
+ * String <jv>fooOrBar</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RHQ{foo,bar}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -46,8 +46,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestQueryVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "RQ";
@@ -70,12 +68,11 @@ public class RequestQueryVar extends MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
- return req.getQuery(key);
+ return
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getQuery(key);
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestSwaggerVar.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestSwaggerVar.java
index c5db98d..eabba46 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestSwaggerVar.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestSwaggerVar.java
@@ -52,14 +52,13 @@ import org.apache.juneau.svl.*;
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * String title = restRequest.resolveVars(<js>"$RI{title}"</js>);
- * String titleOrDescription =
restRequest.resolveVars(<js>"$RI{title,description}"</js>);
+ * String <jv>title</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RS{title}"</js>);
+ * String <jv>titleOrDescription</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$RS{title,description}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -70,8 +69,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestSwaggerVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "RS";
@@ -95,7 +92,7 @@ public class RequestSwaggerVar extends MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) throws
HttpException, InternalServerError {
try {
- RestRequest req =
session.getSessionObject(RestRequest.class, SESSION_req, true);
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
Optional<Swagger> swagger = req.getSwagger();
WriterSerializer s = SimpleJsonSerializer.DEFAULT;
Optional<Operation> methodSwagger =
req.getMethodSwagger();
@@ -139,6 +136,6 @@ public class RequestSwaggerVar extends
MultipartResolvingVar {
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 faed17a..c721e9c 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
@@ -14,6 +14,7 @@ package org.apache.juneau.rest.vars;
import org.apache.juneau.*;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -41,14 +42,12 @@ import org.apache.juneau.svl.*;
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
- * String resourceTitle =
restRequest.resolveVars(<js>"$R{resourceTitle}"</js>);
- * String resourceTitleOrDescription =
restRequest.resolveVars(<js>"$R{resourceTitle,resourceDescription}"</js>);
+ * String <jv>servletClass</jv> =
<jv>restRequest</jv>.getVarResolver().resolve(<js>"$R{servletClass}"</js>);
* </p>
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -59,10 +58,6 @@ import org.apache.juneau.svl.*;
*/
public class RequestVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
- private static final String SESSION_res = "res";
-
-
/** The name of this variable. */
public static final String NAME = "R";
@@ -85,7 +80,7 @@ public class RequestVar extends MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
char c = StringUtils.charAt(key, 0);
if (c == 'a') {
if ("authorityPath".equals(key))
@@ -121,6 +116,6 @@ public class RequestVar extends MultipartResolvingVar {
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req) &&
session.hasSessionObject(SESSION_res);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 8399774..f4ed05f 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
@@ -16,6 +16,7 @@ import static org.apache.juneau.internal.StringUtils.*;
import java.io.*;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.serializer.*;
import org.apache.juneau.svl.*;
@@ -27,8 +28,7 @@ import org.apache.juneau.svl.*;
* The format for this var is <js>"$SA{contentType,key[,defaultValue]}"</js>.
*
* <p>
- * This variable resolver requires that a {@link RestRequest} object be set as
a context object on the resolver or a
- * session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean be
available in the session bean factory.
*
* <p>
* Since this is a {@link SimpleVar}, any variables contained in the result
will be recursively resolved.
@@ -40,8 +40,6 @@ 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";
@@ -58,15 +56,13 @@ public class SerializedRequestAttrVar extends StreamedVar {
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,
SESSION_req, true);
- if (req != null) {
- Object o = req.getAttribute(key);
- if (o == null)
- o = key;
- Serializer s =
req.getSerializers().getSerializer(s2[0]);
- if (s != null)
- s.serialize(w, o);
- }
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
+ Object o = req.getAttribute(key);
+ if (o == null)
+ o = key;
+ Serializer s = req.getSerializers().getSerializer(s2[0]);
+ if (s != null)
+ s.serialize(w, o);
}
@Override /* Var */
@@ -81,6 +77,6 @@ public class SerializedRequestAttrVar extends StreamedVar {
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
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 c9a4d26..93ad803 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
@@ -12,6 +12,7 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -22,8 +23,7 @@ import org.apache.juneau.svl.*;
* The format for this var is <js>"$I{key[,defaultValue]}"</js>.
*
* <p>
- * This variable resolver requires that a {@link RestRequest} object be set as
a context object on the resolver or a
- * session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean be
available in the session bean factory.
*
* <p>
* Values are pulled from the {@link RestServlet#getInitParameter(String)}
method.
@@ -38,8 +38,6 @@ 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";
@@ -52,11 +50,11 @@ public class ServletInitParamVar extends DefaultingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- return session.getSessionObject(RestRequest.class, SESSION_req,
true).getContext().getServletInitParameter(key);
+ return
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getContext().getServletInitParameter(key);
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
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 ee984fb..4740cde 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
@@ -12,6 +12,7 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.vars;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.utils.*;
@@ -33,8 +34,7 @@ import org.apache.juneau.utils.*;
*
* <ul class='notes'>
* <li>
- * This variable resolver requires that a {@link RestRequest}
object be set as a context object on the resolver
- * or a session object on the resolver session.
+ * This variable resolver requires that a {@link RestRequest} bean
be available in the session bean factory.
* <li>
* For security reasons, nested and recursive variables are not
resolved.
* </ul>
@@ -45,8 +45,6 @@ import org.apache.juneau.utils.*;
*/
public class SwaggerVar extends MultipartResolvingVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "SS";
@@ -69,12 +67,12 @@ public class SwaggerVar extends MultipartResolvingVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
+ RestRequest req =
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
return new PojoRest(req.getSwagger()).getString(key);
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ No newline at end of file
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 7240bdf..7d38be1 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
@@ -13,6 +13,7 @@
package org.apache.juneau.rest.vars;
import org.apache.juneau.*;
+import org.apache.juneau.http.exception.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
@@ -30,6 +31,9 @@ import org.apache.juneau.svl.*;
* See {@link UriResolver} for the kinds of URIs that can be resolved.
*
* <p>
+ * This variable resolver requires that a {@link RestRequest} bean be
available in the session bean factory.
+ *
+ * <p>
* Uses the URI resolver returned by {@link RestRequest#getUriResolver()}.
*
* <ul class='seealso'>
@@ -38,8 +42,6 @@ import org.apache.juneau.svl.*;
*/
public class UrlVar extends SimpleVar {
- private static final String SESSION_req = "req";
-
/** The name of this variable. */
public static final String NAME = "U";
@@ -52,12 +54,11 @@ public class UrlVar extends SimpleVar {
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
- RestRequest req = session.getSessionObject(RestRequest.class,
SESSION_req, true);
- return req.getUriResolver().resolve(key);
+ return
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getUriResolver().resolve(key);
}
@Override /* Var */
public boolean canResolve(VarResolverSession session) {
- return session.hasSessionObject(SESSION_req);
+ return session.getBean(RestRequest.class).isPresent();
}
}
\ 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 aad7722..65bfb51 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
@@ -18,6 +18,7 @@ import org.apache.juneau.rest.*;
import org.apache.juneau.svl.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.html.*;
+import org.apache.juneau.http.exception.*;
/**
* Defines an interface for resolvers of <js>"$W{...}"</js> string variables.
@@ -38,9 +39,6 @@ import org.apache.juneau.html.*;
*/
public abstract class Widget implements HtmlWidget {
- private static final String SESSION_req = "req";
- private static final String SESSION_res = "res";
-
/**
* The widget key.
*
@@ -61,11 +59,11 @@ public abstract class Widget implements HtmlWidget {
}
private RestRequest req(VarResolverSession session) {
- return session.getSessionObject(RestRequest.class, SESSION_req,
true);
+ return
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new);
}
private RestResponse res(VarResolverSession session) {
- return session.getSessionObject(RestResponse.class,
SESSION_res, true);
+ return
session.getBean(RestResponse.class).orElseThrow(InternalServerError::new);
}
@Override /* HtmlWidget */