Don't we make more generic saying "this parameter type xxx is not
allowed for this callback"?

Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau




---------- Forwarded message ----------
From:  <[email protected]>
Date: 2014-02-01
Subject: svn commit: r1563435 - in
/tomee/tomee/trunk/container/openejb-core/src:
main/java/org/apache/openejb/config/rules/
main/resources/org/apache/openejb/config/rules/
test/java/org/apache/openejb/config/rules/
To: [email protected]


Author: dblevins
Date: Sat Feb  1 16:02:46 2014
New Revision: 1563435

URL: http://svn.apache.org/r1563435
Log:
Patch from Ivan St. Ivanov, OPENEJB-678: Validation: Explicit check
for InvocationContext incorrectly used in bean callbacks
Thanks, Ivan!

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
    
tomee/tomee/trunk/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
    
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidCallbacksTest.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java?rev=1563435&r1=1563434&r2=1563435&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
(original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java
Sat Feb  1 16:02:46 2014
@@ -341,7 +341,13 @@ public class CheckCallbacks extends Vali
             if (possibleMethods.size() == 0) {
                 fail(bean, "callback.missing", type,
callback.getMethodName(), callback.getClassName());
             } else if (possibleMethods.size() == 1) {
-                fail(bean, "callback.invalidArguments", type,
callback.getMethodName(), getParameters(possibleMethods.get(0)),
callback.getClassName(), getParameters(parameterTypes));
+                Class<?>[] parameters =
possibleMethods.get(0).getParameterTypes();
+                if (parameters.length == 1 &&
parameters[0].equals(InvocationContext.class)) {
+                    fail(bean.getEjbName(),
"callback.invocationcontext.notallowed", type,
+                            callback.getMethodName());
+                } else {
+                    fail(bean, "callback.invalidArguments", type,
callback.getMethodName(), getParameters(possibleMethods.get(0)),
callback.getClassName(), getParameters(parameterTypes));
+                }
             } else {
                 fail(bean, "callback.missing.possibleTypo", type,
callback.getMethodName(), possibleMethods.size(),
callback.getClassName(), getParameters(parameterTypes));
             }

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=1563435&r1=1563434&r2=1563435&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
(original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
Sat Feb  1 16:02:46 2014
@@ -199,6 +199,11 @@
 2.callback.missing = {0} method missing: "{1}" in class {2}
 3.callback.missing = {0} method "{1}" not found in class {2}.  The
required method signature is "void {1}()"

+# fail(bean, "callback.invocationcontext.notallowed", type,
callback.getMethodName())
+1.callback.invocationcontext.notallowed = Invalid usage of
javax.interceptor.InvocationContext as parameter type of callback
method
+2.callback.invocationcontext.notallowed = Invalid usage of
javax.interceptor.InvocationContext as parameter type of callback
method in bean class {0}
+3.callback.invocationcontext.notallowed = Invalid usage of
javax.interceptor.InvocationContext as parameter type of callback
method {1} in bean class {0}. Parameters of type InvocationContext are
only allowed for interceptors
+
 # fail(bean, "callback.invalidArguments", type,
callback.getMethodName(), getParameters(possibleMethods.get(0)),
callback.getClassName());
 1.callback.invalidArguments = Invalid {0} arguments
 2.callback.invalidArguments = Invalid {0} arguments. Found: {1}({2}).
Required: {1}({4})

Modified: 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidCallbacksTest.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidCallbacksTest.java?rev=1563435&r1=1563434&r2=1563435&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidCallbacksTest.java
(original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidCallbacksTest.java
Sat Feb  1 16:02:46 2014
@@ -17,6 +17,7 @@
 package org.apache.openejb.config.rules;

 import junit.framework.TestCase;
+
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.NamedMethod;
 import org.apache.openejb.jee.SingletonBean;
@@ -38,6 +39,8 @@ import javax.ejb.PrePassivate;
 import javax.ejb.SessionBean;
 import javax.ejb.SessionContext;
 import javax.ejb.SessionSynchronization;
+import javax.interceptor.InvocationContext;
+
 import java.rmi.RemoteException;
 import java.util.concurrent.Callable;

@@ -85,6 +88,13 @@ public class CheckInvalidCallbacksTest e
         return ejbJar;
     }

+    @Keys(@Key(value = "callback.invocationcontext.notallowed", count = 4))
+    public EjbJar test3() {
+        EjbJar ejbJar = new EjbJar();
+        ejbJar.addEnterpriseBean(new StatefulBean(CallbackViolatorBean.class));
+        return ejbJar;
+    }
+
     public static class TestBean implements Callable {
         public Object call() throws Exception {
             return null;
@@ -252,4 +262,22 @@ public class CheckInvalidCallbacksTest e
         @AfterCompletion
         public void afterCompletion(boolean committed) {}
     }
+
+    public class CallbackViolatorBean {
+        @PostConstruct
+        public void postConstruct(InvocationContext ic) {
+        }
+
+        @PreDestroy
+        public void preDestroy(InvocationContext ic) {
+        }
+
+        @PrePassivate
+        public void prePassivate(InvocationContext ic) {
+        }
+
+        @PostActivate
+        public void postActivate(InvocationContext ic) {
+        }
+    }
 }
\ No newline at end of file

Reply via email to