You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/08/01 13:56:07 UTC
incubator-juneau git commit: Allow various REST classes to be
constructed as inner classes of servlets.
Repository: incubator-juneau
Updated Branches:
refs/heads/master dd919b241 -> 3f929b0a1
Allow various REST classes to be constructed as inner classes of
servlets.
Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/3f929b0a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/3f929b0a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/3f929b0a
Branch: refs/heads/master
Commit: 3f929b0a1899dffc91c2c30cff0bf0bbb73e3e4d
Parents: dd919b2
Author: JamesBognar <ja...@apache.org>
Authored: Tue Aug 1 09:56:01 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Tue Aug 1 09:56:01 2017 -0400
----------------------------------------------------------------------
juneau-core/src/main/javadoc/overview.html | 17 +++++++++--
.../org/apache/juneau/rest/RestContext.java | 32 ++++++++------------
2 files changed, 26 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3f929b0a/juneau-core/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html
index e61feaf..cbe82f4 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -6814,7 +6814,7 @@
<h5 class='toc'>What's new in each release</h5>
<ul class='toc'>
<li><p><a class='doclink' href='#6.3.2'>6.3.2 (TBD)</a></p>
- <li><p><a class='doclink' href='#6.3.1'>6.3.1 (TBD)</a></p>
+ <li><p><a class='doclink' href='#6.3.1'>6.3.1 (Aug 1, 2017)</a></p>
<li><p><a class='doclink' href='#6.3.0'>6.3.0 (Jun 30, 2017)</a></p>
<li><p><a class='doclink' href='#6.2.0'>6.2.0 (Apr 28, 2017)</a></p>
<li><p><a class='doclink' href='#6.1.0'>6.1.0 (Feb 25, 2017)</a></p>
@@ -6938,9 +6938,20 @@
<br>Allows you to specify a resource resolver on the servlet context to make it easier to work with
dependency injection frameworks.
<li>
- {@link org.apache.juneau.rest.widget.Widget} classes can now be defined as inner classes of servlets/resources.
+ The following implementation classes can now be defined as non-static inner classes of servlets/resources:
+ <ul>
+ <li>{@link org.apache.juneau.rest.widget.Widget}
+ <li>{@link org.apache.juneau.rest.RestConverter}
+ <li>{@link org.apache.juneau.rest.RestGuard}
+ <li>{@link org.apache.juneau.rest.ResponseHandler}
+ <li>{@link org.apache.juneau.rest.RestCallHandler}
+ <li>{@link org.apache.juneau.rest.RestInfoProvider}
+ <li>{@link org.apache.juneau.rest.RestResourceResolver}
+ <li>{@link org.apache.juneau.rest.RestLogger}
+ <li>{@link org.apache.juneau.html.HtmlDocTemplate}
+ </ul>
<li>
- New tooltip template: {@link org.apache.juneau.rest.widget.Tooltip}.
+ New tooltip template: {@link org.apache.juneau.rest.widget.Tooltip}
</ul>
<h6 class='topic'>org.apache.juneau.rest.microservice</h6>
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3f929b0a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
index fbd1f7f..d70b295 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -475,7 +475,7 @@ public final class RestContext extends Context {
this.callRouters = Collections.unmodifiableMap(_callRouters);
// Initialize our child resources.
- resourceResolver = resolve(RestResourceResolver.class, b.resourceResolver);
+ resourceResolver = resolve(resource, RestResourceResolver.class, b.resourceResolver);
for (Object o : config.childResources) {
String path = null;
Object r = null;
@@ -530,8 +530,8 @@ public final class RestContext extends Context {
}
}
- callHandler = config.callHandler == null ? new RestCallHandler(this) : resolve(RestCallHandler.class, config.callHandler, this);
- infoProvider = config.infoProvider == null ? new RestInfoProvider(this) : resolve(RestInfoProvider.class, config.infoProvider, this);
+ callHandler = config.callHandler == null ? new RestCallHandler(this) : resolve(resource, RestCallHandler.class, config.callHandler, this);
+ infoProvider = config.infoProvider == null ? new RestInfoProvider(this) : resolve(resource, RestInfoProvider.class, config.infoProvider, this);
} catch (RestException e) {
_initException = e;
@@ -623,7 +623,7 @@ public final class RestContext extends Context {
pojoSwaps = toObjectArray(sc.pojoSwaps, Class.class);
for (Class<?> c : sc.paramResolvers) {
- RestParam rp = newInstance(RestParam.class, c);
+ RestParam rp = newInstanceFromOuter(resource, RestParam.class, c);
paramResolvers.put(rp.forClass(), rp);
}
@@ -658,13 +658,13 @@ public final class RestContext extends Context {
beanContext = ps.getBeanContext();
for (Object o : sc.converters)
- converters.add(resolve(RestConverter.class, o));
+ converters.add(resolve(resource, RestConverter.class, o));
for (Object o : sc.guards)
- guards.add(resolve(RestGuard.class, o));
+ guards.add(resolve(resource, RestGuard.class, o));
for (Object o : sc.responseHandlers)
- responseHandlers.add(resolve(ResponseHandler.class, o));
+ responseHandlers.add(resolve(resource, ResponseHandler.class, o));
mimetypesFileTypeMap = sc.mimeTypes;
@@ -697,13 +697,13 @@ public final class RestContext extends Context {
}
staticFilesPrefixes = staticFilesMap.keySet().toArray(new String[0]);
- logger = sc.logger == null ? new RestLogger.NoOp() : resolve(RestLogger.class, sc.logger);
+ logger = sc.logger == null ? new RestLogger.NoOp() : resolve(resource, RestLogger.class, sc.logger);
fullPath = (sc.parentContext == null ? "" : (sc.parentContext.fullPath + '/')) + sc.path;
this.htmlWidgets = new LinkedHashMap<String,Widget>();
for (Class<? extends Widget> wc : sc.htmlWidgets) {
- Widget w = ClassUtils.newInstanceFromOuter(resource, Widget.class, wc);
+ Widget w = resolve(resource, Widget.class, wc);
this.htmlWidgets.put(w.getName(), w);
}
@@ -717,7 +717,7 @@ public final class RestContext extends Context {
htmlFooter = sc.htmlFooter;
htmlNoWrap = sc.htmlNoWrap;
htmlNoResultsMessage = sc.htmlNoResultsMessage;
- htmlTemplate = ClassUtils.newInstance(HtmlDocTemplate.class, sc.htmlTemplate);
+ htmlTemplate = resolve(resource, HtmlDocTemplate.class, sc.htmlTemplate);
}
}
@@ -1787,17 +1787,9 @@ public final class RestContext extends Context {
/**
* Takes in an object of type T or a Class<T> and either casts or constructs a T.
*/
- @SuppressWarnings("unchecked")
- private static <T> T resolve(Class<T> c, Object o, Object...cArgs) throws RestServletException {
- if (c.isInstance(o))
- return (T)o;
- if (! (o instanceof Class))
- throw new RestServletException("Invalid object type passed to resolve: ''{0}''. Must be an object of type T or a Class<? extend T>.", o.getClass());
- Constructor<T> n = findPublicConstructor((Class<T>)o, cArgs);
- if (n == null)
- throw new RestServletException("Could not find public constructor for class ''{0}'' that takes in args {1}", c, JsonSerializer.DEFAULT_LAX.toString(getClasses(cArgs)));
+ private static <T> T resolve(Object outer, Class<T> c, Object o, Object...cArgs) throws RestServletException {
try {
- return n.newInstance(cArgs);
+ return ClassUtils.newInstanceFromOuter(outer, c, o, cArgs);
} catch (Exception e) {
throw new RestServletException("Exception occurred while constructing class ''{0}''", c).initCause(e);
}