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 87d6b56 Context API refactoring.
87d6b56 is described below
commit 87d6b567c6752fcc8484679cf0eb7dd630ce0312
Author: JamesBognar <[email protected]>
AuthorDate: Sat Sep 11 09:43:23 2021 -0400
Context API refactoring.
---
.../apache/juneau/cp/BeanCreateMethodFinder.java | 10 +
.../src/main/java/org/apache/juneau/svl/Var.java | 2 +-
.../java/org/apache/juneau/svl/VarResolver.java | 253 ++++++++++++++++--
.../org/apache/juneau/svl/VarResolverBuilder.java | 170 ------------
.../org/apache/juneau/svl/VarResolverContext.java | 85 ------
.../org/apache/juneau/svl/VarResolverSession.java | 4 +-
.../apache/juneau/microservice/Microservice.java | 5 +-
.../juneau/microservice/MicroserviceBuilder.java | 8 +-
.../apache/juneau/rest/mock/MockRestClient.java | 2 +-
.../java/org/apache/juneau/rest/RestContext.java | 75 ++++--
.../org/apache/juneau/rest/RestContextBuilder.java | 295 ++++++++++++---------
.../java/org/apache/juneau/rest/RestServlet.java | 2 +-
.../org/apache/juneau/rest/annotation/Rest.java | 19 ++
.../juneau/rest/annotation/RestAnnotation.java | 8 +
.../java/org/apache/juneau/config/ConfigTest.java | 2 +-
.../java/org/apache/juneau/rest/Swagger_Test.java | 4 +-
.../rest/annotation/RestAnnotation_Test.java | 1 +
.../apache/juneau/rest/testutils/TestUtils.java | 2 +-
.../org/apache/juneau/svl/ResolvingOMapTest.java | 8 +-
.../java/org/apache/juneau/svl/vars/IfVarTest.java | 2 +-
.../org/apache/juneau/svl/vars/LenVarTest.java | 2 +-
.../apache/juneau/svl/vars/LowerCaseVarTest.java | 2 +-
.../apache/juneau/svl/vars/NotEmptyVarTest.java | 2 +-
.../juneau/svl/vars/PatternExtractVarTest.java | 2 +-
.../juneau/svl/vars/PatternMatchVarTest.java | 2 +-
.../juneau/svl/vars/PatternReplaceVarTest.java | 2 +-
.../apache/juneau/svl/vars/RestrictedVarsTest.java | 6 +-
.../apache/juneau/svl/vars/SubstringVarTest.java | 2 +-
.../org/apache/juneau/svl/vars/SwitchVarTest.java | 2 +-
.../juneau/svl/vars/SystemPropertiesVarTest.java | 2 +-
.../apache/juneau/svl/vars/UpperCaseVarTest.java | 2 +-
.../apache/juneau/utils/StringVarResolverTest.java | 12 +-
32 files changed, 531 insertions(+), 464 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
index d52596f..ee75c47 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreateMethodFinder.java
@@ -132,4 +132,14 @@ public class BeanCreateMethodFinder<T> {
return (T)method.invoke(resource, args);
return def.get();
}
+
+ /**
+ * Executes the matched method and returns the result as an optional.
+ *
+ * @return The object returned by the method invocation, or the default
value if method was not found, or {@link Optional#empty()}.
+ * @throws ExecutableException If method invocation threw an exception.
+ */
+ public Optional<T> execute() throws ExecutableException {
+ return Optional.ofNullable(run());
+ }
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
index 3c08ab4..b41de77 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/Var.java
@@ -32,7 +32,7 @@ import java.io.*;
*
* <p>
* Subclasses MUST implement a no-arg constructor so that class names can be
passed to the
- * {@link VarResolverBuilder#vars(Class...)} method.
+ * {@link VarResolver.Builder#vars(Class...)} method.
* <br><b>They must also be thread safe!</b>
*
* <p>
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 1f55dd4..bbdbab7 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
@@ -12,8 +12,13 @@
//
***************************************************************************************************************************
package org.apache.juneau.svl;
+import static org.apache.juneau.internal.ClassUtils.*;
+
import java.io.*;
+import java.util.*;
+import java.util.concurrent.*;
+import org.apache.juneau.collections.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.svl.vars.*;
@@ -25,7 +30,7 @@ import org.apache.juneau.svl.vars.*;
* <br>The variable key can contain anything, even nested variables that get
recursively resolved.
*
* <p>
- * Variables are defined through the {@link VarResolverBuilder#vars(Class[])}
method.
+ * Variables are defined through the {@link Builder#vars(Class[])} method.
*
* <p>
* The {@link Var} interface defines how variables are converted to values.
@@ -79,30 +84,35 @@ public class VarResolver {
* <li><c>$ST{arg,start[,end]}</c> - {@link SubstringVar}
* </ul>
*/
- public static final VarResolver DEFAULT = new
VarResolverBuilder().defaultVars().build();
+ public static final VarResolver DEFAULT =
create().defaultVars().build();
- final VarResolverContext ctx;
+ final Var[] vars;
+ private final Map<String,Var> varMap;
+ final BeanStore beanStore;
/**
- * Instantiates a new clean-slate {@link VarResolverBuilder} object.
- *
- * <p>
- * This is equivalent to simply calling <code><jk>new</jk>
VarResolverBuilder()</code>.
+ * Instantiates a new clean-slate {@link Builder} object.
*
- * @return A new {@link VarResolverBuilder} object.
+ * @return A new {@link Builder} object.
*/
- public static VarResolverBuilder create() {
- return new VarResolverBuilder();
+ public static Builder create() {
+ return new Builder();
}
/**
* Constructor.
*
- * @param vars The var classes
- * @param contextObjects
+ * @param builder The builder for this object.
*/
- VarResolver(Var[] vars, BeanStore beanStore) {
- this.ctx = new VarResolverContext(vars, beanStore);
+ protected VarResolver(Builder builder) {
+ this.vars = builder.vars.toArray(new Var[builder.vars.size()]);
+
+ Map<String,Var> m = new ConcurrentSkipListMap<>();
+ for (Var v : vars)
+ m.put(v.getName(), v);
+
+ this.varMap = AMap.unmodifiable(m);
+ this.beanStore = BeanStore.of(builder.beanStore);
}
/**
@@ -110,17 +120,216 @@ public class VarResolver {
*
* @return A new var resolver builder.
*/
- public VarResolverBuilder copy() {
- return new VarResolverBuilder(this);
+ public Builder copy() {
+ return new Builder(this);
+ }
+
+ /**
+ * Builder class for building instances of {@link VarResolver}.
+ */
+ public static class Builder {
+
+ final List<Var> vars;
+ BeanStore beanStore;
+ VarResolver impl;
+
+ /**
+ * Constructor.
+ */
+ protected Builder() {
+ vars = AList.create();
+ beanStore = BeanStore.create().build();
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyFrom The bean to copy from.
+ */
+ protected Builder(VarResolver copyFrom) {
+ vars = new ArrayList<>(Arrays.asList(copyFrom.vars));
+ beanStore = BeanStore.of(copyFrom.beanStore);
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param copyFrom The builder to copy from.
+ */
+ protected Builder(Builder copyFrom) {
+ vars = new ArrayList<>(copyFrom.vars);
+ beanStore = BeanStore.of(copyFrom.beanStore);
+ impl = copyFrom.impl;
+ }
+
+ /**
+ * Register new variables with this resolver.
+ *
+ * @param values
+ * The variable resolver classes.
+ * These classes must subclass from {@link Var} and have
no-arg constructors.
+ * @return This object .
+ */
+ public Builder vars(Class<?>...values) {
+ for (Class<?> v : values)
+ vars.add(castOrCreate(Var.class, v));
+ return this;
+ }
+
+ /**
+ * Register new variables with this resolver.
+ *
+ * @param values
+ * The variable resolver classes.
+ * These classes must subclass from {@link Var} and have
no-arg constructors.
+ * @return This object .
+ */
+ public Builder vars(Var...values) {
+ vars.addAll(Arrays.asList(values));
+ return this;
+ }
+
+ /**
+ * Register new variables with this resolver.
+ *
+ * @param values
+ * The variable resolver classes.
+ * These classes must subclass from {@link Var} and have
no-arg constructors.
+ * @return This object .
+ */
+ public Builder vars(VarList values) {
+ for (Object o : values)
+ vars.add(castOrCreate(Var.class, o));
+ return this;
+ }
+
+ /**
+ * Specify a pre-instantiated bean for the {@link #build()}
method to return.
+ *
+ * @param value The pre-instantiated bean.
+ * @return This object.
+ */
+ public Builder impl(VarResolver value) {
+ this.impl = value;
+ return this;
+ }
+
+ /**
+ * Adds the default variables to this builder.
+ *
+ * <p>
+ * The default variables are:
+ * <ul>
+ * <li>{@link SystemPropertiesVar}
+ * <li>{@link EnvVariablesVar}
+ * <li>{@link ArgsVar}
+ * <li>{@link ManifestFileVar}
+ * <li>{@link SwitchVar}
+ * <li>{@link IfVar}
+ * <li>{@link CoalesceVar}
+ * <li>{@link PatternMatchVar}
+ * <li>{@link PatternReplaceVar}
+ * <li>{@link PatternExtractVar}
+ * <li>{@link UpperCaseVar}
+ * <li>{@link LowerCaseVar}
+ * <li>{@link NotEmptyVar}
+ * <li>{@link LenVar}
+ * <li>{@link SubstringVar}
+ * </ul>
+ *
+ * @return This object .
+ */
+ public Builder defaultVars() {
+ return vars(
+ SystemPropertiesVar.class,
+ EnvVariablesVar.class,
+ ManifestFileVar.class,
+ ArgsVar.class,
+ SwitchVar.class,
+ IfVar.class,
+ CoalesceVar.class,
+ PatternMatchVar.class,
+ PatternReplaceVar.class,
+ PatternExtractVar.class,
+ UpperCaseVar.class,
+ LowerCaseVar.class,
+ NotEmptyVar.class,
+ LenVar.class,
+ SubstringVar.class);
+ }
+
+ /**
+ * Associates a bean store with this builder.
+ *
+ * @param value The bean store to associate with this var
resolver.
+ * @return This object .
+ */
+ public Builder beanStore(BeanStore value) {
+ this.beanStore = BeanStore.of(value);
+ return this;
+ }
+
+ /**
+ * Adds a bean to the bean store in this session.
+ *
+ * @param <T> The bean type.
+ * @param c The bean type.
+ * @param value The bean.
+ * @return This object .
+ */
+ public <T> Builder bean(Class<T> c, T value) {
+ beanStore.addBean(c, value);
+ return this;
+ }
+
+ /**
+ * Create a new var resolver using the settings in this builder.
+ *
+ * @return A new var resolver.
+ */
+ public VarResolver build() {
+ return impl != null ? impl : new VarResolver(this);
+ }
+
+ /**
+ * Creates a copy of this builder.
+ *
+ * @return A new copy of this builder.
+ */
+ public Builder copy() {
+ return new Builder(this);
+ }
+ }
+
+ /**
+ * Returns an unmodifiable map of {@link Var Vars} associated with this
context.
+ *
+ * @return A map whose keys are var names (e.g. <js>"S"</js>) and
values are {@link Var} instances.
+ */
+ protected Map<String,Var> getVarMap() {
+ return varMap;
+ }
+
+ /**
+ * Returns an array of variables define in this variable resolver
context.
+ *
+ * @return A new array containing the variables in this context.
+ */
+ protected Var[] getVars() {
+ return Arrays.copyOf(vars, vars.length);
}
/**
- * Returns the read-only properties on this variable resolver.
+ * Adds a bean to this session.
*
- * @return The read-only properties on this variable resolver.
+ * @param <T> The bean type.
+ * @param c The bean type.
+ * @param value The bean.
+ * @return This object .
*/
- public VarResolverContext getContext() {
- return ctx;
+ public <T> VarResolver addBean(Class<T> c, T value) {
+ beanStore.addBean(c, value);
+ return this;
}
/**
@@ -129,7 +338,7 @@ public class VarResolver {
* @return A new resolver session.
*/
public VarResolverSession createSession() {
- return new VarResolverSession(ctx, null);
+ return new VarResolverSession(this, null);
}
/**
@@ -139,7 +348,7 @@ public class VarResolver {
* @return A new resolver session.
*/
public VarResolverSession createSession(BeanStore beanStore) {
- return new VarResolverSession(ctx, beanStore);
+ return new VarResolverSession(this, beanStore);
}
/**
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
deleted file mode 100644
index 54ae243..0000000
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
+++ /dev/null
@@ -1,170 +0,0 @@
-//
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file *
-// * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance *
-// * with the License. You may obtain a copy of the License at
*
-// *
*
-// * http://www.apache.org/licenses/LICENSE-2.0
*
-// *
*
-// * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied. See the License for the *
-// * specific language governing permissions and limitations under the
License. *
-//
***************************************************************************************************************************
-package org.apache.juneau.svl;
-
-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.*;
-
-/**
- * Builder class for building instances of {@link VarResolver}.
- *
- * <ul class='seealso'>
- * <li class='link'>{@doc VarResolvers}
- * </ul>
- */
-public class VarResolverBuilder {
-
- private final List<Var> vars;
- private BeanStore beanStore;
-
- /**
- * Constructor.
- */
- public VarResolverBuilder() {
- vars = AList.create();
- beanStore = BeanStore.create().build();
- }
-
- /**
- * Copy constructor.
- *
- * @param copyFrom The bean to copy from.
- */
- public VarResolverBuilder(VarResolver copyFrom) {
- vars = new ArrayList<>(Arrays.asList(copyFrom.ctx.vars));
- beanStore = BeanStore.of(copyFrom.ctx.beanStore);
- }
-
- /**
- * Create a new var resolver using the settings in this builder.
- *
- * @return A new var resolver.
- */
- public VarResolver build() {
- return new VarResolver(vars.toArray(new Var[vars.size()]),
beanStore);
- }
-
- /**
- * Register new variables with this resolver.
- *
- * @param vars
- * The variable resolver classes.
- * These classes must subclass from {@link Var} and have no-arg
constructors.
- * @return This object (for method chaining).
- */
- public VarResolverBuilder vars(Class<?>...vars) {
- for (Class<?> v : vars)
- this.vars.add(castOrCreate(Var.class, v));
- return this;
- }
-
- /**
- * Register new variables with this resolver.
- *
- * @param vars
- * The variable resolver classes.
- * These classes must subclass from {@link Var} and have no-arg
constructors.
- * @return This object (for method chaining).
- */
- public VarResolverBuilder vars(Var...vars) {
- this.vars.addAll(Arrays.asList(vars));
- return this;
- }
-
- /**
- * Register new variables with this resolver.
- *
- * @param vars
- * The variable resolver classes.
- * These classes must subclass from {@link Var} and have no-arg
constructors.
- * @return This object (for method chaining).
- */
- public VarResolverBuilder vars(VarList vars) {
- for (Object o : vars)
- this.vars.add(castOrCreate(Var.class, o));
- return this;
- }
-
- /**
- * Adds the default variables to this builder.
- *
- * <p>
- * The default variables are:
- * <ul>
- * <li>{@link SystemPropertiesVar}
- * <li>{@link EnvVariablesVar}
- * <li>{@link ArgsVar}
- * <li>{@link ManifestFileVar}
- * <li>{@link SwitchVar}
- * <li>{@link IfVar}
- * <li>{@link CoalesceVar}
- * <li>{@link PatternMatchVar}
- * <li>{@link PatternReplaceVar}
- * <li>{@link PatternExtractVar}
- * <li>{@link UpperCaseVar}
- * <li>{@link LowerCaseVar}
- * <li>{@link NotEmptyVar}
- * <li>{@link LenVar}
- * <li>{@link SubstringVar}
- * </ul>
- *
- * @return This object (for method chaining).
- */
- public VarResolverBuilder defaultVars() {
- return vars(
- SystemPropertiesVar.class,
- EnvVariablesVar.class,
- ManifestFileVar.class,
- ArgsVar.class,
- SwitchVar.class,
- IfVar.class,
- CoalesceVar.class,
- PatternMatchVar.class,
- PatternReplaceVar.class,
- PatternExtractVar.class,
- UpperCaseVar.class,
- LowerCaseVar.class,
- NotEmptyVar.class,
- LenVar.class,
- SubstringVar.class);
- }
-
- /**
- * Associates a bean store with this builder.
- *
- * @param value The bean store to associate with this var resolver.
- * @return This object (for method chaining).
- */
- public VarResolverBuilder beanStore(BeanStore value) {
- this.beanStore = BeanStore.of(value);
- return this;
- }
-
- /**
- * Adds a bean to the bean store in this session.
- *
- * @param <T> The bean type.
- * @param c The bean type.
- * @param value The bean.
- * @return This object (for method chaining).
- */
- public <T> VarResolverBuilder bean(Class<T> c, T value) {
- beanStore.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
deleted file mode 100644
index 48d1e86..0000000
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++ /dev/null
@@ -1,85 +0,0 @@
-//
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file *
-// * distributed with this work for additional information regarding copyright
ownership. The ASF licenses this file *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance *
-// * with the License. You may obtain a copy of the License at
*
-// *
*
-// * http://www.apache.org/licenses/LICENSE-2.0
*
-// *
*
-// * Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied. See the License for the *
-// * specific language governing permissions and limitations under the
License. *
-//
***************************************************************************************************************************
-package org.apache.juneau.svl;
-
-import java.util.*;
-import java.util.concurrent.*;
-
-import org.apache.juneau.collections.*;
-import org.apache.juneau.cp.*;
-
-/**
- * Configurable properties on the {@link VarResolver} class.
- *
- * <p>
- * Used to associate {@link Var Vars} and context objects with {@link
VarResolver VarResolvers}.
- *
- * <ul class='seealso'>
- * <li class='link'>{@doc VarResolvers}
- * </ul>
- */
-public class VarResolverContext {
-
- final Var[] vars;
- private final Map<String,Var> varMap;
- final BeanStore beanStore;
-
- /**
- * Constructor.
- *
- * @param vars The Var classes used for resolving string variables.
- * @param beanStore Used to resolve beans needed by individual vars.
- */
- public VarResolverContext(Var[] vars, BeanStore beanStore) {
-
- this.vars = vars;
-
- Map<String,Var> m = new ConcurrentSkipListMap<>();
- for (Var v : vars)
- m.put(v.getName(), v);
-
- this.varMap = AMap.unmodifiable(m);
- this.beanStore = BeanStore.of(beanStore);
- }
-
- /**
- * Returns an unmodifiable map of {@link Var Vars} associated with this
context.
- *
- * @return A map whose keys are var names (e.g. <js>"S"</js>) and
values are {@link Var} instances.
- */
- protected Map<String,Var> getVarMap() {
- return varMap;
- }
-
- /**
- * Returns an array of variables define in this variable resolver
context.
- *
- * @return A new array containing the variables in this context.
- */
- protected Var[] getVars() {
- return Arrays.copyOf(vars, vars.length);
- }
-
- /**
- * 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> VarResolverContext addBean(Class<T> c, T value) {
- beanStore.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 6912579..3205647 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
@@ -44,7 +44,7 @@ import org.apache.juneau.internal.*;
*/
public class VarResolverSession {
- private final VarResolverContext context;
+ private final VarResolver context;
private final BeanStore beanStore;
/**
@@ -56,7 +56,7 @@ public class VarResolverSession {
* @param beanStore The bean store to use for resolving beans needed by
vars.
*
*/
- public VarResolverSession(VarResolverContext context, BeanStore
beanStore) {
+ public VarResolverSession(VarResolver context, BeanStore beanStore) {
this.context = context;
this.beanStore = BeanStore.of(beanStore);
}
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 cb928a5..abe770b 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
@@ -195,7 +195,7 @@ public class Microservice implements ConfigEventListener {
// Try to resolve the configuration if not specified.
//
--------------------------------------------------------------------------------
Config config = builder.config;
- ConfigBuilder configBuilder =
builder.configBuilder.varResolver(builder.varResolverBuilder.build()).store(ConfigMemoryStore.DEFAULT);
+ ConfigBuilder configBuilder =
builder.configBuilder.varResolver(builder.varResolver.build()).store(ConfigMemoryStore.DEFAULT);
if (config == null) {
ConfigStore store = builder.configStore;
ConfigFileStore cfs = workingDir == null ?
ConfigFileStore.DEFAULT :
ConfigFileStore.create().directory(workingDir).build();
@@ -225,8 +225,7 @@ public class Microservice implements ConfigEventListener {
//-------------------------------------------------------------------------------------------------------------
// Var resolver.
//-------------------------------------------------------------------------------------------------------------
- VarResolverBuilder varResolverBuilder =
builder.varResolverBuilder;
- this.varResolver = varResolverBuilder.bean(Config.class,
config).build();
+ this.varResolver = builder.varResolver.bean(Config.class,
config).build();
//
--------------------------------------------------------------------------------
// Initialize console commands.
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 ca5f255..5319a1a 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
@@ -48,7 +48,7 @@ public class MicroserviceBuilder {
ConfigBuilder configBuilder = Config.create();
Boolean consoleEnabled;
List<ConsoleCommand> consoleCommands = new ArrayList<>();
- VarResolverBuilder varResolverBuilder =
VarResolver.create().defaultVars().vars(ConfigVar.class);
+ VarResolver.Builder varResolver =
VarResolver.create().defaultVars().vars(ConfigVar.class);
Scanner consoleReader;
PrintWriter consoleWriter;
MicroserviceListener listener;
@@ -72,7 +72,7 @@ public class MicroserviceBuilder {
this.logConfig = copyFrom.logConfig == null ? null :
copyFrom.logConfig.copy();
this.consoleEnabled = copyFrom.consoleEnabled;
this.configBuilder = copyFrom.configBuilder;
- this.varResolverBuilder = copyFrom.varResolverBuilder;
+ this.varResolver = copyFrom.varResolver;
this.consoleReader = copyFrom.consoleReader;
this.consoleWriter = copyFrom.consoleWriter;
this.workingDir = copyFrom.workingDir;
@@ -367,7 +367,7 @@ public class MicroserviceBuilder {
*/
@SuppressWarnings("unchecked")
public MicroserviceBuilder vars(Class<? extends Var>...vars) {
- varResolverBuilder.vars(vars);
+ varResolver.vars(vars);
return this;
}
@@ -384,7 +384,7 @@ public class MicroserviceBuilder {
* @return This object (for method chaining).
*/
public <T> MicroserviceBuilder varBean(Class<T> c, T value) {
- varResolverBuilder.bean(c, value);
+ varResolver.bean(c, value);
return this;
}
diff --git
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index 240e6e6..ca9436f 100644
---
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -280,7 +280,7 @@ public class MockRestClient extends RestClient implements
HttpClientConnection {
boolean isClass = restBean instanceof Class;
Object o = isClass ?
((Class<?>)restBean).newInstance() : restBean;
RestContext rc = RestContext
- .create(null, null, null, o)
+ .create(o.getClass(), null, null)
.init(o)
.callLoggerDefault(BasicTestRestLogger.class)
.debugDefault(CONDITIONAL)
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 60be7c5..c29107e 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
@@ -103,6 +103,52 @@ public class RestContext extends Context {
return Collections.unmodifiableMap(REGISTRY);
}
+ /**
+ * Static create method.
+ *
+ * <p>
+ * This is the primary method for creating {@link RestContextBuilder}
objects.
+ *
+ * <p>
+ * The builder class can be subclassed by using the {@link
Rest#builder()} annotation.
+ * This can be useful when you want to perform any customizations on
the builder class, typically by overriding protected methods that create
+ * the various builders used in the created {@link RestContext}
object (which itself can be overridden via {@link
RestContextBuilder#contextClass(Class)}).
+ * The subclass must contain a public constructor that takes in the
same arguments passed in to this method.
+ *
+ * @param resourceClass
+ * The class annotated with <ja>@Rest</ja>.
+ * <br>Must not be <jk>null</jk>.
+ * @param parentContext
+ * The parent context if the REST bean was registered via {@link
Rest#children()}.
+ * <br>Can be <jk>null</jk> if the bean is a top-level resource.
+ * @param servletConfig
+ * The servlet config passed into the servlet by the servlet
container.
+ * <br>Can be <jk>null</jk> if not available.
+ * <br>If <jk>null</jk>, then some features (such as access to
servlet init params) will not be available.
+ *
+ * @return A new builder object.
+ * @throws ServletException Something bad happened.
+ */
+ public static RestContextBuilder create(Class<?> resourceClass,
RestContext parentContext, ServletConfig servletConfig) throws ServletException
{
+
+ Value<Class<? extends RestContextBuilder>> v =
Value.of(RestContextBuilder.class);
+ ClassInfo.of(resourceClass)
+ .getAnnotations(Rest.class)
+ .stream()
+ .filter(x -> x.builder() !=
RestContextBuilder.Null.class)
+ .forEach(x -> v.set(x.builder()));
+
+ if (v.get() == RestContextBuilder.class)
+ return new RestContextBuilder(resourceClass,
parentContext, servletConfig);
+
+ return BeanStore
+ .of(parentContext == null ? null :
parentContext.getRootBeanStore())
+ .addBean(Class.class, resourceClass)
+ .addBean(RestContext.class, parentContext)
+ .addBean(ServletConfig.class, servletConfig)
+ .createBean(v.get());
+ }
+
//-------------------------------------------------------------------------------------------------------------------
// Instance
//-------------------------------------------------------------------------------------------------------------------
@@ -181,27 +227,6 @@ public class RestContext extends Context {
final StaticFiles staticFilesDefault;
final FileFinder fileFinderDefault;
- /**
- * Constructor.
- *
- * @param parentContext
- * The parent context if the REST bean was registered via {@link
Rest#children()}.
- * <br>Can be <jk>null</jk> if the bean is a top-level resource.
- * @param servletConfig
- * The servlet config passed into the servlet by the servlet
container.
- * <br>Can be null if not available.,
- * @param resourceClass
- * The class annotated with <ja>@Rest</ja>.
- * <br>Can be <jk>null</jk> if the resource bean is provided.
- * @param resource
- * The resource bean.
- * <br>Can be <jk>null</jk> if not instantiated at the time of
this method call.
- * @return A new builder object.
- * @throws ServletException Something bad happened.
- */
- public static RestContextBuilder create(RestContext parentContext,
ServletConfig servletConfig, Class<?> resourceClass, Object resource) throws
ServletException {
- return new
RestContextBuilder(Optional.ofNullable(parentContext),
Optional.ofNullable(servletConfig), resource == null ? resourceClass :
resource.getClass(), Optional.ofNullable(resource));
- }
/**
* Constructor.
@@ -1377,7 +1402,7 @@ public class RestContext extends Context {
VarResolver x =
beanStore.getBean(VarResolver.class).orElse(null);
if (x == null)
- x = builder.varResolverBuilder
+ x = builder.varResolver
.vars(createVars(resource, builder, beanStore))
.bean(Messages.class, messages)
.build();
@@ -2047,7 +2072,7 @@ public class RestContext extends Context {
// Don't allow specifying yourself as a child.
Causes an infinite loop.
if (oc == builder.resourceClass)
continue;
- cb = RestContext.create(this, servletConfig,
oc, null);
+ cb = RestContext.create(oc, this,
servletConfig);
BeanStore bf = BeanStore.of(beanStore,
resource).addBean(RestContextBuilder.class, cb);
if (bf.getBean(oc).isPresent()) {
o =
(Supplier<?>)()->bf.getBean(oc).get(); // If we resolved via injection, always
get it this way.
@@ -2055,7 +2080,7 @@ public class RestContext extends Context {
o = bf.createBean(oc);
}
} else {
- cb = RestContext.create(this, servletConfig,
o.getClass(), o);
+ cb = RestContext.create(o.getClass(), this,
servletConfig);
}
if (path != null)
@@ -2387,8 +2412,6 @@ public class RestContext extends Context {
* </p>
*
* <ul class='seealso'>
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#vars(Class...)} - For adding custom
vars.
- * <li class='link'>{@doc RestSvlVariables}
* <li class='link'>{@doc RestSvlVariables}
* </ul>
*
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 0a634d1..42500b6 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
@@ -20,6 +20,7 @@ import static org.apache.juneau.parser.Parser.*;
import static org.apache.juneau.rest.HttpRuntimeException.*;
import static org.apache.juneau.serializer.Serializer.*;
import static java.util.Arrays.*;
+import static java.util.Optional.*;
import java.lang.annotation.*;
import java.lang.reflect.Method;
@@ -64,7 +65,7 @@ import org.apache.juneau.utils.*;
* Provides access to the following initialized resources:
* <ul>
* <li>{@link #getConfig()} - The external configuration for this resource.
- * <li>{@link #getVarResolverBuilder()} - The variable resolver for this
resource.
+ * <li>{@link #varResolver()} - The variable resolver for this resource.
* </ul>
*
* <p>
@@ -98,6 +99,16 @@ import org.apache.juneau.utils.*;
@FluentSetters(ignore={"set"})
public class RestContextBuilder extends ContextBuilder implements
ServletConfig {
+ /**
+ * Represents a <jk>null</jk> value for the {@link Rest#builder()}
annotation.
+ */
+ @SuppressWarnings("javadoc")
+ public static final class Null extends RestContextBuilder {
+ protected Null(Class<?> resourceClass, RestContext
parentContext, ServletConfig servletConfig) throws ServletException {
+ super(resourceClass, parentContext, servletConfig);
+ }
+ }
+
final ServletConfig inner;
final Class<?> resourceClass;
final RestContext parentContext;
@@ -113,7 +124,7 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
ServletContext servletContext;
Config config;
- VarResolverBuilder varResolverBuilder;
+ VarResolver.Builder varResolver;
String
allowedHeaderParams = env("RestContext.allowedHeaderParams",
"Accept,Content-Type"),
allowedMethodHeaders = env("RestContext.allowedMethodHeaders",
""),
@@ -217,44 +228,38 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
/**
* Constructor.
- *
+ * @param resourceClass The resource class.
* @param parentContext The parent context if this is a child of
another resource.
* @param servletConfig The servlet config if available.
- * @param resourceClass The resource class.
- * @param resource The resource object if available.
+ *
* @throws ServletException Initialization failed.
*/
- protected RestContextBuilder(Optional<RestContext> parentContext,
Optional<ServletConfig> servletConfig, Class<?> resourceClass, Optional<Object>
resource) throws ServletException {
+ protected RestContextBuilder(Class<?> resourceClass, RestContext
parentContext, ServletConfig servletConfig) throws ServletException {
try {
contextClass(RestContext.class);
this.resourceClass = resourceClass;
- this.inner = servletConfig.orElse(null);
- this.parentContext = parentContext.orElse(null);
+ this.inner = servletConfig;
+ this.parentContext = parentContext;
ClassInfo rci = ClassInfo.of(resourceClass);
// Pass-through default values.
- if (parentContext.isPresent()) {
- RestContext pc = parentContext.get();
- callLoggerDefault = pc.callLoggerDefault;
- debugDefault = pc.debugDefault;
- staticFilesDefault.value(pc.staticFilesDefault);
- fileFinderDefault.value(pc.fileFinderDefault);
+ if (parentContext != null) {
+ callLoggerDefault =
parentContext.callLoggerDefault;
+ debugDefault = parentContext.debugDefault;
+
staticFilesDefault.value(parentContext.staticFilesDefault);
+
fileFinderDefault.value(parentContext.fileFinderDefault);
}
- beanStore = createBeanStore(parentContext, resource);
+ beanStore = createBeanStore(resourceClass,
parentContext);
beanStore.addBean(RestContextBuilder.class, this);
- beanStore.addBean(ServletConfig.class,
servletConfig.orElse(this));
- beanStore.addBean(ServletContext.class,
servletConfig.orElse(this).getServletContext());
+ beanStore.addBean(ServletConfig.class,
ofNullable(servletConfig).orElse(this));
+ beanStore.addBean(ServletContext.class,
ofNullable(servletConfig).orElse(this).getServletContext());
- varResolverBuilder = new VarResolverBuilder()
- .defaultVars()
- .vars(ConfigVar.class)
- .vars(FileVar.class)
- .bean(FileFinder.class,
FileFinder.create().cp(resourceClass,null,true).build());
+ varResolver = createVarResolver(resourceClass,
beanStore);
- VarResolver vr = varResolverBuilder.build();
+ VarResolver vr = varResolver.build();
beanStore.addBean(VarResolver.class, vr);
// Find our config file. It's the last non-empty
@RestResource(config).
@@ -262,16 +267,15 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
beanStore.addBean(Config.class, config);
// Add our config file to the variable resolver.
- varResolverBuilder.bean(Config.class, config);
- vr = varResolverBuilder.build();
+ varResolver.bean(Config.class, config);
+ vr = varResolver.build();
beanStore.addBean(VarResolver.class, vr);
// Add the servlet init parameters to our properties.
- if (servletConfig.isPresent()) {
- ServletConfig sc = servletConfig.get();
- for (Enumeration<String> ep =
sc.getInitParameterNames(); ep.hasMoreElements();) {
+ if (servletConfig != null) {
+ for (Enumeration<String> ep =
servletConfig.getInitParameterNames(); ep.hasMoreElements();) {
String p = ep.nextElement();
- String initParam =
sc.getInitParameter(p);
+ String initParam =
servletConfig.getInitParameter(p);
set(vr.resolve(p),
vr.resolve(initParam));
}
}
@@ -300,27 +304,152 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
}
/**
+ * Returns access to the bean store being used by this builder.
+ *
+ * <p>
+ * Can be used to add more beans to the bean store.
+ *
+ * <p>
+ * The bean store is created by the constructor using the {@link
#createBeanStore(Class,RestContext)} method and is initialized with the
following beans:
+ * <ul>
+ * <li>{@link RestContextBuilder}
+ * <li>{@link ServletConfig}
+ * <li>{@link ServletContext}
+ * <li>{@link VarResolver}
+ * <li>{@link Config}
+ * </ul>
+ *
+ * @return The bean store being used by this builder.
+ */
+ protected BeanStore beanStore() {
+ return beanStore;
+ }
+
+ /**
* Creates the bean store for this builder.
*
+ * <p>
+ * Gets called in the constructor to create the bean store used for
finding other beans.
+ *
+ * <p>
+ * The bean store is created with the parent root bean store as the
parent, allowing any beans in the root bean store to be available
+ * in this builder. The root bean store typically pulls from an
injection framework such as Spring to allow injected beans to be used.
+ *
+ * The resource class can optionally define a <c><jk>public static</jk>
BeanStore <jsm>createBeanStore</jk>(...);</c> method to override
+ * the default bean store created by this method. The parameters can
be any beans available in the root bean store (such as any available
+ * Spring beans if the top level resource is an instance of
SpringRestServlet).
+ *
+ * @param resourceClass The resource class.
* @param parentContext The parent context if there is one.
- * @param resource The resource object if it's instantiated at this
time.
* @return A new bean store.
- * @throws Exception If bean store could not be instantiated.
*/
- protected BeanStore createBeanStore(Optional<RestContext>
parentContext, Optional<Object> resource) throws Exception {
- BeanStore x = null;
- if (resource.isPresent()) {
- Object r = resource.get();
- x = BeanStore
- .of(parentContext.isPresent() ?
parentContext.get().getRootBeanStore() : null, r)
- .beanCreateMethodFinder(BeanStore.class,
resource)
- .find("createBeanStore")
- .run();
+ protected BeanStore createBeanStore(Class<?> resourceClass, RestContext
parentContext) {
+
+ BeanStore x = BeanStore
+ .of(parentContext == null ? null :
parentContext.getRootBeanStore())
+ .beanCreateMethodFinder(BeanStore.class, resourceClass)
+ .find("createBeanStore")
+ .run();
+
+ if (x == null && parentContext != null)
+ x = parentContext.getRootBeanStore();
+
+ if (x == null)
+ x = BeanStore.create().build();
+
+ return x;
+ }
+
+ /**
+ * Returns access to the variable resolver builder.
+ *
+ * <p>
+ * Can be used to add more variables or context objects to the variable
resolver.
+ * These variables affect the variable resolver returned by {@link
RestRequest#getVarResolverSession()} which is
+ * used to resolve string variables of the form <js>"$X{...}"</js> in
various places such as annotations on the REST class and methods.
+ *
+ * <p>
+ * The var resolver is created by the constructor using the {@link
#createVarResolver(Class,BeanStore)} method and is initialized with the
following beans:
+ * <ul>
+ * <li>{@link ConfigVar}
+ * <li>{@link FileVar}
+ * <li>{@link SystemPropertiesVar}
+ * <li>{@link EnvVariablesVar}
+ * <li>{@link ArgsVar}
+ * <li>{@link ManifestFileVar}
+ * <li>{@link SwitchVar}
+ * <li>{@link IfVar}
+ * <li>{@link CoalesceVar}
+ * <li>{@link PatternMatchVar}
+ * <li>{@link PatternReplaceVar}
+ * <li>{@link PatternExtractVar}
+ * <li>{@link UpperCaseVar}
+ * <li>{@link LowerCaseVar}
+ * <li>{@link NotEmptyVar}
+ * <li>{@link LenVar}
+ * <li>{@link SubstringVar}
+ * </ul>
+ *
+ * @return The var resolver builder.
+ */
+ protected VarResolver.Builder varResolver() {
+ return varResolver;
+ }
+
+ /**
+ * Creates the var resolver builder.
+ *
+ * <p>
+ * Gets called in the constructor to create the var resolver for
performing variable resolution in strings.
+ *
+ * <p>
+ * Instantiates based on the following logic:
+ * <ol>
+ * <li>Looks for the following method on the resource class and
sets it as the implementation bean:
+ * <br><c><jk>public static</jk> VarResolver
createVarResolver(<any-bean-types-in-bean-store>) {}</c>
+ * <li>Looks for bean of type {@link
org.apache.juneau.svl.VarResolver} in bean store and sets it as the
implementation bean.
+ * <li>Looks for the following method on the resource class:
+ * <br><c><jk>public static</jk> VarResolver.Builder
createVarResolver(<any-bean-types-in-bean-store>) {}</c>
+ * <li>Looks for bean of type {@link
org.apache.juneau.svl.VarResolver.Builder} in bean store and returns a copy of
it.
+ * <li>Creates a default builder with default variables.
+ * </ol>
+ *
+ * @param resourceClass The resource class.
+ * @param beanStore The bean store containing injected beans.
+ * @return A new bean store.
+ */
+ protected VarResolver.Builder createVarResolver(Class<?> resourceClass,
BeanStore beanStore) {
+
+ VarResolver.Builder x = BeanStore
+ .of(beanStore)
+ .beanCreateMethodFinder(VarResolver.Builder.class,
resourceClass)
+ .find("createVarResolver")
+ .run();
+
+ if (x == null) {
+ x = beanStore.getBean(VarResolver.Builder.class).map(y
-> y.copy()).orElse(null);
}
- if (x == null && parentContext.isPresent()) {
- x = parentContext.get().getRootBeanStore();
+
+ if (x == null) {
+ x = VarResolver.create()
+ .defaultVars()
+ .vars(ConfigVar.class)
+ .vars(FileVar.class)
+ .bean(FileFinder.class,
FileFinder.create().cp(resourceClass,null,true).build());
}
- return BeanStore.of(x, resource.orElse(null));
+
+ VarResolver.Builder x2 = x;
+
+ beanStore.getBean(VarResolver.class).ifPresent(y -> x2.impl(y));
+
+ BeanStore
+ .of(beanStore)
+ .beanCreateMethodFinder(VarResolver.class,
resourceClass)
+ .find("createVarResolver")
+ .execute()
+ .ifPresent(y -> x2.impl(y));
+
+ return x2;
}
/**
@@ -371,9 +500,9 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
/**
* Performs initialization on this builder.
- *
+ *
* Calls all @RestHook(INIT) methods on the specified resource object.
- *
+ *
* @param resource The resource bean. Required.
* @return This object.
* @throws ServletException If hook method calls failed.
@@ -409,49 +538,6 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
}
/**
- * Adds the specified {@link Var} classes to this config.
- *
- * <p>
- * These variables affect the variable resolver returned by {@link
RestRequest#getVarResolverSession()} which is
- * used to resolve string variables of the form <js>"$X{...}"</js>.
- *
- * <p>
- * See {@link RestContext#getVarResolver()} for a list of predefined
variables.
- *
- * @param vars The {@link Var} classes to add to this config.
- * @return This object (for method chaining).
- */
- public RestContextBuilder vars(Class<?>...vars) {
- this.varResolverBuilder.vars(vars);
- return this;
- }
-
- /**
- * Adds a var context object to this config.
- *
- * <p>
- * Var context objects are read-only objects associated with the
variable resolver for vars that require external
- * information.
- *
- * <p>
- * 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.varBean(Config.<jk>class</jk>, configFile);
- * </p>
- *
- * @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 <T> RestContextBuilder varBean(Class<T> beanType, T bean) {
- this.varResolverBuilder.bean(beanType, bean);
- return this;
- }
-
- /**
* Overwrites the default config file with a custom config file.
*
* <p>
@@ -467,16 +553,6 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
return this;
}
- /**
- * Creates a new {@link ContextProperties} object initialized with the
properties defined in this config.
- *
- * @return A new property store.
- */
- protected ContextPropertiesBuilder createContextPropertiesBuilder() {
- return ContextProperties.create();
- }
-
-
//----------------------------------------------------------------------------------------------------
// Methods that give access to the config file, var resolver, and
properties.
//----------------------------------------------------------------------------------------------------
@@ -504,29 +580,6 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
}
/**
- * Creates the variable resolver for this resource.
- *
- * <p>
- * The variable resolver returned by this method can resolve the
following variables:
- * <ul>
- * <li>{@link SystemPropertiesVar}
- * <li>{@link EnvVariablesVar}
- * <li>{@link ConfigVar}
- * <li>{@link IfVar}
- * <li>{@link SwitchVar}
- * </ul>
- *
- * <p>
- * Note that the variables supported here are only a subset of those
returned by
- * {@link RestRequest#getVarResolverSession()}.
- *
- * @return The variable resolver for this resource. Never
<jk>null</jk>.
- */
- public VarResolverBuilder getVarResolverBuilder() {
- return varResolverBuilder;
- }
-
- /**
* Returns the serializer group builder containing the serializers for
marshalling POJOs into response bodies.
*
* <p>
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index 352c7f5..faaada2 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -55,7 +55,7 @@ public abstract class RestServlet extends HttpServlet {
if (context.get() != null)
return;
super.init(servletConfig);
- context.set(RestContext.create(null, servletConfig,
this.getClass(), this).init(this).build());
+ context.set(RestContext.create(this.getClass(), null,
servletConfig).init(this).build());
context.get().postInit();
context.get().postInitChildFirst();
} catch (ServletException e) {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index 55c3715..89c83cb 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -19,6 +19,8 @@ import java.lang.annotation.*;
import java.nio.charset.*;
import java.util.*;
+import javax.servlet.*;
+
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.config.*;
@@ -52,6 +54,23 @@ import org.apache.juneau.serializer.*;
public @interface Rest {
/**
+ * Override the builder class used for creating the {@link RestContext}
bean for this resource.
+ *
+ * <p>
+ * Can be used when you want to override any of the protected methods
in the {@link RestContextBuilder} to provide
+ * customized behavior.
+ *
+ * <p>
+ * The subclass must contain a public constructor that takes in the
following arguments that should be passed to the parent constructor:
+ * <ul>
+ * <li>{@link Class} - The resource class.
+ * <li>{@link RestContext} - The parent context if this is a child
of another resource. Can be <jk>null</jk..
+ * <li>{@link ServletConfig} - The servlet config passed in during
servlet initialization.
+ * </ul>
+ */
+ Class<? extends RestContextBuilder> builder() default
RestContextBuilder.Null.class;
+
+ /**
* Disable body URL parameter.
*
* <p>
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index da281c1..12c7225 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -77,6 +77,7 @@ public class RestAnnotation {
@SuppressWarnings("unchecked")
public static class Builder extends TargetedAnnotationTBuilder {
+ Class<? extends RestContextBuilder> builder =
RestContextBuilder.Null.class;
Class<? extends Encoder>[] encoders = new Class[0];
Class<? extends HttpPartParser> partParser =
HttpPartParser.Null.class;
Class<? extends HttpPartSerializer> partSerializer =
HttpPartSerializer.Null.class;
@@ -691,6 +692,7 @@ public class RestAnnotation {
private static class Impl extends TargetedAnnotationTImpl implements
Rest {
+ private final Class<? extends RestContextBuilder> builder;
private final Class<? extends Encoder>[] encoders;
private final Class<? extends HttpPartParser> partParser;
private final Class<? extends HttpPartSerializer>
partSerializer;
@@ -716,6 +718,7 @@ public class RestAnnotation {
Impl(Builder b) {
super(b);
+ this.builder = b.builder;
this.disableBodyParam = b.disableBodyParam;
this.allowedHeaderParams = b.allowedHeaderParams;
this.allowedMethodHeaders = b.allowedMethodHeaders;
@@ -770,6 +773,11 @@ public class RestAnnotation {
}
@Override /* Rest */
+ public Class<? extends RestContextBuilder> builder() {
+ return builder;
+ }
+
+ @Override /* Rest */
public String disableBodyParam() {
return disableBodyParam;
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
index 28bcca0..6cf9fe0 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/config/ConfigTest.java
@@ -1462,7 +1462,7 @@ public class ConfigTest {
cf.set("d", "$B{$A{X}}");
cf.set("e", "$D{X}");
- VarResolver vr = new
VarResolverBuilder().defaultVars().vars(ALVar.class, BLVar.class).build();
+ VarResolver vr =
VarResolver.create().defaultVars().vars(ALVar.class, BLVar.class).build();
cf = cf.resolving(vr.createSession());
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
index b238e37..9e7c82d 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java
@@ -45,7 +45,7 @@ public class Swagger_Test {
public void testMethod() {}
private org.apache.juneau.dto.swagger.Swagger getSwaggerWithFile(Object
resource) throws Exception {
- RestContext rc =
RestContext.create(null,null,null,resource).init(resource).fileFinder(TestClasspathFileFinder.class).build();
+ RestContext rc =
RestContext.create(resource.getClass(),null,null).init(resource).fileFinder(TestClasspathFileFinder.class).build();
RestOpContext roc =
RestOpContext.create(Swagger_Test.class.getMethod("testMethod"), rc).build();
RestRequest req = rc.createRequest(new RestCall(resource, rc,
new MockServletRequest(), new MockServletResponse()).restOpContext(roc));
SwaggerProvider ip = rc.getSwaggerProvider();
@@ -53,7 +53,7 @@ public class Swagger_Test {
}
private static org.apache.juneau.dto.swagger.Swagger getSwagger(Object
resource) throws Exception {
- RestContext rc =
RestContext.create(null,null,null,resource).init(resource).build();
+ RestContext rc =
RestContext.create(resource.getClass(),null,null).init(resource).build();
RestOpContext roc =
RestOpContext.create(Swagger_Test.class.getMethod("testMethod"), rc).build();
RestRequest req = rc.createRequest(new RestCall(resource, rc,
new MockServletRequest(), new MockServletResponse()).restOpContext(roc));
SwaggerProvider ip = rc.getSwaggerProvider();
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
index 0ed1e2c..69e3024 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestAnnotation_Test.java
@@ -154,6 +154,7 @@ public class RestAnnotation_Test {
+ "allowedMethodHeaders:'allowedMethodHeaders',"
+ "allowedMethodParams:'allowedMethodParams',"
+ "beanStore:'org.apache.juneau.cp.BeanStore',"
+ +
"builder:'org.apache.juneau.rest.RestContextBuilder$Null',"
+
"callLogger:'org.apache.juneau.rest.logging.BasicRestLogger',"
+ "children:['"+CNAME+"'],"
+ "clientVersionHeader:'clientVersionHeader',"
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/testutils/TestUtils.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/testutils/TestUtils.java
index 1cb6b2a..5fcd8e0 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/testutils/TestUtils.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/testutils/TestUtils.java
@@ -27,7 +27,7 @@ public class TestUtils extends
org.apache.juneau.testutils.TestUtils {
public static Swagger getSwagger(Class<?> c) {
try {
Object r = c.newInstance();
- RestContext rc =
RestContext.create(null,null,null,r).init(r).build();
+ RestContext rc =
RestContext.create(r.getClass(),null,null).init(r).build();
RestOpContext ctx =
RestOpContext.create(TestUtils.class.getMethod("getSwagger", Class.class),
rc).build();
RestRequest req = rc.createRequest(new RestCall(r, rc,
new MockServletRequest(), new MockServletResponse()).restOpContext(ctx));
SwaggerProvider ip = rc.getSwaggerProvider();
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/ResolvingOMapTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/ResolvingOMapTest.java
index 55d0641..8c873f7 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/svl/ResolvingOMapTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/svl/ResolvingOMapTest.java
@@ -27,7 +27,7 @@ public class ResolvingOMapTest {
//====================================================================================================
@Test
public void testBasic() throws Exception {
- VarResolver vr = new
VarResolverBuilder().defaultVars().vars(XVar.class).build();
+ VarResolver vr =
VarResolver.create().defaultVars().vars(XVar.class).build();
OMap m = new ResolvingOMap(vr.createSession());
m.put("foo", "$X{a}");
@@ -54,7 +54,7 @@ public class ResolvingOMapTest {
//====================================================================================================
@Test
public void testNulls() throws Exception {
- VarResolver vr = new
VarResolverBuilder().defaultVars().vars(XVar.class).build();
+ VarResolver vr =
VarResolver.create().defaultVars().vars(XVar.class).build();
OMap m = new ResolvingOMap(vr.createSession());
m.put("foo", null);
@@ -75,7 +75,7 @@ public class ResolvingOMapTest {
//====================================================================================================
@Test
public void testNonStrings() throws Exception {
- VarResolver vr = new
VarResolverBuilder().defaultVars().vars(XVar.class).build();
+ VarResolver vr =
VarResolver.create().defaultVars().vars(XVar.class).build();
OMap m = new ResolvingOMap(vr.createSession());
m.put("foo", FooEnum.ONE);
@@ -100,7 +100,7 @@ public class ResolvingOMapTest {
//====================================================================================================
@Test
public void testInner() throws Exception {
- VarResolver vr = new
VarResolverBuilder().defaultVars().vars(XVar.class).build();
+ VarResolver vr =
VarResolver.create().defaultVars().vars(XVar.class).build();
OMap m = new ResolvingOMap(vr.createSession());
OMap m2 = new OMap();
OMap m3 = new OMap();
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/IfVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/IfVarTest.java
index b18d720..182df96 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/IfVarTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/IfVarTest.java
@@ -26,7 +26,7 @@ public class IfVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new VarResolverBuilder().vars(IfVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(IfVar.class,
SystemPropertiesVar.class).build();
for (String test : new
String[]{"","0","false","FALSE","f","F","foobar"}) {
System.setProperty("IfVarTest.test", test);
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LenVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LenVarTest.java
index 17bc565..c6e4f52 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LenVarTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LenVarTest.java
@@ -26,7 +26,7 @@ public class LenVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new VarResolverBuilder().vars(LenVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(LenVar.class,
SystemPropertiesVar.class).build();
System.setProperty("LenVarTest.test", "foo bar");
System.setProperty("LenVarTest.test2", "1.2.3.4.5");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LowerCaseVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LowerCaseVarTest.java
index 7b211e2..609a285 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LowerCaseVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/LowerCaseVarTest.java
@@ -26,7 +26,7 @@ public class LowerCaseVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(LowerCaseVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(LowerCaseVar.class,
SystemPropertiesVar.class).build();
System.setProperty("LowerCaseVar.test", "fooBAR");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/NotEmptyVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/NotEmptyVarTest.java
index b0b2a00..968245e 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/NotEmptyVarTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/NotEmptyVarTest.java
@@ -26,7 +26,7 @@ public class NotEmptyVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(NotEmptyVar.class, SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(NotEmptyVar.class,
SystemPropertiesVar.class).build();
assertEquals("false", vr.resolve("$NE{}"));
assertEquals("false", vr.resolve("$NE{ }"));
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternExtractVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternExtractVarTest.java
index e5fa0c8..ffc5ffa 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternExtractVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternExtractVarTest.java
@@ -26,7 +26,7 @@ public class PatternExtractVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(PatternExtractVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(PatternExtractVar.class,
SystemPropertiesVar.class).build();
System.setProperty("PatternExtractVarTest.test", "foo bar");
System.setProperty("PatternExtractVarTest.test2", "size=23");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternMatchVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternMatchVarTest.java
index 87ddeb3..fb9c277 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternMatchVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternMatchVarTest.java
@@ -26,7 +26,7 @@ public class PatternMatchVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(PatternMatchVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(PatternMatchVar.class,
SystemPropertiesVar.class).build();
System.setProperty("PatternMatchVarTest.test", "foobar");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternReplaceVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternReplaceVarTest.java
index cfa437c..3775245 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternReplaceVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/PatternReplaceVarTest.java
@@ -26,7 +26,7 @@ public class PatternReplaceVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(PatternReplaceVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(PatternReplaceVar.class,
SystemPropertiesVar.class).build();
System.setProperty("PatternReplaceVarTest.test", "foo bar");
System.setProperty("PatternReplaceVarTest.test2",
"size=23;display=none;");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/RestrictedVarsTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/RestrictedVarsTest.java
index e051280..eed2cf3 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/RestrictedVarsTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/RestrictedVarsTest.java
@@ -25,7 +25,7 @@ public class RestrictedVarsTest {
@Test
public void testNoNest() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(NoNestVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(NoNestVar.class).build();
test(vr, "$NoNest{foo}", "foo");
test(vr, "$NoNest{$NoNest{foo}}", "$NoNest{foo}");
@@ -63,7 +63,7 @@ public class RestrictedVarsTest {
@Test
public void testNoRecurse() throws Exception {
- VarResolver vr = new VarResolverBuilder().vars(XVar.class,
NoRecurseVar.class).build();
+ VarResolver vr = VarResolver.create().vars(XVar.class,
NoRecurseVar.class).build();
test(vr, "$NoRecurse{foo}", "$X{foo}");
test(vr, "$NoRecurse{$NoRecurse{foo}}", "$X{$X{foo}}");
@@ -89,7 +89,7 @@ public class RestrictedVarsTest {
@Test
public void testNoNestOrRecurse() throws Exception {
- VarResolver vr = new VarResolverBuilder().vars(XVar.class,
NoEitherVar.class).build();
+ VarResolver vr = VarResolver.create().vars(XVar.class,
NoEitherVar.class).build();
test(vr, "$NoEither{foo}", "$X{foo}");
test(vr, "$NoEither{$NoEither{foo}}", "$X{$NoEither{foo}}");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SubstringVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SubstringVarTest.java
index ba368ed..49f0e83 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SubstringVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SubstringVarTest.java
@@ -26,7 +26,7 @@ public class SubstringVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(SubstringVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(SubstringVar.class,
SystemPropertiesVar.class).build();
System.setProperty("SubstringVarTest.test", "foo bar");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SwitchVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SwitchVarTest.java
index 2ae2ebf..ff62e61 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SwitchVarTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SwitchVarTest.java
@@ -26,7 +26,7 @@ public class SwitchVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new VarResolverBuilder().vars(SwitchVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(SwitchVar.class,
SystemPropertiesVar.class).build();
System.setProperty("SwitchVarTest.test", "foobar");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java
index af02878..aff12b6 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/SystemPropertiesVarTest.java
@@ -26,7 +26,7 @@ public class SystemPropertiesVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(SystemPropertiesVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(SystemPropertiesVar.class).build();
System.setProperty("SystemPropertiesVar.x", "foo");
assertEquals("foo", vr.resolve("$S{SystemPropertiesVar.x}"));
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/UpperCaseVarTest.java
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/UpperCaseVarTest.java
index 6ffb869..13ea61f 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/svl/vars/UpperCaseVarTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/svl/vars/UpperCaseVarTest.java
@@ -26,7 +26,7 @@ public class UpperCaseVarTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(UpperCaseVar.class,
SystemPropertiesVar.class).build();
+ VarResolver vr = VarResolver.create().vars(UpperCaseVar.class,
SystemPropertiesVar.class).build();
System.setProperty("UpperCaseVar.test", "fooBAR");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
index be2f2fe..d0a0716 100755
---
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringVarResolverTest.java
@@ -28,7 +28,7 @@ public class StringVarResolverTest {
//====================================================================================================
@Test
public void test() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(XVar.class).build();
+ VarResolver vr = VarResolver.create().vars(XVar.class).build();
String t;
t = null;
@@ -101,7 +101,7 @@ public class StringVarResolverTest {
//====================================================================================================
@Test
public void test2() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(BlankVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(BlankVar.class).build();
String t;
t = "${y}";
@@ -132,7 +132,7 @@ public class StringVarResolverTest {
//====================================================================================================
@Test
public void testEscaped$() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(BlankVar.class).build();
+ VarResolver vr =
VarResolver.create().vars(BlankVar.class).build();
String t;
t = "${y}";
@@ -153,7 +153,7 @@ public class StringVarResolverTest {
//====================================================================================================
@Test
public void testEscapedSequences() throws Exception {
- VarResolver vr = new
VarResolverBuilder().vars(XVar.class).build();
+ VarResolver vr = VarResolver.create().vars(XVar.class).build();
String t;
char b = '\\';
@@ -193,7 +193,7 @@ public class StringVarResolverTest {
//====================================================================================================
@Test
public void testParent() throws Exception {
- VarResolver vr = new
VarResolverBuilder().defaultVars().vars(XMultipartVar.class).build();
+ VarResolver vr =
VarResolver.create().defaultVars().vars(XMultipartVar.class).build();
String t;
System.setProperty("a", "a1");
System.setProperty("b", "b1");
@@ -219,7 +219,7 @@ public class StringVarResolverTest {
//====================================================================================================
@Test
public void testFalseTriggers() throws Exception {
- VarResolverBuilder vrb = new VarResolverBuilder().defaultVars();
+ VarResolver.Builder vrb = VarResolver.create().defaultVars();
String in = null;
// Should reject names with characters outside A-Za-z