Return-Path: Delivered-To: apmail-openejb-commits-archive@www.apache.org Received: (qmail 34539 invoked from network); 27 Aug 2010 06:55:03 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 27 Aug 2010 06:55:03 -0000 Received: (qmail 77226 invoked by uid 500); 27 Aug 2010 06:55:03 -0000 Delivered-To: apmail-openejb-commits-archive@openejb.apache.org Received: (qmail 77167 invoked by uid 500); 27 Aug 2010 06:55:02 -0000 Mailing-List: contact commits-help@openejb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openejb.apache.org Delivered-To: mailing list commits@openejb.apache.org Received: (qmail 77160 invoked by uid 99); 27 Aug 2010 06:55:01 -0000 Received: from Unknown (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Aug 2010 06:55:01 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Aug 2010 06:54:43 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 128D92388980; Fri, 27 Aug 2010 06:53:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r990049 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/config/rules/CheckCallbacks.java test/java/org/apache/openejb/config/rules/CheckInvalidInterceptorTest.java Date: Fri, 27 Aug 2010 06:53:25 -0000 To: commits@openejb.apache.org From: xuhaihong@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100827065325.128D92388980@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: xuhaihong Date: Fri Aug 27 06:53:24 2010 New Revision: 990049 URL: http://svn.apache.org/viewvc?rev=990049&view=rev Log: OpenEJB-1338 Validate the callback methods with correct declaring classes Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidInterceptorTest.java Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java?rev=990049&r1=990048&r2=990049&view=diff ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java (original) +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckCallbacks.java Fri Aug 27 06:53:24 2010 @@ -251,7 +251,14 @@ public class CheckCallbacks extends Vali private void checkAroundTypeInvoke(String aroundType, Class ejbClass, String declaringClassName, String declaringMethodName, String componentName) { try { - Method method = getMethod(ejbClass, declaringMethodName, InvocationContext.class); + Class delcaringClass = null; + try { + delcaringClass = declaringClassName == null ? ejbClass : loadClass(declaringClassName); + } catch (OpenEJBException e) { + fail(componentName, "missing.class", declaringClassName, aroundType, ejbClass.getName()); + return; + } + Method method = getMethod(delcaringClass, declaringMethodName, InvocationContext.class); Class returnType = method.getReturnType(); @@ -301,7 +308,14 @@ public class CheckCallbacks extends Vali private void checkCallback(Class ejbClass, String type, CallbackMethod callback, EnterpriseBean bean, Class... parameterTypes) { try { - Method method = getMethod(ejbClass, callback.getMethodName(), parameterTypes); + Class delcaringClass = null; + try { + delcaringClass = callback.getClassName() == null ? ejbClass : loadClass(callback.getClassName()); + } catch (OpenEJBException e) { + fail(type, "missing.class", callback.getClassName(), type, bean.getEjbName()); + return; + } + Method method = getMethod(delcaringClass, callback.getMethodName(), parameterTypes); if (implementsSessionBean(ejbClass)) { SessionBean sb = (SessionBean) bean; if ("PreDestroy".equals(type)) { @@ -358,7 +372,14 @@ public class CheckCallbacks extends Vali private void checkCallback(Class interceptorClass, String type, CallbackMethod callback, Interceptor interceptor) { try { - Method method = getMethod(interceptorClass, callback.getMethodName(), InvocationContext.class); + Class delcaringClass = null; + try { + delcaringClass = callback.getClassName() == null ? interceptorClass : loadClass(callback.getClassName()); + } catch (OpenEJBException e) { + fail(type, "missing.class", callback.getClassName(), type, interceptor.getInterceptorClass()); + return; + } + Method method = getMethod(delcaringClass, callback.getMethodName(), InvocationContext.class); Class returnType = method.getReturnType(); Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidInterceptorTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidInterceptorTest.java?rev=990049&r1=990048&r2=990049&view=diff ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidInterceptorTest.java (original) +++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInvalidInterceptorTest.java Fri Aug 27 06:53:24 2010 @@ -23,12 +23,14 @@ import javax.annotation.PreDestroy; import javax.interceptor.AroundInvoke; import javax.interceptor.AroundTimeout; import javax.interceptor.Interceptors; +import javax.interceptor.InvocationContext; import junit.framework.TestCase; import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.Interceptor; import org.apache.openejb.jee.InterceptorBinding; +import org.apache.openejb.jee.LifecycleCallback; import org.apache.openejb.jee.NamedMethod; import org.apache.openejb.jee.StatelessBean; import org.junit.runner.RunWith; @@ -68,10 +70,27 @@ public class CheckInvalidInterceptorTest return ejbJar; } + /** + * Should not get any failure message, as we explicitly configure the methods in the base class + * @return + */ + @Keys + public EjbJar testDeclaringInterceptorClass() { + EjbJar ejbJar = new EjbJar(); + Interceptor subInterceptor = ejbJar.addInterceptor(new org.apache.openejb.jee.Interceptor(SubInterceptor.class)); + subInterceptor.getPostConstruct().add(new LifecycleCallback(BaseInterceptor.class.getName(), "interceptPostConstruct")); + subInterceptor.getPreDestroy().add(new LifecycleCallback(BaseInterceptor.class.getName(), "interceptPreDestroy")); + subInterceptor.getAroundInvoke().add(new org.apache.openejb.jee.AroundInvoke(BaseInterceptor.class.getName(), "interceptAroundInvoke")); + subInterceptor.getAroundTimeout().add(new org.apache.openejb.jee.AroundTimeout(BaseInterceptor.class.getName(), "interceptAroundTimeout")); + return ejbJar; + } + @Interceptors(Interzeptor.class) - public static class FooBean {} + public static class FooBean { + } public static class Interzeptor { + @PostConstruct public Object interceptPostConstruct() { return null; @@ -83,10 +102,46 @@ public class CheckInvalidInterceptorTest } @AroundInvoke - public void interceptAroundInvoke() {} + public void interceptAroundInvoke() { + } @AroundTimeout - public void interceptAroundTimeout() {} + public void interceptAroundTimeout() { + } + } + + public static class BaseInterceptor { + + public void interceptPostConstruct(InvocationContext context) throws Exception { + } + + public void interceptPreDestroy(InvocationContext context) throws Exception { + } + + public Object interceptAroundInvoke(InvocationContext context) throws Exception { + return null; + } + + public Object interceptAroundTimeout(InvocationContext context) throws Exception { + return null; + } + } + + public static class SubInterceptor extends BaseInterceptor { + + private final Object interceptPostConstruct() { + return null; + } + + private final Object interceptPreDestroy() { + return null; + } + + private final void interceptAroundInvoke() { + } + + private final void interceptAroundTimeout() { + } } public static class CallbackMissingInterceptor {