[jboss-cvs] JBossAS SVN: r67331 - trunk/ejb3/src/main/org/jboss/ejb3/interceptor.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Nov 21 07:23:14 EST 2007


Author: wolfc
Date: 2007-11-21 07:23:14 -0500 (Wed, 21 Nov 2007)
New Revision: 67331

Modified:
   trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java
Log:
EJBTHREE-1126: using specified class when looking for interceptor methods

Modified: trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java
===================================================================
--- trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java	2007-11-21 11:28:48 UTC (rev 67330)
+++ trunk/ejb3/src/main/org/jboss/ejb3/interceptor/InterceptorInfoRepository.java	2007-11-21 12:23:14 UTC (rev 67331)
@@ -514,7 +514,7 @@
    }
    
    
-   private Class loadClass(String name)
+   private Class<?> loadClass(String name)
    {
       try
       {
@@ -816,17 +816,17 @@
 
       InterceptorInfo getInfo()
       {
-         info.setAroundInvoke(findInterceptorMethodFromXml(clazz, "around-invoke-method", xml.getAroundInvokes()));
-         info.setPostConstruct(findInterceptorMethodFromXml(clazz, "post-construct-method", xml.getPostConstructs()));
-         info.setPostActivate(findInterceptorMethodFromXml(clazz, "post-activate-method", xml.getPostActivates()));
-         info.setPreDestroy(findInterceptorMethodFromXml(clazz, "pre-destroy-method", xml.getPreDestroys()));
-         info.setPrePassivate(findInterceptorMethodFromXml(clazz, "pre-passivate-method", xml.getPrePassivates()));
+         info.setAroundInvoke(findInterceptorMethodFromXml("around-invoke-method", xml.getAroundInvokes()));
+         info.setPostConstruct(findInterceptorMethodFromXml("post-construct-method", xml.getPostConstructs()));
+         info.setPostActivate(findInterceptorMethodFromXml("post-activate-method", xml.getPostActivates()));
+         info.setPreDestroy(findInterceptorMethodFromXml("pre-destroy-method", xml.getPreDestroys()));
+         info.setPrePassivate(findInterceptorMethodFromXml("pre-passivate-method", xml.getPrePassivates()));
          super.getInfo();
          info.setXml(xml);
          return info;
       }
 
-      Method findInterceptorMethodFromXml(Class<?> clazz, String lookingFor, AroundInvokesMetaData aroundInvokes)
+      Method findInterceptorMethodFromXml(String lookingFor, AroundInvokesMetaData aroundInvokes)
       {
          if (aroundInvokes == null)
             return null;
@@ -834,10 +834,10 @@
             throw new RuntimeException("NYI");
          
          AroundInvokeMetaData aroundInvoke = aroundInvokes.get(0);
-         return findInterceptorMethodFromXml(clazz, lookingFor, aroundInvoke.getMethodName());
+         return findInterceptorMethodFromXml(lookingFor, aroundInvoke.getClassName(), aroundInvoke.getMethodName());
       }
       
-      Method findInterceptorMethodFromXml(Class<?> clazz, String lookingFor, LifecycleCallbacksMetaData lifecycleCallbacks)
+      Method findInterceptorMethodFromXml(String lookingFor, LifecycleCallbacksMetaData lifecycleCallbacks)
       {
          if (lifecycleCallbacks == null)
             return null;
@@ -845,13 +845,21 @@
             throw new RuntimeException("NYI");
          
          LifecycleCallbackMetaData lifecycleCallback = lifecycleCallbacks.get(0);
-         return findInterceptorMethodFromXml(clazz, lookingFor, lifecycleCallback.getMethodName());
+         return findInterceptorMethodFromXml(lookingFor, lifecycleCallback.getClassName(), lifecycleCallback.getMethodName());
       }
       
-      Method findInterceptorMethodFromXml(Class<?> clazz, String lookingFor, String methodName)
+      Method findInterceptorMethodFromXml(String lookingFor, String className, String methodName)
       {
          if (xml == null)
             return null;
+         
+         // If a class name is specified look in there, else in the surrounding class 
+         Class<?> cls;
+         if(className == null)
+            cls = clazz;
+         else
+            cls = loadClass(className);
+         
          if (methodName == null || methodName.trim().equals(""))
          {
             throw new RuntimeException(lookingFor + " must contain a valid method name for interceptor "
@@ -859,7 +867,7 @@
          }
 
          List<Method> possible = new ArrayList<Method>();
-         for (java.lang.reflect.Method method : clazz.getDeclaredMethods())
+         for (java.lang.reflect.Method method : cls.getDeclaredMethods())
          {
             if (methodName.equals(method.getName()))
             {
@@ -869,8 +877,7 @@
 
          if (possible.size() == 0)
          {
-            throw new RuntimeException(lookingFor + " must contain a valid method name for interceptor "
-                  + clazz.getName());
+            throw new RuntimeException(lookingFor + " can't find method " + methodName + " on " + cls.getName());
          }
 
          Method found = null;
@@ -896,6 +903,7 @@
 
          if (found == null)
          {
+            // TODO: improve error message
             throw new RuntimeException(lookingFor + " has the wrong method signature for interceptor "
                   + clazz.getName());
          }




More information about the jboss-cvs-commits mailing list