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/14 14:32:58 UTC

incubator-juneau git commit: Allow static and non-private @RestHook methods.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master 6d63a4183 -> 9f059be90


Allow static and non-private @RestHook methods.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/9f059be9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/9f059be9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/9f059be9

Branch: refs/heads/master
Commit: 9f059be9033364d7e0e2c373a7d572f552758e57
Parents: 6d63a41
Author: JamesBognar <ja...@apache.org>
Authored: Mon Aug 14 10:32:55 2017 -0400
Committer: JamesBognar <ja...@apache.org>
Committed: Mon Aug 14 10:32:55 2017 -0400

----------------------------------------------------------------------
 .../java/org/apache/juneau/rest/RestConfig.java |  1 +
 .../org/apache/juneau/rest/RestContext.java     | 35 ++++++++++++--------
 .../juneau/rest/annotation/HookEvent.java       | 32 +++++++++++++-----
 3 files changed, 46 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9f059be9/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
index 59702d2..b452a53 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestConfig.java
@@ -281,6 +281,7 @@ public class RestConfig implements ServletConfig {
 		Map<String,Method> map = new LinkedHashMap<String,Method>();
 		for (Method m : ClassUtils.getAllMethods(this.resourceClass, true)) {
 			if (m.isAnnotationPresent(RestHook.class) && m.getAnnotation(RestHook.class).value() == HookEvent.INIT) {
+				Visibility.setAccessible(m);
 				String sig = ClassUtils.getMethodSignature(m);
 				if (! map.containsKey(sig))
 					map.put(sig, m);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9f059be9/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 2a77eb6..b0b950e 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
@@ -314,22 +314,22 @@ public final class RestContext extends Context {
 	private final RestResourceResolver resourceResolver;
 
 	// Lifecycle methods
-	private final Method[] 
-		postInitMethods, 
-		postInitChildFirstMethods, 
-		preCallMethods, 
-		postCallMethods, 
-		startCallMethods, 
-		endCallMethods, 
+	private final Method[]
+		postInitMethods,
+		postInitChildFirstMethods,
+		preCallMethods,
+		postCallMethods,
+		startCallMethods,
+		endCallMethods,
 		destroyMethods;
-	private final RestParam[][] 
-		preCallMethodParams, 
+	private final RestParam[][]
+		preCallMethodParams,
 		postCallMethodParams;
-	private final Class<?>[][] 
-		postInitMethodParams, 
-		postInitChildFirstMethodParams, 
-		startCallMethodParams, 
-		endCallMethodParams, 
+	private final Class<?>[][]
+		postInitMethodParams,
+		postInitChildFirstMethodParams,
+		startCallMethodParams,
+		endCallMethodParams,
 		destroyMethodParams;
 
 	// In-memory cache of images and stylesheets in the org.apache.juneau.rest.htdocs package.
@@ -513,6 +513,7 @@ public final class RestContext extends Context {
 					switch(he) {
 						case PRE_CALL: {
 							if (! _preCallMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_preCallMethods.put(sig, m);
 								_preCallMethodParams.add(findParams(m, false, null, true));
 							}
@@ -520,6 +521,7 @@ public final class RestContext extends Context {
 						}
 						case POST_CALL: {
 							if (! _postCallMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_postCallMethods.put(sig, m);
 								_postCallMethodParams.add(findParams(m, false, null, true));
 							}
@@ -527,6 +529,7 @@ public final class RestContext extends Context {
 						}
 						case START_CALL: {
 							if (! _startCallMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_startCallMethods.put(sig, m);
 								_startCallMethodParams.add(m.getParameterTypes());
 								ClassUtils.assertArgsOfType(m, HttpServletRequest.class, HttpServletResponse.class);
@@ -535,6 +538,7 @@ public final class RestContext extends Context {
 						}
 						case END_CALL: {
 							if (! _endCallMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_endCallMethods.put(sig, m);
 								_endCallMethodParams.add(m.getParameterTypes());
 								ClassUtils.assertArgsOfType(m, HttpServletRequest.class, HttpServletResponse.class);
@@ -543,6 +547,7 @@ public final class RestContext extends Context {
 						}
 						case POST_INIT: {
 							if (! _postInitMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_postInitMethods.put(sig, m);
 								_postInitMethodParams.add(m.getParameterTypes());
 								ClassUtils.assertArgsOfType(m, RestContext.class);
@@ -551,6 +556,7 @@ public final class RestContext extends Context {
 						}
 						case POST_INIT_CHILD_FIRST: {
 							if (! _postInitChildFirstMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_postInitChildFirstMethods.put(sig, m);
 								_postInitChildFirstMethodParams.add(m.getParameterTypes());
 								ClassUtils.assertArgsOfType(m, RestContext.class);
@@ -559,6 +565,7 @@ public final class RestContext extends Context {
 						}
 						case DESTROY: {
 							if (! _destroyMethods.containsKey(sig)) {
+								Visibility.setAccessible(m);
 								_destroyMethods.put(sig, m);
 								_destroyMethodParams.add(m.getParameterTypes());
 								ClassUtils.assertArgsOfType(m, RestContext.class);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9f059be9/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
index 74684e8..98489f3 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/annotation/HookEvent.java
@@ -65,7 +65,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple START_CALL methods can be defined on a class.
 	 * 		<br>START_CALL methods on parent classes are invoked before START_CALL methods on child classes.
 	 * 		<br>The order of START_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -174,7 +176,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple PRE_CALL methods can be defined on a class.
 	 * 		<br>PRE_CALL methods on parent classes are invoked before PRE_CALL methods on child classes.
 	 * 		<br>The order of PRE_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -215,7 +219,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple POST_CALL methods can be defined on a class.
 	 * 		<br>POST_CALL methods on parent classes are invoked before POST_CALL methods on child classes.
 	 * 		<br>The order of POST_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -270,7 +276,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple END_CALL methods can be defined on a class.
 	 * 		<br>END_CALL methods on parent classes are invoked before END_CALL methods on child classes.
 	 * 		<br>The order of END_CALL method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -315,7 +323,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple INIT methods can be defined on a class.
 	 * 		<br>INIT methods on parent classes are invoked before INIT methods on child classes.
 	 * 		<br>The order of INIT method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -340,7 +350,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple POST_INIT methods can be defined on a class.
 	 * 		<br>POST_INIT methods on parent classes are invoked before POST_INIT methods on child classes.
 	 * 		<br>The order of POST_INIT method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -368,7 +380,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple POST_INIT_CHILD_FIRST methods can be defined on a class.
 	 * 		<br>POST_INIT_CHILD_FIRST methods on parent classes are invoked before POST_INIT_CHILD_FIRST methods on child classes.
 	 * 		<br>The order of POST_INIT_CHILD_FIRST method invocations within a class is alphabetical, then by parameter count, then by parameter types.
@@ -404,7 +418,9 @@ public enum HookEvent {
 	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul class='spaced-list'>
-	 * 	<li>If the method returns any value, it is ignored.
+	 * 	<li>The method should return <jk>void</jk> although if it does return any value, the value will be ignored.
+	 * 	<li>The method should be <jk>public</jk> although other visibilities are valid if the security manager allows it.
+	 * 	<li>Static methods can be used.
 	 * 	<li>Multiple DESTROY methods can be defined on a class.
 	 * 		<br>DESTROY methods on child classes are invoked before DESTROY methods on parent classes.
 	 * 		<br>The order of DESTROY method invocations within a class is alphabetical, then by parameter count, then by parameter types.