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 8505d89 Context API refactoring.
8505d89 is described below
commit 8505d89f361d4028e28810456b5122218502496f
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 12 19:35:40 2021 -0400
Context API refactoring.
---
.../java/org/apache/juneau/rest/RestContext.java | 53 +------------
.../org/apache/juneau/rest/RestContextBuilder.java | 87 ++++++++++++++++++++--
2 files changed, 83 insertions(+), 57 deletions(-)
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 61d1b94..ab3abc0 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
@@ -53,7 +53,6 @@ import org.apache.juneau.mstat.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.args.*;
import org.apache.juneau.rest.logging.*;
import org.apache.juneau.http.header.*;
import org.apache.juneau.http.response.*;
@@ -266,11 +265,10 @@ public class RestContext extends Context {
defaultResponseHeaders =
bs.add("RestContext.defaultResponseHeaders",
builder.defaultResponseHeaders().build());
defaultRequestAttributes =
bs.add("RestContext.defaultRequestAttributes",
builder.defaultRequestAttributes());
restOpArgs = builder.restOpArgs().build().asArray();
+ hookMethodArgs =
builder.hookMethodArgs().build().asArray();
Object r = resource.get();
- hookMethodArgs = createHookMethodArgs(r, builder,
bs).asArray();
-
uriContext = builder.uriContext;
uriAuthority = builder.uriAuthority;
uriResolution = builder.uriResolution;
@@ -361,55 +359,6 @@ public class RestContext extends Context {
}
/**
- * Instantiates the hook method parameter resolvers for this REST
resource.
- *
- * @param resource
- * The REST servlet or bean that this context defines.
- * @param builder
- * The builder for this object.
- * @param beanStore
- * The factory used for creating beans and retrieving injected
beans.
- * <br>Created by {@link RestContextBuilder#beanStore()}.
- * @return The REST method parameter resolvers for this REST resource.
- * @throws Exception If parameter resolvers could not be instantiated.
- */
- protected RestOpArgList createHookMethodArgs(Object resource,
RestContextBuilder builder, BeanStore beanStore) throws Exception {
-
- RestOpArgList.Builder x = RestOpArgList.create();
-
- x.add(
- ConfigArg.class,
- HeaderArg.class,
- HttpServletRequestArg.class,
- HttpServletResponseArg.class,
- InputStreamArg.class,
- LocaleArg.class,
- MessagesArg.class,
- MethodArg.class,
- OutputStreamArg.class,
- ReaderArg.class,
- ResourceBundleArg.class,
- RestContextArg.class,
- RestRequestArg.class,
- ServetInputStreamArg.class,
- ServletOutputStreamArg.class,
- TimeZoneArg.class,
- WriterArg.class,
- DefaultArg.class
- );
-
- x = BeanStore
- .of(beanStore, resource)
- .addBean(RestOpArgList.Builder.class, x)
- .beanCreateMethodFinder(RestOpArgList.Builder.class,
resource)
- .find("createHookMethodArgs")
- .withDefault(x)
- .run();
-
- return x.build();
- }
-
- /**
* Instantiates the REST info provider for this REST resource.
*
* <p>
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 989b6dc..ff04570 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -137,10 +137,9 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
private JsonSchemaGeneratorBuilder jsonSchemaGenerator;
private FileFinder.Builder fileFinder;
private StaticFiles.Builder staticFiles;
- private HeaderList.Builder defaultRequestHeaders;
- private HeaderList.Builder defaultResponseHeaders;
+ private HeaderList.Builder defaultRequestHeaders,
defaultResponseHeaders;
private NamedAttributeList defaultRequestAttributes;
- private RestOpArgList.Builder restOpArgs;
+ private RestOpArgList.Builder restOpArgs, hookMethodArgs;
String
allowedHeaderParams = env("RestContext.allowedHeaderParams",
"Accept,Content-Type"),
@@ -2482,7 +2481,7 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
Value<RestOpArgList.Builder> v = Value.empty();
Object r = resource.get();
- beanStore.getBean(RestOpArgList.Builder.class).map(x ->
x.copy()).ifPresent(x -> v.set(x));
+ beanStore.getBean("RestContext.restOpArgs",
RestOpArgList.Builder.class).map(x -> x.copy()).ifPresent(x -> v.set(x));
if (v.isEmpty()) {
v.set(
@@ -2533,7 +2532,7 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
);
}
- beanStore.getBean(RestOpArgList.class).ifPresent(x ->
v.get().impl(x));
+ beanStore.getBean("RestContext.restOpArgs",
RestOpArgList.class).ifPresent(x -> v.get().impl(x));
BeanStore
.of(beanStore, r)
@@ -2554,6 +2553,84 @@ public class RestContextBuilder extends ContextBuilder
implements ServletConfig
return v.get();
}
+
//-----------------------------------------------------------------------------------------------------------------
+ // hookMethodArgs
+
//-----------------------------------------------------------------------------------------------------------------
+
+ /**
+ * Returns the builder for the default requests attributes in the REST
context.
+ *
+ * @return The builder for the default request attributer object in the
REST context.
+ */
+ public final RestOpArgList.Builder hookMethodArgs() {
+ if (hookMethodArgs == null)
+ hookMethodArgs = createHookMethodArgs(beanStore(),
resource());
+ return hookMethodArgs;
+ }
+
+ /**
+ * Instantiates the hook method parameter resolvers for this REST
resource.
+ *
+ * @param beanStore
+ * The factory used for creating beans and retrieving injected
beans.
+ * @param resource
+ * The REST servlet or bean that this context defines.
+ * @return The REST method parameter resolvers for this REST resource.
+ */
+ protected RestOpArgList.Builder createHookMethodArgs(BeanStore
beanStore, Supplier<?> resource) {
+
+
+ Value<RestOpArgList.Builder> v = Value.empty();
+ Object r = resource.get();
+
+ beanStore.getBean("RestContext.hookMethodArgs",
RestOpArgList.Builder.class).map(x -> x.copy()).ifPresent(x -> v.set(x));
+
+ if (v.isEmpty()) {
+ v.set(
+ RestOpArgList
+ .of(
+ ConfigArg.class,
+ HeaderArg.class,
+ HttpServletRequestArg.class,
+ HttpServletResponseArg.class,
+ InputStreamArg.class,
+ LocaleArg.class,
+ MessagesArg.class,
+ MethodArg.class,
+ OutputStreamArg.class,
+ ReaderArg.class,
+ ResourceBundleArg.class,
+ RestContextArg.class,
+ RestRequestArg.class,
+ ServetInputStreamArg.class,
+ ServletOutputStreamArg.class,
+ TimeZoneArg.class,
+ WriterArg.class,
+ DefaultArg.class
+ )
+ );
+ }
+
+ beanStore.getBean("RestContext.hookMethodArgs",
RestOpArgList.class).ifPresent(x -> v.get().impl(x));
+
+ BeanStore
+ .of(beanStore, r)
+ .addBean(RestOpArgList.Builder.class, v.get())
+ .beanCreateMethodFinder(RestOpArgList.Builder.class, r)
+ .find("createHookMethodArgs")
+ .execute()
+ .ifPresent(x -> v.set(x));
+
+ BeanStore
+ .of(beanStore, r)
+ .addBean(RestOpArgList.Builder.class, v.get())
+ .beanCreateMethodFinder(RestOpArgList.class, r)
+ .find("createHookMethodArgs")
+ .execute()
+ .ifPresent(x -> v.get().impl(x));
+
+ return v.get();
+ }
//----------------------------------------------------------------------------------------------------
// Methods that give access to the config file, var resolver, and
properties.