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 <james.bog...@salesforce.com> 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 */