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 0bc8874 REST refactoring.
0bc8874 is described below
commit 0bc8874be4647a1dc54fb4d888d9ce4f979bf36f
Author: JamesBognar <[email protected]>
AuthorDate: Sun Jan 24 12:45:52 2021 -0500
REST refactoring.
---
.../java/org/apache/juneau/rest/BasicFileFinder.java | 4 ++--
.../apache/juneau/rest/BasicRestInfoProvider.java | 2 +-
.../org/apache/juneau/rest/BasicStaticFiles.java | 4 ++--
.../java/org/apache/juneau/rest/RestContext.java | 20 ++++++++++++++++++--
.../org/apache/juneau/rest/RestContextBuilder.java | 11 ++++++-----
.../apache/juneau/rest/RestMethodContextBuilder.java | 2 +-
.../java/org/apache/juneau/rest/RestRequest.java | 9 +++++++++
.../org/apache/juneau/rest/SwaggerGenerator.java | 6 ++----
.../java/org/apache/juneau/rest/vars/RequestVar.java | 4 ++--
9 files changed, 43 insertions(+), 19 deletions(-)
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
index 3b9ebc7..961ad48 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicFileFinder.java
@@ -44,8 +44,8 @@ public class BasicFileFinder extends FileFinder {
.create()
.dir("static")
.dir("htdocs")
- .cp(context.getResource().getClass(), "htdocs", true)
- .cp(context.getResource().getClass(), "/htdocs", true)
+ .cp(context.getResourceClass(), "htdocs", true)
+ .cp(context.getResourceClass(), "/htdocs", true)
.caching(1_000_000)
.exclude("(?i).*\\.(class|properties)")
);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
index 299ab68..d48f812 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestInfoProvider.java
@@ -66,7 +66,7 @@ public class BasicRestInfoProvider implements
RestInfoProvider {
description;
Builder(RestContext context) {
- ClassInfo ci = ClassInfo.ofProxy(context.getResource());
+ ClassInfo ci = ClassInfo.of(context.getResourceClass());
for (Rest r : ci.getAnnotations(Rest.class)) {
if (! r.siteName().isEmpty())
siteName = r.siteName();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
index eb1f7f1..b3e091c 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicStaticFiles.java
@@ -47,8 +47,8 @@ public class BasicStaticFiles extends StaticFiles {
.create()
.dir("static")
.dir("htdocs")
- .cp(context.getResource().getClass(), "htdocs", true)
- .cp(context.getResource().getClass(), "/htdocs", true)
+ .cp(context.getResourceClass(), "htdocs", true)
+ .cp(context.getResourceClass(), "/htdocs", true)
.caching(1_000_000)
.exclude("(?i).*\\.(class|properties)")
.headers(CacheControl.of("max-age=86400, public"))
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 9c103d9..d70c08e 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
@@ -3385,6 +3385,7 @@ public class RestContext extends BeanContext {
//-------------------------------------------------------------------------------------------------------------------
private final Supplier<?> resource;
+ private final Class<?> resourceClass;
final RestContextBuilder builder;
private final boolean
@@ -3495,7 +3496,8 @@ public class RestContext extends BeanContext {
try {
this.builder = builder;
- this.resource = builder.resource instanceof Supplier ?
(Supplier<?>)builder.resource : ()->builder.resource;
+ this.resourceClass = builder.resourceClass;
+ this.resource = builder.resource;
Object r = getResource();
parentContext = builder.parentContext;
@@ -4842,7 +4844,12 @@ public class RestContext extends BeanContext {
if (oc == builder.resourceClass)
continue;
cb = RestContext.create(this, builder.inner,
oc, null);
- o = BeanFactory.of(beanFactory,
resource).addBean(RestContextBuilder.class, cb).createBean(oc);
+ 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.
+ } else {
+ o = bf.createBean(oc);
+ }
} else {
cb = RestContext.create(this, builder.inner,
o.getClass(), o);
}
@@ -5597,6 +5604,15 @@ public class RestContext extends BeanContext {
}
/**
+ * Returns the resource class type.
+ *
+ * @return The resource class type.
+ */
+ public Class<?> getResourceClass() {
+ return resourceClass;
+ }
+
+ /**
* Returns the timing information returned by {@link
#getMethodExecStats()} in a readable format.
*
* @return A report of all method execution times ordered by .
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 be2f879..06b8e92 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
@@ -106,7 +106,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
// Read-only snapshots of these will be made in RestServletContext.
//-----------------------------------------------------------------------------------------------------------------
- Object resource;
+ Supplier<?> resource;
ServletContext servletContext;
Config config;
@@ -185,7 +185,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
try {
PropertyStore ps = getPropertyStore();
Class<? extends RestContext> c =
ps.getClassProperty(REST_contextClass, RestContext.class, RestContext.class);
- BeanFactory bf = BeanFactory.of(beanFactory, resource);
+ BeanFactory bf = BeanFactory.of(beanFactory,
resource.get());
bf.addBean(RestContextBuilder.class, this);
return bf.createBean(c);
} catch (Exception e) {
@@ -228,8 +228,9 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
protected Config createConfig(Class<?> resourceClass, BeanFactory
beanFactory) throws Exception {
ClassInfo rci = ClassInfo.of(resourceClass);
Config x = null;
- if (resource instanceof Config)
- x = (Config)resource;
+ Object o = resource == null ? null : resource.get();
+ if (o instanceof Config)
+ x = (Config)o;
if (x == null)
x = beanFactory.getBean(Config.class).orElse(null);
@@ -257,7 +258,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
* Calls all @RestHook(INIT) methods on the specified resource object.
*/
RestContextBuilder init(Object resource) throws ServletException {
- this.resource = resource;
+ this.resource = resource instanceof Supplier ?
(Supplier<?>)resource : ()->resource;
ClassInfo rci = ClassInfo.ofProxy(resource);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
index a542074..f923dd0 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
@@ -64,7 +64,7 @@ public class RestMethodContextBuilder extends
BeanContextBuilder {
this.beanFactory = context.rootBeanFactory;
String sig = method.getDeclaringClass().getName() + '.' +
method.getName();
- MethodInfo mi = MethodInfo.of(context.getResource().getClass(),
method);
+ MethodInfo mi = MethodInfo.of(context.getResourceClass(),
method);
try {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index b61c981..d26a95c 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -1633,6 +1633,15 @@ public final class RestRequest extends
HttpServletRequestWrapper {
return inner;
}
+ /**
+ * Returns the REST object of this call.
+ *
+ * @return The REST object of this call.
+ */
+ public Object getResource() {
+ return call.getResource();
+ }
+
<T> ClassMeta<T> getClassMeta(Type type, Type[] args) {
return beanSession.getClassMeta(type, args);
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
index a9d9016..6e2a216 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
@@ -61,7 +61,6 @@ final class SwaggerGenerator {
private final JsonParser jp =
JsonParser.create().ignoreUnknownBeanProperties().build();
private final JsonSchemaGeneratorSession js;
private final Class<?> c;
- private final Object resource;
private final Messages mb;
private final FileFinder fileFinder;
@@ -78,8 +77,7 @@ final class SwaggerGenerator {
this.locale = locale;
this.context = context;
this.js = context.getJsonSchemaGenerator().createSession();
- this.c = context.getResource().getClass();
- this.resource = context.getResource();
+ this.c = context.getResourceClass();
this.mb = context.getMessages().forLocale(locale);
this.fileFinder = fileFinder == null ? context.getFileFinder()
: fileFinder;
}
@@ -97,7 +95,7 @@ final class SwaggerGenerator {
*/
public Swagger getSwagger() throws Exception {
- ClassInfo rci = ClassInfo.ofProxy(resource);
+ ClassInfo rci = ClassInfo.of(c);
rci.getSimpleName();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
index 861dbec..ace5013 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestVar.java
@@ -117,9 +117,9 @@ public class RequestVar extends MultipartResolvingVar {
return req.getResourceTitle();
} else if (c == 's') {
if ("servletClass".equals(key))
- return
req.getContext().getResource().getClass().getName();
+ return
req.getContext().getResourceClass().getName();
if ("servletClassSimple".equals(key))
- return
req.getContext().getResource().getClass().getSimpleName();
+ return
req.getContext().getResourceClass().getSimpleName();
if ("servletParentURI".equals(key))
return
req.getUriContext().getRootRelativeServletPathParent();
if ("servletPath".equals(key))