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 f9d1786 REST refactoring.
f9d1786 is described below
commit f9d1786a21e5fe9e5c8a8aa97cd370ff82238b62
Author: JamesBognar <[email protected]>
AuthorDate: Sun Feb 7 12:48:10 2021 -0500
REST refactoring.
---
.../src/main/java/org/apache/juneau/Context.java | 25 +-
.../main/java/org/apache/juneau/PropertyStore.java | 129 +++
.../apache/juneau/rest/RestChildrenBuilder.java | 1 -
.../java/org/apache/juneau/rest/RestContext.java | 1147 ++++++++++++++------
4 files changed, 953 insertions(+), 349 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index 500a25f..f1208bb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -378,7 +378,7 @@ public abstract class Context {
* @return The property value, or the default value if it doesn't exist.
*/
public final Boolean getBooleanProperty(String key, Boolean def) {
- return getProperty(key, Boolean.class, def);
+ return propertyStore.getBooleanProperty(key, def);
}
/**
@@ -388,7 +388,7 @@ public abstract class Context {
* @return The property value, or <jk>false</jk> if it doesn't exist.
*/
public final boolean getBooleanProperty(String key) {
- return getBooleanProperty(key, false);
+ return propertyStore.getBooleanProperty(key);
}
/**
@@ -399,7 +399,7 @@ public abstract class Context {
* @return The property value, or the default value if it doesn't exist.
*/
public final Integer getIntegerProperty(String key, Integer def) {
- return getProperty(key, Integer.class, def);
+ return propertyStore.getIntegerProperty(key, def);
}
/**
@@ -409,7 +409,7 @@ public abstract class Context {
* @return The property value, or <c>-1</c> if it doesn't exist.
*/
public final int getIntegerProperty(String key) {
- return getIntegerProperty(key, -1);
+ return propertyStore.getIntegerProperty(key);
}
/**
@@ -420,7 +420,7 @@ public abstract class Context {
* @return The property value, or the default value if it doesn't exist.
*/
public final Long getLongProperty(String key, Long def) {
- return getProperty(key, Long.class, def);
+ return propertyStore.getLongProperty(key, def);
}
/**
@@ -430,7 +430,7 @@ public abstract class Context {
* @return The property value, or <c>-1</c> if it doesn't exist.
*/
public final long getLongProperty(String key) {
- return getLongProperty(key, -1l);
+ return propertyStore.getLongProperty(key);
}
/**
@@ -441,7 +441,7 @@ public abstract class Context {
* @return The property value, or the default value if it doesn't exist.
*/
public final String getStringProperty(String key, String def) {
- return getProperty(key, String.class, def);
+ return propertyStore.getStringProperty(key, def);
}
/**
@@ -451,7 +451,7 @@ public abstract class Context {
* @return The property value, or the <jk>null</jk> if it doesn't exist.
*/
public final String getStringProperty(String key) {
- return getStringProperty(key, null);
+ return propertyStore.getStringProperty(key);
}
/**
@@ -462,7 +462,7 @@ public abstract class Context {
* @return The property value, or the default value if it doesn't exist.
*/
public final String[] getCdlProperty(String key, String def) {
- return
StringUtils.split(StringUtils.emptyIfNull(getProperty(key, String.class, def)));
+ return propertyStore.getCdlProperty(key, def);
}
/**
@@ -473,8 +473,7 @@ public abstract class Context {
* @return The property value, or the default value if it doesn't exist.
*/
public final String getStringPropertyWithNone(String key, String def) {
- String s = getProperty(key, String.class, def);
- return "NONE".equalsIgnoreCase(s) ? "" : s;
+ return propertyStore.getStringPropertyWithNone(key, def);
}
/**
@@ -497,7 +496,7 @@ public abstract class Context {
* @return The property value, or <jk>null</jk> if it doesn't exist.
*/
public final <T> Class<? extends T> getClassProperty(String key,
Class<T> type) {
- return getClassProperty(key, type, null);
+ return propertyStore.getClassProperty(key, type);
}
/**
@@ -935,7 +934,7 @@ public abstract class Context {
.create()
.filtered()
.a(
- "Context",
+ "Context",
OMap
.create()
.filtered()
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
index 317e4a4..b763157 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
@@ -295,6 +295,113 @@ public final class PropertyStore {
}
/**
+ * Shortcut for calling <code>getProperty(key, Boolean.<jk>class</jk>,
def)</code>.
+ *
+ * @param key The property name.
+ * @param def The default value.
+ * @return The property value, or the default value if it doesn't exist.
+ */
+ public final Boolean getBooleanProperty(String key, Boolean def) {
+ return getProperty(key, Boolean.class, def);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, Boolean.<jk>class</jk>,
<jk>false</jk>)</code>.
+ *
+ * @param key The property name.
+ * @return The property value, or <jk>false</jk> if it doesn't exist.
+ */
+ public final boolean getBooleanProperty(String key) {
+ return getBooleanProperty(key, false);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, Integer.<jk>class</jk>,
def)</code>.
+ *
+ * @param key The property name.
+ * @param def The default value.
+ * @return The property value, or the default value if it doesn't exist.
+ */
+ public final Integer getIntegerProperty(String key, Integer def) {
+ return getProperty(key, Integer.class, def);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, Integer.<jk>class</jk>,
-1)</code>.
+ *
+ * @param key The property name.
+ * @return The property value, or <c>-1</c> if it doesn't exist.
+ */
+ public final int getIntegerProperty(String key) {
+ return getIntegerProperty(key, -1);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, Long.<jk>class</jk>,
def)</code>.
+ *
+ * @param key The property name.
+ * @param def The default value.
+ * @return The property value, or the default value if it doesn't exist.
+ */
+ public final Long getLongProperty(String key, Long def) {
+ return getProperty(key, Long.class, def);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, Long.<jk>class</jk>,
-1)</code>.
+ *
+ * @param key The property name.
+ * @return The property value, or <c>-1</c> if it doesn't exist.
+ */
+ public final long getLongProperty(String key) {
+ return getLongProperty(key, -1l);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, String.<jk>class</jk>,
def)</code>.
+ *
+ * @param key The property name.
+ * @param def The default value.
+ * @return The property value, or the default value if it doesn't exist.
+ */
+ public final String getStringProperty(String key, String def) {
+ return getProperty(key, String.class, def);
+ }
+
+ /**
+ * Shortcut for calling <code>getProperty(key, String.<jk>class</jk>,
<jk>null</jk>)</code>.
+ *
+ * @param key The property name.
+ * @return The property value, or the <jk>null</jk> if it doesn't exist.
+ */
+ public final String getStringProperty(String key) {
+ return getStringProperty(key, null);
+ }
+
+ /**
+ * Returns a property as a parsed comma-delimited list of strings.
+ *
+ * @param key The property name.
+ * @param def The default value.
+ * @return The property value, or the default value if it doesn't exist.
+ */
+ public final String[] getCdlProperty(String key, String def) {
+ return
StringUtils.split(StringUtils.emptyIfNull(getProperty(key, String.class, def)));
+ }
+
+ /**
+ * Same as {@link #getStringProperty(String, String)} but returns a
blank instead of the default value if it resolves to <js>"NONE"</js>.
+ *
+ * @param key The property name.
+ * @param def The default value.
+ * @return The property value, or the default value if it doesn't exist.
+ */
+ public final String getStringPropertyWithNone(String key, String def) {
+ String s = getProperty(key, String.class, def);
+ return "NONE".equalsIgnoreCase(s) ? "" : s;
+ }
+
+ /**
* Returns the class property with the specified name.
*
* @param key The property name.
@@ -308,6 +415,17 @@ public final class PropertyStore {
}
/**
+ * Returns the class property with the specified name.
+ *
+ * @param key The property name.
+ * @param type The class type of the property.
+ * @return The property value, or <jk>null</jk> if it doesn't exist.
+ */
+ public final <T> Class<? extends T> getClassProperty(String key,
Class<T> type) {
+ return getClassProperty(key, type, null);
+ }
+
+ /**
* Returns the array property value with the specified name.
*
* @param key The property name.
@@ -557,6 +675,17 @@ public final class PropertyStore {
*
* @param key The property name.
* @param type The class type of the property.
+ * @return A new property instance, or an empty array if it doesn't
exist.
+ */
+ public <T> T[] getInstanceArrayProperty(String key, Class<T> type) {
+ return getInstanceArrayProperty(key, type,
(T[])Array.newInstance(type, 0));
+ }
+
+ /**
+ * Returns the specified property as an array of instantiated objects.
+ *
+ * @param key The property name.
+ * @param type The class type of the property.
* @param def The default object to return if the property doesn't
exist.
* @return A new property instance.
*/
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildrenBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildrenBuilder.java
index e8155bf..3c595ba 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildrenBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildrenBuilder.java
@@ -65,7 +65,6 @@ public class RestChildrenBuilder {
return this;
}
-
/**
* Specifies a {@link RestChildren} implementation subclass to use.
*
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 4887238..8d2fffb 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
@@ -1457,7 +1457,7 @@ public class RestContext extends BeanContext {
* <ul>
* <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#fileFinder(Class)}
* <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#fileFinder(FileFinder)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContext#createFileFinder(Object,BeanFactory)}
+ * <li class='jm'>{@link
org.apache.juneau.rest.RestContext#createFileFinder(Object,PropertyStore,BeanFactory)}
* </ul>
* </ul>
*
@@ -1476,7 +1476,7 @@ public class RestContext extends BeanContext {
* </ul>
*
* <p>
- * The file finder is instantiated via the {@link
RestContext#createFileFinder(Object,BeanFactory)} method which in turn
instantiates
+ * The file finder is instantiated via the {@link
RestContext#createFileFinder(Object,PropertyStore,BeanFactory)} method which in
turn instantiates
* based on the following logic:
* <ul>
* <li>Returns the resource class itself if it's an instance of
{@link FileFinder}.
@@ -2904,7 +2904,7 @@ public class RestContext extends BeanContext {
* <ul>
* <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#staticFiles(Class)}
* <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#staticFiles(StaticFiles)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContext#createStaticFiles(Object,BeanFactory)}
+ * <li class='jm'>{@link
org.apache.juneau.rest.RestContext#createStaticFiles(Object,PropertyStore,BeanFactory)}
* </ul>
* </ul>
*
@@ -2925,7 +2925,7 @@ public class RestContext extends BeanContext {
* </ul>
*
* <p>
- * The static file finder is instantiated via the {@link
RestContext#createStaticFiles(Object,BeanFactory)} method which in turn
instantiates
+ * The static file finder is instantiated via the {@link
RestContext#createStaticFiles(Object,PropertyStore,BeanFactory)} method which
in turn instantiates
* based on the following logic:
* <ul>
* <li>Returns the resource class itself is an instance of {@link
StaticFiles}.
@@ -3372,7 +3372,7 @@ public class RestContext extends BeanContext {
final org.apache.http.Header[] defaultRequestHeaders,
defaultResponseHeaders;
final NamedAttribute[] defaultRequestAttributes;
private final ResponseHandler[] responseHandlers;
- private final Messages msgs;
+ private final Messages messages;
private final Config config;
private final VarResolver varResolver;
private final RestOperations restOperations;
@@ -3416,7 +3416,8 @@ public class RestContext extends BeanContext {
/**
* Constructor.
*
- * @param resource The resource annotated with <ja>@Rest</ja>.
+ * @param resource
+ * The REST servlet or bean annotated with <ja>@Rest</ja>.
* @return A new builder object.
* @throws ServletException Something bad happened.
*/
@@ -3427,9 +3428,13 @@ public class RestContext extends BeanContext {
/**
* Constructor.
*
- * @param parentContext The parent context, or <jk>null</jk> if there
is no parent context.
- * @param servletConfig The servlet config passed into the servlet by
the servlet container.
- * @param resourceClass The class annotated with <ja>@Rest</ja>.
+ * @param parent
+ * The parent context if the REST bean was registered via {@link
Rest#children()}.
+ * <br>Will 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.
+ * @param resourceClass
+ * The class annotated with <ja>@Rest</ja>.
* @return A new builder object.
* @throws ServletException Something bad happened.
*/
@@ -3440,7 +3445,7 @@ public class RestContext extends BeanContext {
/**
* Constructor.
*
- * @param builder The servlet configuration object.
+ * @param builder The builder containing the settings for this bean.
* @throws Exception If any initialization problems were encountered.
*/
public RestContext(RestContextBuilder builder) throws Exception {
@@ -3453,91 +3458,92 @@ public class RestContext extends BeanContext {
HttpException _initException = null;
try {
+ PropertyStore ps = getPropertyStore();
+
this.builder = builder;
this.resourceClass = builder.resourceClass;
this.resource = builder.resource;
Object r = getResource();
- parentContext = builder.parentContext;
+ RestContext parent = parentContext =
builder.parentContext;
- rootBeanFactory = createBeanFactory(r);
+ rootBeanFactory = createBeanFactory(r, ps, parent);
- beanFactory = BeanFactory.of(rootBeanFactory, r);
- beanFactory.addBean(BeanFactory.class, beanFactory);
- beanFactory.addBean(RestContext.class, this);
- beanFactory.addBean(Object.class, r);
+ BeanFactory bf = beanFactory =
BeanFactory.of(rootBeanFactory, r);
+ bf.addBean(BeanFactory.class, bf);
+ bf.addBean(RestContext.class, this);
+ bf.addBean(Object.class, r);
- PropertyStore ps = getPropertyStore();
- beanFactory.addBean(PropertyStore.class, ps);
+ bf.addBean(PropertyStore.class, ps);
- logger = createLogger(r, beanFactory);
- beanFactory.addBean(Logger.class, logger);
+ Logger l = logger = createLogger(r, ps, bf);
+ bf.addBean(Logger.class, l);
- thrownStore = createThrownStore(r, beanFactory);
- beanFactory.addBean(ThrownStore.class, thrownStore);
+ ThrownStore ts = thrownStore = createThrownStore(r, ps,
parent, bf);
+ bf.addBean(ThrownStore.class, ts);
- methodExecStore = createMethodExecStore(r, beanFactory,
thrownStore);
- beanFactory.addBean(MethodExecStore.class,
methodExecStore);
+ methodExecStore = createMethodExecStore(r, ps, bf, ts);
+ bf.addBean(MethodExecStore.class, methodExecStore);
- varResolver = createVarResolver(r, beanFactory);
- beanFactory.addBean(VarResolver.class, varResolver);
+ Messages m = messages = createMessages(r, ps);
- config =
builder.config.resolving(varResolver.createSession());
- beanFactory.addBean(Config.class, config);
+ VarResolver vr = varResolver = createVarResolver(r, ps,
bf, m);
+ bf.addBean(VarResolver.class, vr);
- responseHandlers = createResponseHandlers(r,
beanFactory).asArray();
- beanFactory.addBean(ResponseHandler[].class,
responseHandlers);
+ config = builder.config.resolving(vr.createSession());
+ bf.addBean(Config.class, config);
- callLogger = createCallLogger(r, beanFactory);
- beanFactory.addBean(RestLogger.class, callLogger);
+ responseHandlers = createResponseHandlers(r, ps,
bf).asArray();
+ bf.addBean(ResponseHandler[].class, responseHandlers);
- serializers = createSerializers(r, beanFactory, ps);
- beanFactory.addBean(SerializerGroup.class, serializers);
+ callLogger = createCallLogger(r, ps, bf, l, ts);
+ bf.addBean(RestLogger.class, callLogger);
- parsers = createParsers(r, beanFactory, ps);
- beanFactory.addBean(ParserGroup.class, parsers);
+ serializers = createSerializerGroup(r, ps, bf);
+ bf.addBean(SerializerGroup.class, serializers);
- partSerializer = createPartSerializer(r, beanFactory);
- beanFactory.addBean(HttpPartSerializer.class,
partSerializer);
+ parsers = createParserGroup(r, ps, bf);
+ bf.addBean(ParserGroup.class, parsers);
- partParser = createPartParser(r, beanFactory);
- beanFactory.addBean(HttpPartParser.class, partParser);
+ partSerializer = createPartSerializer(r, ps, bf);
+ bf.addBean(HttpPartSerializer.class, partSerializer);
- jsonSchemaGenerator = createJsonSchemaGenerator(r,
beanFactory);
- beanFactory.addBean(JsonSchemaGenerator.class,
jsonSchemaGenerator);
+ partParser = createPartParser(r, ps, bf);
+ bf.addBean(HttpPartParser.class, partParser);
- fileFinder = createFileFinder(r, beanFactory);
- beanFactory.addBean(FileFinder.class, fileFinder);
+ jsonSchemaGenerator = createJsonSchemaGenerator(r, ps,
bf);
+ bf.addBean(JsonSchemaGenerator.class,
jsonSchemaGenerator);
- staticFiles = createStaticFiles(r, beanFactory);
- beanFactory.addBean(StaticFiles.class, staticFiles);
+ FileFinder ff = fileFinder = createFileFinder(r, ps,
bf);
+ bf.addBean(FileFinder.class, ff);
- defaultRequestHeaders = createDefaultRequestHeaders(r,
beanFactory).asArray();
- defaultResponseHeaders =
createDefaultResponseHeaders(r, beanFactory).asArray();
- defaultRequestAttributes =
createDefaultRequestAttributes(r, beanFactory).asArray();
+ staticFiles = createStaticFiles(r, ps, bf);
+ bf.addBean(StaticFiles.class, staticFiles);
- opParams = createRestOperationParams(r,
beanFactory).asArray();
- hookMethodParams = createHookMethodParams(r,
beanFactory).asArray();
+ defaultRequestHeaders = createDefaultRequestHeaders(r,
ps, bf).asArray();
+ defaultResponseHeaders =
createDefaultResponseHeaders(r, ps, bf).asArray();
+ defaultRequestAttributes =
createDefaultRequestAttributes(r, ps, bf).asArray();
- uriContext =
nullIfEmpty(getStringProperty(REST_uriContext));
- uriAuthority =
nullIfEmpty(getStringProperty(REST_uriAuthority));
- uriResolution = getProperty(REST_uriResolution,
UriResolution.class, UriResolution.ROOT_RELATIVE);
- uriRelativity = getProperty(REST_uriRelativity,
UriRelativity.class, UriRelativity.RESOURCE);
+ opParams = createRestOperationParams(r, ps,
bf).asArray();
+ hookMethodParams = createHookMethodParams(r, ps,
bf).asArray();
- allowBodyParam = !
getBooleanProperty(REST_disableAllowBodyParam);
- allowedHeaderParams =
newCaseInsensitiveSet(getStringPropertyWithNone(REST_allowedHeaderParams,
"Accept,Content-Type"));
- allowedMethodParams =
newCaseInsensitiveSet(getStringPropertyWithNone(REST_allowedMethodParams,
"HEAD,OPTIONS"));
- allowedMethodHeaders =
newCaseInsensitiveSet(getStringPropertyWithNone(REST_allowedMethodHeaders, ""));
- renderResponseStackTraces =
getBooleanProperty(REST_renderResponseStackTraces);
- clientVersionHeader =
getStringProperty(REST_clientVersionHeader, "X-Client-Version");
+ uriContext =
nullIfEmpty(ps.getStringProperty(REST_uriContext));
+ uriAuthority =
nullIfEmpty(ps.getStringProperty(REST_uriAuthority));
+ uriResolution = ps.getProperty(REST_uriResolution,
UriResolution.class, UriResolution.ROOT_RELATIVE);
+ uriRelativity = ps.getProperty(REST_uriRelativity,
UriRelativity.class, UriRelativity.RESOURCE);
- debugEnablement = createDebugEnablement(r, beanFactory);
+ allowBodyParam = !
ps.getBooleanProperty(REST_disableAllowBodyParam);
+ allowedHeaderParams =
newCaseInsensitiveSet(ps.getStringPropertyWithNone(REST_allowedHeaderParams,
"Accept,Content-Type"));
+ allowedMethodParams =
newCaseInsensitiveSet(ps.getStringPropertyWithNone(REST_allowedMethodParams,
"HEAD,OPTIONS"));
+ allowedMethodHeaders =
newCaseInsensitiveSet(ps.getStringPropertyWithNone(REST_allowedMethodHeaders,
""));
+ renderResponseStackTraces =
ps.getBooleanProperty(REST_renderResponseStackTraces);
+ clientVersionHeader =
ps.getStringProperty(REST_clientVersionHeader, "X-Client-Version");
- consumes = getListProperty(REST_consumes,
MediaType.class, parsers.getSupportedMediaTypes());
- produces = getListProperty(REST_produces,
MediaType.class, serializers.getSupportedMediaTypes());
+ debugEnablement = createDebugEnablement(r, ps, bf);
- msgs = createMessages(r);
+ consumes = ps.getListProperty(REST_consumes,
MediaType.class, parsers.getSupportedMediaTypes());
+ produces = ps.getListProperty(REST_produces,
MediaType.class, serializers.getSupportedMediaTypes());
fullPath = (builder.parentContext == null ? "" :
(builder.parentContext.fullPath + '/')) + builder.getPath();
path = builder.getPath();
@@ -3547,19 +3553,19 @@ public class RestContext extends BeanContext {
p += "/*";
pathMatcher = UrlPathMatcher.of(p);
- startCallMethods =
createStartCallMethods(r).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
- endCallMethods =
createEndCallMethods(r).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
- postInitMethods =
createPostInitMethods(r).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
- postInitChildFirstMethods =
createPostInitChildFirstMethods(r).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
- destroyMethods =
createDestroyMethods(r).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
+ startCallMethods = createStartCallMethods(r, ps,
bf).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
+ endCallMethods = createEndCallMethods(r, ps,
bf).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
+ postInitMethods = createPostInitMethods(r, ps,
bf).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
+ postInitChildFirstMethods =
createPostInitChildFirstMethods(r, ps,
bf).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
+ destroyMethods = createDestroyMethods(r, ps,
bf).stream().map(this::toMethodInvoker).toArray(MethodInvoker[]::new);
- preCallMethods =
createPreCallMethods(r).stream().map(this::toRestOperationInvoker).toArray(RestOperationInvoker[]::
new);
- postCallMethods =
createPostCallMethods(r).stream().map(this::toRestOperationInvoker).toArray(RestOperationInvoker[]::
new);
+ preCallMethods = createPreCallMethods(r, ps,
bf).stream().map(this::toRestOperationInvoker).toArray(RestOperationInvoker[]::
new);
+ postCallMethods = createPostCallMethods(r, ps,
bf).stream().map(this::toRestOperationInvoker).toArray(RestOperationInvoker[]::
new);
- restOperations = createRestOperations(r);
- restChildren = createRestChildren(r);
+ restOperations = createRestOperations(r, ps, bf);
+ restChildren = createRestChildren(r, ps, bf,
builder.inner);
- swaggerProvider = createSwaggerProvider(r, beanFactory);
+ swaggerProvider = createSwaggerProvider(r, ps, bf, ff,
m, vr);
} catch (HttpException e) {
_initException = e;
@@ -3638,22 +3644,30 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_beanFactory}
* </ul>
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param parent
+ * The parent context if the REST bean was registered via {@link
Rest#children()}.
+ * <br>Will be <jk>null</jk> if the bean is a top-level resource.
* @return The bean factory for this REST resource.
* @throws Exception If bean factory could not be instantiated.
*/
- protected BeanFactory createBeanFactory(Object resource) throws
Exception {
+ protected BeanFactory createBeanFactory(Object resource, PropertyStore
properties, RestContext parent) throws Exception {
BeanFactory x = null;
if (resource instanceof BeanFactory)
x = (BeanFactory)resource;
- if (x == null && parentContext != null)
- x = parentContext.rootBeanFactory;
+ Object o = properties.getProperty(REST_beanFactory);
+ if (o instanceof BeanFactory)
+ x = (BeanFactory)o;
if (x == null)
- x = getInstanceProperty(REST_beanFactory,
BeanFactory.class, null, x);
+ x = createBeanFactoryBuilder(resource, properties,
parent).build();
x = BeanFactory
.of(x, resource)
@@ -3667,6 +3681,51 @@ public class RestContext extends BeanContext {
}
/**
+ * Instantiates the builder for the {@link BeanFactory} for this
context.
+ *
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param parent
+ * The parent context if the REST bean was registered via {@link
Rest#children()}.
+ * <br>Will be <jk>null</jk> if the bean is a top-level resource.
+ * @return The bean factory builder for this REST resource.
+ * @throws Exception If bean factory could not be instantiated.
+ */
+ @SuppressWarnings("unchecked")
+ protected BeanFactoryBuilder createBeanFactoryBuilder(Object resource,
PropertyStore properties, RestContext parent) throws Exception {
+
+ Class<? extends BeanFactory> c = null;
+
+ Object o = properties.getProperty(REST_beanFactory);
+ if (o instanceof Class)
+ c = (Class<? extends BeanFactory>)o;
+
+ BeanFactory root = parent == null ? null :
parent.rootBeanFactory;
+
+ BeanFactoryBuilder x = BeanFactory
+ .create()
+ .parent(root)
+ .implClass(c)
+ .outer(resource);
+
+ x = BeanFactory
+ .create()
+ .parent(root)
+ .outer(resource)
+ .build()
+ .addBean(BeanFactoryBuilder.class, x)
+ .beanCreateMethodFinder(BeanFactoryBuilder.class,
resource)
+ .find("createBeanFactoryBuilder")
+ .withDefault(x)
+ .run();
+
+ return x;
+ }
+
+ /**
* Instantiates the file finder for this REST resource.
*
* <p>
@@ -3681,9 +3740,9 @@ public class RestContext extends BeanContext {
* <li>{@link
RestContextBuilder#fileFinder(Class)}/{@link
RestContextBuilder#fileFinder(FileFinder)}
* <li>{@link Rest#fileFinder()}.
* </ul>
- * <li>Resolves it via the {@link #createBeanFactory(Object) bean
factory} registered in this context (including Spring beans if using
SpringRestServlet).
+ * <li>Resolves it via the {@link
#createBeanFactory(Object,PropertyStore,RestContext) bean factory} registered
in this context (including Spring beans if using SpringRestServlet).
* <li>Looks for value in {@link #REST_fileFinderDefault} setting.
- * <li>Instantiates via {@link #createFileFinderBuilder(Object,
BeanFactory)}.
+ * <li>Instantiates via {@link
#createFileFinderBuilder(Object,PropertyStore,BeanFactory)}.
* </ul>
*
* <p>
@@ -3705,7 +3764,7 @@ public class RestContext extends BeanContext {
* The <c>createFileFinder()</c> method can be static or non-static can
contain any of the following arguments:
* <ul>
* <li>{@link FileFinder} - The file finder that would have been
returned by this method.
- * <li>{@link FileFinderBuilder} - The file finder returned by
{@link #createFileFinderBuilder(Object,BeanFactory)}.
+ * <li>{@link FileFinderBuilder} - The file finder returned by
{@link #createFileFinderBuilder(Object,PropertyStore,BeanFactory)}.
* <li>{@link RestContext} - This REST context.
* <li>{@link BeanFactory} - The bean factory of this REST context.
* <li>Any {@doc RestInjection injected bean} types. Use {@link
Optional} arguments for beans that may not exist.
@@ -3715,19 +3774,25 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_fileFinder}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The file finder for this REST resource.
* @throws Exception If file finder could not be instantiated.
*/
- protected FileFinder createFileFinder(Object resource, BeanFactory
beanFactory) throws Exception {
+ protected FileFinder createFileFinder(Object resource, PropertyStore
properties, BeanFactory beanFactory) throws Exception {
FileFinder x = null;
if (resource instanceof FileFinder)
x = (FileFinder)resource;
- Object o = getProperty(REST_fileFinder);
+ Object o = properties.getProperty(REST_fileFinder);
if (o instanceof FileFinder)
x = (FileFinder)o;
@@ -3735,13 +3800,13 @@ public class RestContext extends BeanContext {
x = beanFactory.getBean(FileFinder.class).orElse(null);
if (x == null) {
- o = getProperty(REST_fileFinderDefault);
+ o = properties.getProperty(REST_fileFinderDefault);
if (o instanceof FileFinder)
x = (FileFinder)o;
}
if (x == null)
- x = createFileFinderBuilder(resource,
beanFactory).build();
+ x = createFileFinderBuilder(resource, properties,
beanFactory).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -3758,24 +3823,30 @@ public class RestContext extends BeanContext {
* Instantiates the file finder builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createFileFinder(Object, BeanFactory)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createFileFinder(Object,PropertyStore,BeanFactory)} method.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The file finder builder for this REST resource.
* @throws Exception If file finder builder could not be instantiated.
*/
@SuppressWarnings("unchecked")
- protected FileFinderBuilder createFileFinderBuilder(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected FileFinderBuilder createFileFinderBuilder(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Class<? extends FileFinder> c = null;
- Object o = getProperty(REST_fileFinder);
+ Object o = properties.getProperty(REST_fileFinder);
if (o instanceof Class)
c = (Class<? extends FileFinder>)o;
if (c == null) {
- o = getProperty(REST_fileFinderDefault);
+ o = properties.getProperty(REST_fileFinderDefault);
if (o instanceof Class)
c = (Class<? extends FileFinder>)o;
}
@@ -3798,7 +3869,7 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(FileFinderBuilder.class, x)
.beanCreateMethodFinder(FileFinderBuilder.class,
resource)
- .find("createFileFinder")
+ .find("createFileFinderBuilder")
.withDefault(x)
.run();
@@ -3834,31 +3905,37 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_staticFiles}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The file finder for this REST resource.
* @throws Exception If file finder could not be instantiated.
*/
- protected StaticFiles createStaticFiles(Object resource, BeanFactory
beanFactory) throws Exception {
+ protected StaticFiles createStaticFiles(Object resource, PropertyStore
properties, BeanFactory beanFactory) throws Exception {
StaticFiles x = null;
if (resource instanceof StaticFiles)
x = (StaticFiles)resource;
- Object o = getProperty(REST_staticFiles);
+ Object o = properties.getProperty(REST_staticFiles);
if (o instanceof StaticFiles)
x = (StaticFiles)o;
if (x == null)
x = beanFactory.getBean(StaticFiles.class).orElse(null);
- o = getProperty(REST_staticFilesDefault);
+ o = properties.getProperty(REST_staticFilesDefault);
if (o instanceof StaticFiles)
x = (StaticFiles)o;
if (x == null)
- x = (StaticFiles)createStaticFilesBuilder(resource,
beanFactory).build();
+ x = (StaticFiles)createStaticFilesBuilder(resource,
properties, beanFactory).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -3875,31 +3952,34 @@ public class RestContext extends BeanContext {
* Instantiates the static files builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createStaticFiles(Object, BeanFactory)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createStaticFiles(Object,PropertyStore,BeanFactory)} method.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The static files builder for this REST resource.
* @throws Exception If static files builder could not be instantiated.
*/
@SuppressWarnings("unchecked")
- protected StaticFilesBuilder createStaticFilesBuilder(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected StaticFilesBuilder createStaticFilesBuilder(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Class<? extends StaticFiles> c = null;
- Object o = getProperty(REST_staticFiles);
+ Object o = properties.getProperty(REST_staticFiles);
if (o instanceof Class)
c = (Class<? extends StaticFiles>)o;
if (c == null) {
- o = getProperty(REST_staticFilesDefault);
+ o = properties.getProperty(REST_staticFilesDefault);
if (o instanceof Class)
c = (Class<? extends StaticFiles>)o;
}
- if (c == null)
- c = BasicStaticFiles.class;
-
StaticFilesBuilder x = StaticFiles
.create()
.beanFactory(beanFactory)
@@ -3916,7 +3996,7 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(StaticFilesBuilder.class, x)
.beanCreateMethodFinder(StaticFilesBuilder.class,
resource)
- .find("createStaticFiles")
+ .find("createStaticFilesBuilder")
.withDefault(x)
.run();
@@ -3952,19 +4032,31 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_callLogger}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param logger
+ * The Java logger to use for logging messages.
+ * <br>Created by {@link
#createLogger(Object,PropertyStore,BeanFactory)}.
+ * @param thrownStore
+ * The thrown exception statistics store.
+ * <br>Created by {@link
#createThrownStore(Object,PropertyStore,RestContext,BeanFactory)}.
* @return The file finder for this REST resource.
* @throws Exception If file finder could not be instantiated.
*/
- protected RestLogger createCallLogger(Object resource, BeanFactory
beanFactory) throws Exception {
+ protected RestLogger createCallLogger(Object resource, PropertyStore
properties, BeanFactory beanFactory, Logger logger, ThrownStore thrownStore)
throws Exception {
RestLogger x = null;
if (resource instanceof RestLogger)
x = (RestLogger)resource;
- Object o = getProperty(REST_callLogger);
+ Object o = properties.getProperty(REST_callLogger);
if (o instanceof RestLogger)
x = (RestLogger)o;
@@ -3972,13 +4064,13 @@ public class RestContext extends BeanContext {
x = beanFactory.getBean(RestLogger.class).orElse(null);
if (x == null) {
- o = getProperty(REST_callLoggerDefault);
+ o = properties.getProperty(REST_callLoggerDefault);
if (o instanceof RestLogger)
x = (RestLogger)o;
}
if (x == null)
- x = createCallLoggerBuilder(resource,
beanFactory).build();
+ x = createCallLoggerBuilder(resource, properties,
beanFactory, logger, thrownStore).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -3995,24 +4087,36 @@ public class RestContext extends BeanContext {
* Instantiates the call logger builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createCallLogger(Object, BeanFactory)} method.
- *
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createCallLogger(Object,PropertyStore,BeanFactory,Logger,ThrownStore)}
method.
+ *
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param logger
+ * The Java logger to use for logging messages.
+ * <br>Created by {@link
#createLogger(Object,PropertyStore,BeanFactory)}.
+ * @param thrownStore
+ * The thrown exception statistics store.
+ * <br>Created by {@link
#createThrownStore(Object,PropertyStore,RestContext,BeanFactory)}.
* @return The call logger builder for this REST resource.
* @throws Exception If call logger builder could not be instantiated.
*/
@SuppressWarnings("unchecked")
- protected RestLoggerBuilder createCallLoggerBuilder(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected RestLoggerBuilder createCallLoggerBuilder(Object resource,
PropertyStore properties, BeanFactory beanFactory, Logger logger, ThrownStore
thrownStore) throws Exception {
Class<? extends RestLogger> c = null;
- Object o = getProperty(REST_callLogger);
+ Object o = properties.getProperty(REST_callLogger);
if (o instanceof Class)
c = (Class<? extends RestLogger>)o;
if (c == null) {
- o = getProperty(REST_callLoggerDefault);
+ o = properties.getProperty(REST_callLoggerDefault);
if (o instanceof Class)
c = (Class<? extends RestLogger>)o;
}
@@ -4045,14 +4149,14 @@ public class RestContext extends BeanContext {
.responseDetail(ENTITY)
.build()
)
- .logger(getLogger())
- .thrownStore(getThrownStore());
+ .logger(logger)
+ .thrownStore(thrownStore);
x = BeanFactory
.of(beanFactory, resource)
.addBean(RestLoggerBuilder.class, x)
.beanCreateMethodFinder(RestLoggerBuilder.class,
resource)
- .find("createCallLogger")
+ .find("createCallLoggerBuilder")
.withDefault(x)
.run();
@@ -4085,16 +4189,22 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_responseHandlers}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The response handlers for this REST resource.
* @throws Exception If response handlers could not be instantiated.
*/
- protected ResponseHandlerList createResponseHandlers(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected ResponseHandlerList createResponseHandlers(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
ResponseHandlerList x = ResponseHandlerList.create();
- x.append(getInstanceArrayProperty(REST_responseHandlers,
ResponseHandler.class, new ResponseHandler[0], beanFactory));
+
x.append(properties.getInstanceArrayProperty(REST_responseHandlers,
ResponseHandler.class, new ResponseHandler[0], beanFactory));
if (x.isEmpty())
x.append(beanFactory.getBean(ResponseHandlerList.class).orElse(null));
@@ -4136,31 +4246,23 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_serializers}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
- * @param ps The property store to apply to all serialiers.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
* @return The serializers for this REST resource.
* @throws Exception If serializers could not be instantiated.
*/
- protected SerializerGroup createSerializers(Object resource,
BeanFactory beanFactory, PropertyStore ps) throws Exception {
+ protected SerializerGroup createSerializerGroup(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
SerializerGroup g =
beanFactory.getBean(SerializerGroup.class).orElse(null);
- if (g == null) {
- Object[] x = getArrayProperty(REST_serializers,
Object.class);
-
- if (x == null)
- x =
beanFactory.getBean(Serializer[].class).orElse(null);
-
- if (x == null)
- x = new Serializer[0];
-
- g = SerializerGroup
- .create()
- .append(x)
- .apply(ps)
- .build();
- }
+ if (g == null)
+ g = createSerializerGroupBuilder(resource, properties,
beanFactory).build();
g = BeanFactory
.of(beanFactory, resource)
@@ -4174,6 +4276,46 @@ public class RestContext extends BeanContext {
}
/**
+ * Creates the builder for the serializer group.
+ *
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @return The serializers for this REST resource.
+ * @throws Exception If serializers could not be instantiated.
+ */
+ protected SerializerGroupBuilder createSerializerGroupBuilder(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
+
+ Object[] x = properties.getArrayProperty(REST_serializers,
Object.class);
+
+ if (x == null)
+ x =
beanFactory.getBean(Serializer[].class).orElse(null);
+
+ if (x == null)
+ x = new Serializer[0];
+
+ SerializerGroupBuilder g = SerializerGroup
+ .create()
+ .append(x)
+ .apply(properties);
+
+ g = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(SerializerGroupBuilder.class, g)
+ .beanCreateMethodFinder(SerializerGroupBuilder.class,
resource)
+ .find("createSerializerGroupBuilder")
+ .withDefault(g)
+ .run();
+
+ return g;
+ }
+
+ /**
* Instantiates the parsers for this REST resource.
*
* <p>
@@ -4199,37 +4341,69 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_parsers}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
- * @param ps The property store to apply to all serialiers.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The parsers for this REST resource.
* @throws Exception If parsers could not be instantiated.
*/
- protected ParserGroup createParsers(Object resource, BeanFactory
beanFactory, PropertyStore ps) throws Exception {
+ protected ParserGroup createParserGroup(Object resource, PropertyStore
properties, BeanFactory beanFactory) throws Exception {
ParserGroup g =
beanFactory.getBean(ParserGroup.class).orElse(null);
- if (g == null) {
- Object[] x = getArrayProperty(REST_parsers,
Object.class);
+ if (g == null)
+ g = createParserGroupBuilder(resource, properties,
beanFactory).build();
- if (x == null)
- x =
beanFactory.getBean(Parser[].class).orElse(null);
+ g = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(ParserGroup.class, g)
+ .beanCreateMethodFinder(ParserGroup.class, resource)
+ .find("createParserGroup")
+ .withDefault(g)
+ .run();
- if (x == null)
- x = new Parser[0];
+ return g;
+ }
- g = ParserGroup
- .create()
- .append(x)
- .apply(ps)
- .build();
- }
+ /**
+ * Creates the builder for the parser group.
+ *
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @return The serializers for this REST resource.
+ * @throws Exception If serializers could not be instantiated.
+ */
+ protected ParserGroupBuilder createParserGroupBuilder(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
+
+ Object[] x = properties.getArrayProperty(REST_parsers,
Object.class);
+
+ if (x == null)
+ x = beanFactory.getBean(Parser[].class).orElse(null);
+
+ if (x == null)
+ x = new Parser[0];
+
+ ParserGroupBuilder g = ParserGroup
+ .create()
+ .append(x)
+ .apply(properties);
g = BeanFactory
.of(beanFactory, resource)
- .addBean(ParserGroup.class, g)
- .beanCreateMethodFinder(ParserGroup.class, resource)
- .find("createParsers")
+ .addBean(ParserGroupBuilder.class, g)
+ .beanCreateMethodFinder(ParserGroupBuilder.class,
resource)
+ .find("createParserGroupBuilder")
.withDefault(g)
.run();
@@ -4263,12 +4437,18 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_partSerializer}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The HTTP part serializer for this REST resource.
* @throws Exception If serializer could not be instantiated.
*/
- protected HttpPartSerializer createPartSerializer(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected HttpPartSerializer createPartSerializer(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
HttpPartSerializer x = null;
@@ -4276,13 +4456,13 @@ public class RestContext extends BeanContext {
x = (HttpPartSerializer)resource;
if (x == null)
- x = getInstanceProperty(REST_partSerializer,
HttpPartSerializer.class, null, beanFactory);
+ x = properties.getInstanceProperty(REST_partSerializer,
HttpPartSerializer.class, null, beanFactory);
if (x == null)
x =
beanFactory.getBean(HttpPartSerializer.class).orElse(null);
if (x == null)
- x = new OpenApiSerializer(getPropertyStore());
+ x = new OpenApiSerializer(properties);
x = BeanFactory
.of(beanFactory, resource)
@@ -4322,12 +4502,18 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_partParser}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The HTTP part parser for this REST resource.
* @throws Exception If parser could not be instantiated.
*/
- protected HttpPartParser createPartParser(Object resource, BeanFactory
beanFactory) throws Exception {
+ protected HttpPartParser createPartParser(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
HttpPartParser x = null;
@@ -4335,13 +4521,13 @@ public class RestContext extends BeanContext {
x = (HttpPartParser)resource;
if (x == null)
- x = getInstanceProperty(REST_partParser,
HttpPartParser.class, null, beanFactory);
+ x = properties.getInstanceProperty(REST_partParser,
HttpPartParser.class, null, beanFactory);
if (x == null)
x =
beanFactory.getBean(HttpPartParser.class).orElse(null);
if (x == null)
- x = new OpenApiParser(getPropertyStore());
+ x = new OpenApiParser(properties);
x = BeanFactory
.of(beanFactory, resource)
@@ -4370,17 +4556,23 @@ public class RestContext extends BeanContext {
* <li>Instantiates a default set of parameters.
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The REST method parameter resolvers for this REST resource.
* @throws Exception If parameter resolvers could not be instantiated.
*/
@SuppressWarnings("unchecked")
- protected RestOperationParamList createRestOperationParams(Object
resource, BeanFactory beanFactory) throws Exception {
+ protected RestOperationParamList createRestOperationParams(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
RestOperationParamList x = RestOperationParamList.create();
- for (Class<?> c : getListProperty(REST_restOperationParams,
Class.class, AList.create()))
+ for (Class<?> c :
properties.getListProperty(REST_restOperationParams, Class.class,
AList.create()))
x.append((Class<? extends RestOperationParam>)c);
x.append(
@@ -4441,13 +4633,19 @@ public class RestContext extends BeanContext {
/**
* Instantiates the hook method parameter resolvers for this REST
resource.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The REST method parameter resolvers for this REST resource.
* @throws Exception If parameter resolvers could not be instantiated.
*/
@SuppressWarnings("unchecked")
- protected RestOperationParamList createHookMethodParams(Object
resource, BeanFactory beanFactory) throws Exception {
+ protected RestOperationParamList createHookMethodParams(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
RestOperationParamList x = RestOperationParamList.create();
@@ -4500,12 +4698,18 @@ public class RestContext extends BeanContext {
* <li>Instantiates via
<c>Logger.<jsm>getLogger</jsm>(<jv>resource</jv>.getClass().getName())</c>.
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The logger for this REST resource.
* @throws Exception If logger could not be instantiated.
*/
- protected Logger createLogger(Object resource, BeanFactory beanFactory)
throws Exception {
+ protected Logger createLogger(Object resource, PropertyStore
properties, BeanFactory beanFactory) throws Exception {
Logger x = beanFactory.getBean(Logger.class).orElse(null);
@@ -4540,16 +4744,22 @@ public class RestContext extends BeanContext {
* <li>Instantiates a new {@link JsonSchemaGenerator} using the
property store of this context..
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The JSON schema generator for this REST resource.
* @throws Exception If JSON schema generator could not be instantiated.
*/
- protected JsonSchemaGenerator createJsonSchemaGenerator(Object
resource, BeanFactory beanFactory) throws Exception {
+ protected JsonSchemaGenerator createJsonSchemaGenerator(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
JsonSchemaGenerator x =
beanFactory.getBean(JsonSchemaGenerator.class).orElse(null);
if (x == null)
- x = createJsonSchemaGeneratorBuilder(resource,
beanFactory).build();
+ x = createJsonSchemaGeneratorBuilder(resource,
properties, beanFactory).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -4566,23 +4776,29 @@ public class RestContext extends BeanContext {
* Instantiates the JSON-schema generator builder for this REST
resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createJsonSchemaGenerator(Object, BeanFactory)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createJsonSchemaGenerator(Object,PropertyStore,BeanFactory)} method.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The JSON-schema generator builder for this REST resource.
* @throws Exception If JSON-schema generator builder could not be
instantiated.
*/
- protected JsonSchemaGeneratorBuilder
createJsonSchemaGeneratorBuilder(Object resource, BeanFactory beanFactory)
throws Exception {
+ protected JsonSchemaGeneratorBuilder
createJsonSchemaGeneratorBuilder(Object resource, PropertyStore properties,
BeanFactory beanFactory) throws Exception {
JsonSchemaGeneratorBuilder x = JsonSchemaGenerator
.create()
- .apply(getPropertyStore());
+ .apply(properties);
x = BeanFactory
.of(beanFactory, resource)
.addBean(JsonSchemaGeneratorBuilder.class, x)
.beanCreateMethodFinder(JsonSchemaGeneratorBuilder.class, resource)
- .find("createJsonSchemaGenerator")
+ .find("createJsonSchemaGeneratorBuilder")
.withDefault(x)
.run();
@@ -4616,12 +4832,21 @@ public class RestContext extends BeanContext {
* <li class='jf'>{@link #REST_swaggerProvider}
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param fileFinder The file finder configured on this bean created by
{@link #createFileFinder(Object,PropertyStore,BeanFactory)}.
+ * @param messages The localized messages configured on this bean
created by {@link #createMessages(Object,PropertyStore)}.
+ * @param varResolver The variable resolver configured on this bean
created by {@link
#createVarResolver(Object,PropertyStore,BeanFactory,Messages)}.
* @return The info provider for this REST resource.
* @throws Exception If info provider could not be instantiated.
*/
- protected SwaggerProvider createSwaggerProvider(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected SwaggerProvider createSwaggerProvider(Object resource,
PropertyStore properties, BeanFactory beanFactory, FileFinder fileFinder,
Messages messages, VarResolver varResolver) throws Exception {
SwaggerProvider x = null;
@@ -4631,12 +4856,12 @@ public class RestContext extends BeanContext {
if (x == null)
x =
beanFactory.getBean(SwaggerProvider.class).orElse(null);
- Object o = getProperty(REST_swaggerProvider);
+ Object o = properties.getProperty(REST_swaggerProvider);
if (o instanceof SwaggerProvider)
x = (SwaggerProvider)o;
if (x == null)
- x = createSwaggerProviderBuilder(resource,
beanFactory).build();
+ x = createSwaggerProviderBuilder(resource, properties,
beanFactory, fileFinder, messages, varResolver).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -4653,35 +4878,44 @@ public class RestContext extends BeanContext {
* Instantiates the REST API builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createSwaggerProvider(Object, BeanFactory)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link
#createSwaggerProvider(Object,PropertyStore,BeanFactory,FileFinder,Messages,VarResolver)}
method.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param fileFinder The file finder configured on this bean created by
{@link #createFileFinder(Object,PropertyStore,BeanFactory)}.
+ * @param messages The localized messages configured on this bean
created by {@link #createMessages(Object,PropertyStore)}.
+ * @param varResolver The variable resolver configured on this bean
created by {@link
#createVarResolver(Object,PropertyStore,BeanFactory,Messages)}.
* @return The REST API builder for this REST resource.
* @throws Exception If REST API builder could not be instantiated.
*/
@SuppressWarnings("unchecked")
- protected SwaggerProviderBuilder createSwaggerProviderBuilder(Object
resource, BeanFactory beanFactory) throws Exception {
+ protected SwaggerProviderBuilder createSwaggerProviderBuilder(Object
resource, PropertyStore properties, BeanFactory beanFactory, FileFinder
fileFinder, Messages messages, VarResolver varResolver) throws Exception {
Class<? extends SwaggerProvider> c = null;
- Object o = getProperty(REST_swaggerProvider);
+ Object o = properties.getProperty(REST_swaggerProvider);
if (o instanceof Class)
c = (Class<? extends SwaggerProvider>)o;
SwaggerProviderBuilder x = SwaggerProvider
.create()
.beanFactory(beanFactory)
- .fileFinder(getFileFinder())
- .messages(getMessages())
- .varResolver(getVarResolver())
-
.jsonSchemaGenerator(createJsonSchemaGenerator(resource, beanFactory))
+ .fileFinder(fileFinder)
+ .messages(messages)
+ .varResolver(varResolver)
+
.jsonSchemaGenerator(createJsonSchemaGenerator(resource, properties,
beanFactory))
.implClass(c);
x = BeanFactory
.of(beanFactory, resource)
.addBean(SwaggerProviderBuilder.class, x)
.beanCreateMethodFinder(SwaggerProviderBuilder.class,
resource)
- .find("createSwaggerProvider")
+ .find("createSwaggerProviderBuilder")
.withDefault(x)
.run();
@@ -4703,22 +4937,29 @@ public class RestContext extends BeanContext {
* <li>Any {@doc RestInjection injected beans}.
* </ul>
* <li>Resolves it via the bean factory registered in this context.
- * <li>Instantiates a new {@link VarResolver} using the variables
returned by {@link #createVars(Object,BeanFactory)}.
- * </ul>
- *
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * <li>Instantiates a new {@link VarResolver} using the variables
returned by {@link #createVars(Object,PropertyStore,BeanFactory)}.
+ * </ul>
+ *
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param messages The localized messages of this bean.
* @return The variable resolver for this REST resource.
* @throws Exception If variable resolver could not be instantiated.
*/
- protected VarResolver createVarResolver(Object resource, BeanFactory
beanFactory) throws Exception {
+ protected VarResolver createVarResolver(Object resource, PropertyStore
properties, BeanFactory beanFactory, Messages messages) throws Exception {
VarResolver x =
beanFactory.getBean(VarResolver.class).orElse(null);
if (x == null)
x = builder.varResolverBuilder
- .vars(createVars(resource,beanFactory))
- .bean(Messages.class, getMessages())
+ .vars(createVars(resource, properties,
beanFactory))
+ .bean(Messages.class, messages)
.build();
x = BeanFactory
@@ -4749,13 +4990,19 @@ public class RestContext extends BeanContext {
* <li>Instantiates a new {@link VarList} using default variables.
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The variable resolver variables for this REST resource.
* @throws Exception If variable resolver variables could not be
instantiated.
*/
@SuppressWarnings("unchecked")
- protected VarList createVars(Object resource, BeanFactory beanFactory)
throws Exception {
+ protected VarList createVars(Object resource, PropertyStore properties,
BeanFactory beanFactory) throws Exception {
VarList x = beanFactory.getBean(VarList.class).orElse(null);
@@ -4806,17 +5053,26 @@ public class RestContext extends BeanContext {
* <li>Returns {@link ThrownStore#GLOBAL}.
* </ul>
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param parent
+ * The parent context if the REST bean was registered via {@link
Rest#children()}.
+ * <br>Will be <jk>null</jk> if the bean is a top-level resource.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The stack trace store for this REST resource.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected ThrownStore createThrownStore(Object resource, BeanFactory
beanFactory) throws Exception {
+ protected ThrownStore createThrownStore(Object resource, PropertyStore
properties, RestContext parent, BeanFactory beanFactory) throws Exception {
ThrownStore x =
beanFactory.getBean(ThrownStore.class).orElse(null);
if (x == null)
- x = createThrownStoreBuilder(resource,
beanFactory).build();
+ x = createThrownStoreBuilder(resource, properties,
parent, beanFactory).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -4832,23 +5088,34 @@ public class RestContext extends BeanContext {
/**
* Instantiates the thrown exception store builder for this REST
resource.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param parent
+ * The parent context if the REST bean was registered via {@link
Rest#children()}.
+ * <br>Will be <jk>null</jk> if the bean is a top-level resource.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The stack trace store for this REST resource.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected ThrownStoreBuilder createThrownStoreBuilder(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected ThrownStoreBuilder createThrownStoreBuilder(Object resource,
PropertyStore properties, RestContext parent, BeanFactory beanFactory) throws
Exception {
+
+ ThrownStore p = parent == null ? null : parent.thrownStore;
ThrownStoreBuilder x = ThrownStore
.create()
- .parent(parentContext == null ? null :
parentContext.thrownStore)
+ .parent(p)
.beanFactory(beanFactory);
x = BeanFactory
.of(beanFactory, resource)
.addBean(ThrownStoreBuilder.class, x)
.beanCreateMethodFinder(ThrownStoreBuilder.class,
resource)
- .find("createThrownStore")
+ .find("createThrownStoreBuilder")
.withDefault(x)
.run();
@@ -4858,18 +5125,26 @@ public class RestContext extends BeanContext {
/**
* Instantiates the method execution statistics store for this REST
resource.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
- * @param thrownStore The thrown exception stats store.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param thrownStore
+ * The thrown exception statistics store.
+ * <br>Created by {@link
#createThrownStore(Object,PropertyStore,RestContext,BeanFactory)}.
* @return The stack trace store for this REST resource.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected MethodExecStore createMethodExecStore(Object resource,
BeanFactory beanFactory, ThrownStore thrownStore) throws Exception {
+ protected MethodExecStore createMethodExecStore(Object resource,
PropertyStore properties, BeanFactory beanFactory, ThrownStore thrownStore)
throws Exception {
MethodExecStore x =
beanFactory.getBean(MethodExecStore.class).orElse(null);
if (x == null)
- x = createMethodExecStoreBuilder(resource, beanFactory,
thrownStore).build();
+ x = createMethodExecStoreBuilder(resource, properties,
beanFactory, thrownStore).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -4885,13 +5160,21 @@ public class RestContext extends BeanContext {
/**
* Instantiates the method execution statistics store for this REST
resource.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
- * @param thrownStore The thrown exception stats store.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param thrownStore
+ * The thrown exception statistics store.
+ * <br>Created by {@link
#createThrownStore(Object,PropertyStore,RestContext,BeanFactory)}.
* @return The stack trace store for this REST resource.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected MethodExecStoreBuilder createMethodExecStoreBuilder(Object
resource, BeanFactory beanFactory, ThrownStore thrownStore) throws Exception {
+ protected MethodExecStoreBuilder createMethodExecStoreBuilder(Object
resource, PropertyStore properties, BeanFactory beanFactory, ThrownStore
thrownStore) throws Exception {
MethodExecStoreBuilder x = MethodExecStore
.create()
@@ -4902,7 +5185,7 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(MethodExecStoreBuilder.class, x)
.beanCreateMethodFinder(MethodExecStoreBuilder.class,
resource)
- .find("createMethodExecStore")
+ .find("createMethodExecStoreBuilder")
.withDefault(x)
.run();
@@ -4912,16 +5195,22 @@ public class RestContext extends BeanContext {
/**
* Instantiates the default request headers for this REST object.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default request headers for this REST object.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected HeaderList createDefaultRequestHeaders(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected HeaderList createDefaultRequestHeaders(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
HeaderList x = HeaderList.create();
-
x.appendUnique(getInstanceArrayProperty(REST_defaultRequestHeaders,
org.apache.http.Header.class, new org.apache.http.Header[0], beanFactory));
+
x.appendUnique(properties.getInstanceArrayProperty(REST_defaultRequestHeaders,
org.apache.http.Header.class, new org.apache.http.Header[0], beanFactory));
x = BeanFactory
.of(beanFactory, resource)
@@ -4937,16 +5226,22 @@ public class RestContext extends BeanContext {
/**
* Instantiates the default response headers for this REST object.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected HeaderList createDefaultResponseHeaders(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected HeaderList createDefaultResponseHeaders(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
HeaderList x = HeaderList.create();
-
x.appendUnique(getInstanceArrayProperty(REST_defaultResponseHeaders,
org.apache.http.Header.class, new org.apache.http.Header[0], beanFactory));
+
x.appendUnique(properties.getInstanceArrayProperty(REST_defaultResponseHeaders,
org.apache.http.Header.class, new org.apache.http.Header[0], beanFactory));
x = BeanFactory
.of(beanFactory, resource)
@@ -4962,16 +5257,22 @@ public class RestContext extends BeanContext {
/**
* Instantiates the default response headers for this REST object.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
* @throws Exception If stack trace store could not be instantiated.
*/
- protected NamedAttributeList createDefaultRequestAttributes(Object
resource, BeanFactory beanFactory) throws Exception {
+ protected NamedAttributeList createDefaultRequestAttributes(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
NamedAttributeList x = NamedAttributeList.create();
-
x.appendUnique(getInstanceArrayProperty(REST_defaultRequestAttributes,
NamedAttribute.class, new NamedAttribute[0], beanFactory));
+
x.appendUnique(properties.getInstanceArrayProperty(REST_defaultRequestAttributes,
NamedAttribute.class, new NamedAttribute[0], beanFactory));
x = BeanFactory
.of(beanFactory, resource)
@@ -4987,18 +5288,24 @@ public class RestContext extends BeanContext {
/**
* Instantiates the debug enablement bean for this REST object.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The debug enablement bean for this REST object.
* @throws Exception If bean could not be created.
*/
- protected DebugEnablement createDebugEnablement(Object resource,
BeanFactory beanFactory) throws Exception {
+ protected DebugEnablement createDebugEnablement(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
DebugEnablement x = null;
if (resource instanceof DebugEnablement)
x = (DebugEnablement)resource;
- Object o = getProperty(REST_debugEnablement);
+ Object o = properties.getProperty(REST_debugEnablement);
if (o instanceof DebugEnablement)
x = (DebugEnablement)o;
@@ -5006,7 +5313,7 @@ public class RestContext extends BeanContext {
x =
beanFactory.getBean(DebugEnablement.class).orElse(null);
if (x == null)
- x = createDebugEnablementBuilder(resource,
beanFactory).build();
+ x = createDebugEnablementBuilder(resource, properties,
beanFactory).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -5022,17 +5329,23 @@ public class RestContext extends BeanContext {
/**
* Instantiates the debug enablement bean builder for this REST object.
*
- * @param resource The REST resource object.
- * @param beanFactory The bean factory to use for retrieving and
creating beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The debug enablement bean builder for this REST object.
* @throws Exception If bean builder could not be created.
*/
@SuppressWarnings("unchecked")
- protected DebugEnablementBuilder createDebugEnablementBuilder(Object
resource, BeanFactory beanFactory) throws Exception {
+ protected DebugEnablementBuilder createDebugEnablementBuilder(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
Class<? extends DebugEnablement> c = null;
- Object o = getProperty(REST_debugEnablement);
+ Object o = properties.getProperty(REST_debugEnablement);
if (o instanceof Class)
c = (Class<? extends DebugEnablement>)o;
@@ -5048,16 +5361,16 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(DebugEnablementBuilder.class, x)
.beanCreateMethodFinder(DebugEnablementBuilder.class,
resource)
- .find("createDebugEnablement")
+ .find("createDebugEnablementBuilder")
.withDefault(x)
.run();
- Enablement defaultDebug = getInstanceProperty(REST_debug,
Enablement.class, getInstanceProperty(REST_debugDefault, Enablement.class,
null));
+ Enablement defaultDebug =
properties.getInstanceProperty(REST_debug, Enablement.class,
properties.getInstanceProperty(REST_debugDefault, Enablement.class, null));
if (defaultDebug == null)
defaultDebug = isDebug() ? Enablement.ALWAYS :
Enablement.NEVER;
x.defaultEnable(defaultDebug);
- for (Map.Entry<String,String> e :
splitMap(getStringProperty(REST_debugOn, ""), true).entrySet()) {
+ for (Map.Entry<String,String> e :
splitMap(properties.getStringProperty(REST_debugOn, ""), true).entrySet()) {
String k = e.getKey(), v = e.getValue();
if (v.isEmpty())
v = "ALWAYS";
@@ -5076,13 +5389,17 @@ public class RestContext extends BeanContext {
/**
* Instantiates the messages for this REST object.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
* @return The messages for this REST object.
* @throws Exception An error occurred.
*/
- protected Messages createMessages(Object resource) throws Exception {
+ protected Messages createMessages(Object resource, PropertyStore
properties) throws Exception {
- Messages x = createMessagesBuilder(resource).build();
+ Messages x = createMessagesBuilder(resource,
properties).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -5099,15 +5416,19 @@ public class RestContext extends BeanContext {
* Instantiates the Messages builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createMessages(Object)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createMessages(Object,PropertyStore)} method.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
* @return The messages builder for this REST resource.
* @throws Exception If messages builder could not be instantiated.
*/
- protected MessagesBuilder createMessagesBuilder(Object resource) throws
Exception {
+ protected MessagesBuilder createMessagesBuilder(Object resource,
PropertyStore properties) throws Exception {
- Tuple2<Class<?>,String>[] mbl =
getInstanceArrayProperty(REST_messages, Tuple2.class);
+ Tuple2<Class<?>,String>[] mbl =
properties.getInstanceArrayProperty(REST_messages, Tuple2.class);
MessagesBuilder x = null;
for (int i = mbl.length-1; i >= 0; i--) {
@@ -5128,7 +5449,7 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(MessagesBuilder.class, x)
.beanCreateMethodFinder(MessagesBuilder.class, resource)
- .find("createMessages")
+ .find("createMessagesBuilder")
.withDefault(x)
.run();
@@ -5144,13 +5465,20 @@ public class RestContext extends BeanContext {
/**
* Creates the set of {@link RestOperationContext} objects that
represent the methods on this resource.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The builder for the {@link RestOperations} object.
* @throws Exception An error occurred.
*/
- protected RestOperations createRestOperations(Object resource) throws
Exception {
+ protected RestOperations createRestOperations(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
- RestOperations x =
createRestOperationsBuilder(resource).build();
+ RestOperations x = createRestOperationsBuilder(resource,
properties, beanFactory).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -5167,18 +5495,25 @@ public class RestContext extends BeanContext {
* Instantiates the REST methods builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createRestOperations(Object)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createRestOperations(Object,PropertyStore,BeanFactory)} method.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The REST methods builder for this REST resource.
* @throws Exception If REST methods builder could not be instantiated.
*/
- protected RestOperationsBuilder createRestOperationsBuilder(Object
resource) throws Exception {
+ protected RestOperationsBuilder createRestOperationsBuilder(Object
resource, PropertyStore properties, BeanFactory beanFactory) throws Exception {
RestOperationsBuilder x = RestOperations
.create()
- .beanFactory(rootBeanFactory)
- .implClass(getClassProperty(REST_restOperationsClass,
RestOperations.class));
+ .beanFactory(beanFactory)
+
.implClass(properties.getClassProperty(REST_restOperationsClass, null));
ClassInfo rci = ClassInfo.of(resource);
@@ -5201,8 +5536,8 @@ public class RestContext extends BeanContext {
RestOperationContext roc =
RestOperationContext
.create(mi.inner(), this)
- .beanFactory(rootBeanFactory)
-
.implClass(getClassProperty(REST_restOperationContextClass,
RestOperationContext.class))
+ .beanFactory(beanFactory)
+
.implClass(properties.getClassProperty(REST_restOperationContextClass,
RestOperationContext.class))
.build();
String httpMethod = roc.getHttpMethod();
@@ -5235,7 +5570,7 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(RestOperationsBuilder.class, x)
.beanCreateMethodFinder(RestOperationsBuilder.class,
resource)
- .find("createRestOperations")
+ .find("createRestOperationsBuilder")
.withDefault(x)
.run();
@@ -5245,13 +5580,22 @@ public class RestContext extends BeanContext {
/**
* Creates the builder for the children of this resource.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param servletConfig
+ * The servlet config passed into the servlet by the servlet
container.
* @return The builder for the {@link RestChildren} object.
* @throws Exception An error occurred.
*/
- protected RestChildren createRestChildren(Object resource) throws
Exception {
+ protected RestChildren createRestChildren(Object resource,
PropertyStore properties, BeanFactory beanFactory, ServletConfig servletConfig)
throws Exception {
- RestChildren x = createRestChildrenBuilder(resource).build();
+ RestChildren x = createRestChildrenBuilder(resource,
properties, beanFactory, servletConfig).build();
x = BeanFactory
.of(beanFactory, resource)
@@ -5268,18 +5612,27 @@ public class RestContext extends BeanContext {
* Instantiates the REST children builder for this REST resource.
*
* <p>
- * Allows subclasses to intercept and modify the builder used by the
{@link #createRestChildren(Object)} method.
+ * Allows subclasses to intercept and modify the builder used by the
{@link #createRestChildren(Object,PropertyStore,BeanFactory,ServletConfig)}
method.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
+ * @param servletConfig
+ * The servlet config passed into the servlet by the servlet
container.
* @return The REST children builder for this REST resource.
* @throws Exception If REST children builder could not be instantiated.
*/
- protected RestChildrenBuilder createRestChildrenBuilder(Object
resource) throws Exception {
+ protected RestChildrenBuilder createRestChildrenBuilder(Object
resource, PropertyStore properties, BeanFactory beanFactory, ServletConfig
servletConfig) throws Exception {
RestChildrenBuilder x = RestChildren
.create()
- .beanFactory(rootBeanFactory)
- .implClass(getClassProperty(REST_restChildrenClass,
RestChildren.class));
+ .beanFactory(beanFactory)
+
.implClass(properties.getClassProperty(REST_restChildrenClass,
RestChildren.class));
// Initialize our child resources.
for (Object o : getArrayProperty(REST_children, Object.class)) {
@@ -5298,7 +5651,7 @@ public class RestContext extends BeanContext {
// Don't allow specifying yourself as a child.
Causes an infinite loop.
if (oc == builder.resourceClass)
continue;
- cb = RestContext.create(this, builder.inner,
oc, null);
+ cb = RestContext.create(this, servletConfig,
oc, null);
BeanFactory bf = BeanFactory.of(beanFactory,
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.
@@ -5306,7 +5659,7 @@ public class RestContext extends BeanContext {
o = bf.createBean(oc);
}
} else {
- cb = RestContext.create(this, builder.inner,
o.getClass(), o);
+ cb = RestContext.create(this, servletConfig,
o.getClass(), o);
}
if (path != null)
@@ -5325,7 +5678,7 @@ public class RestContext extends BeanContext {
.of(beanFactory, resource)
.addBean(RestChildrenBuilder.class, x)
.beanCreateMethodFinder(RestChildrenBuilder.class,
resource)
- .find("createRestChildren")
+ .find("createRestChildrenBuilder")
.withDefault(x)
.run();
@@ -5335,10 +5688,18 @@ public class RestContext extends BeanContext {
/**
* Instantiates the list of {@link HookEvent#START_CALL} methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createStartCallMethods(Object resource) {
+ protected MethodList createStartCallMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5346,16 +5707,34 @@ public class RestContext extends BeanContext {
if (h.value() == HookEvent.START_CALL)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createStartCallMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
* Instantiates the list of {@link HookEvent#END_CALL} methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createEndCallMethods(Object resource) {
+ protected MethodList createEndCallMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5363,16 +5742,34 @@ public class RestContext extends BeanContext {
if (h.value() == HookEvent.END_CALL)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createEndCallMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
* Instantiates the list of {@link HookEvent#POST_INIT} methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createPostInitMethods(Object resource) {
+ protected MethodList createPostInitMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5380,16 +5777,34 @@ public class RestContext extends BeanContext {
if (h.value() == HookEvent.POST_INIT)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createPostInitMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
* Instantiates the list of {@link HookEvent#POST_INIT_CHILD_FIRST}
methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createPostInitChildFirstMethods(Object resource)
{
+ protected MethodList createPostInitChildFirstMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5397,16 +5812,34 @@ public class RestContext extends BeanContext {
if (h.value() ==
HookEvent.POST_INIT_CHILD_FIRST)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createPostInitChildFirstMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
* Instantiates the list of {@link HookEvent#DESTROY} methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createDestroyMethods(Object resource) {
+ protected MethodList createDestroyMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5414,16 +5847,34 @@ public class RestContext extends BeanContext {
if (h.value() == HookEvent.DESTROY)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createDestroyMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
* Instantiates the list of {@link HookEvent#PRE_CALL} methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createPreCallMethods(Object resource) {
+ protected MethodList createPreCallMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5431,16 +5882,34 @@ public class RestContext extends BeanContext {
if (h.value() == HookEvent.PRE_CALL)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createPreCallMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
* Instantiates the list of {@link HookEvent#POST_CALL} methods.
*
- * @param resource The REST resource object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @param properties
+ * The properties of this bean.
+ * <br>Consists of all properties gathered through the builder and
annotations on this class and all parent classes.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The default response headers for this REST object.
+ * @throws Exception If list could not be instantiated.
*/
- protected List<Method> createPostCallMethods(Object resource) {
+ protected MethodList createPostCallMethods(Object resource,
PropertyStore properties, BeanFactory beanFactory) throws Exception {
Map<String,Method> x = AMap.create();
for (MethodInfo m :
ClassInfo.ofProxy(resource).getAllMethodsParentFirst())
@@ -5448,7 +5917,17 @@ public class RestContext extends BeanContext {
if (h.value() == HookEvent.POST_CALL)
x.put(m.getSignature(),
m.accessible().inner());
- return AList.of(x.values());
+ MethodList x2 = MethodList.of(x.values());
+
+ x2 = BeanFactory
+ .of(beanFactory, resource)
+ .addBean(MethodList.class, x2)
+ .beanCreateMethodFinder(MethodList.class, resource)
+ .find("createPostCallMethods")
+ .withDefault(x2)
+ .run();
+
+ return x2;
}
/**
@@ -5616,7 +6095,7 @@ public class RestContext extends BeanContext {
* <br>Never <jk>null</jk>.
*/
public Messages getMessages() {
- return msgs;
+ return messages;
}
/**
@@ -5651,15 +6130,6 @@ public class RestContext extends BeanContext {
}
/**
- * Returns the parent resource context (if this resource was
initialized from a parent).
- *
- * @return The parent resource context, or <jk>null</jk> if there is no
parent context.
- */
- public RestContext getParentContext() {
- return parentContext;
- }
-
- /**
* Returns the servlet init parameter returned by {@link
ServletConfig#getInitParameter(String)}.
*
* @param name The init parameter name.
@@ -6098,7 +6568,9 @@ public class RestContext extends BeanContext {
* Finds the {@link RestOperationParam} instances to handle resolving
objects on the calls to the specified Java method.
*
* @param m The Java method being called.
- * @param beanFactory The method context bean factory.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The array of resolvers.
*/
protected RestOperationParam[] findRestOperationParams(Method m,
BeanFactory beanFactory) {
@@ -6132,7 +6604,9 @@ public class RestContext extends BeanContext {
* Finds the {@link RestOperationParam} instances to handle resolving
objects on pre-call and post-call Java methods.
*
* @param m The Java method being called.
- * @param beanFactory The method context bean factory.
+ * @param beanFactory
+ * The factory used for creating beans and retrieving injected
beans.
+ * <br>Created by {@link
#createBeanFactory(Object,PropertyStore,RestContext)}.
* @return The array of resolvers.
*/
protected RestOperationParam[] findHookMethodParams(Method m,
BeanFactory beanFactory) {
@@ -6171,7 +6645,8 @@ public class RestContext extends BeanContext {
* <p>
* This is the first method called by {@link #execute(Object,
HttpServletRequest, HttpServletResponse)}.
*
- * @param resource The REST object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
* @param req The rest request.
* @param res The rest response.
* @return The wrapped request/response pair.
@@ -6212,7 +6687,9 @@ public class RestContext extends BeanContext {
* <p>
* Subclasses can optionally override this method if they want to
tailor the behavior of requests.
*
- * @param resource The REST object.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * <br>Note that this bean may not be the same bean used during
initialization as it may have been replaced at runtime.
* @param r1 The incoming HTTP servlet request object.
* @param r2 The incoming HTTP servlet response object.
* @throws ServletException General servlet exception.
@@ -6236,7 +6713,7 @@ public class RestContext extends BeanContext {
// those variables and push the servletPath to include
the resolved variables. The new pathInfo will be
// the remainder after the new servletPath.
// Only do this for the top-level resource because the
logic for child resources are processed next.
- if (pathMatcher.hasVars() && getParentContext() ==
null) {
+ if (pathMatcher.hasVars() && parentContext == null) {
String sp = call.getServletPath();
String pi = call.getPathInfoUndecoded();
UrlPath upi2 = UrlPath.of(pi == null ? sp : sp
+ pi);