Author: musachy
Date: Fri May 30 10:30:19 2008
New Revision: 661795

URL: http://svn.apache.org/viewvc?rev=661795&view=rev
Log:
WW-2587 @SkipValidation not found on superclass method

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptor.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptorTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptor.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptor.java?rev=661795&r1=661794&r2=661795&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptor.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptor.java
 Fri May 30 10:30:19 2008
@@ -22,8 +22,10 @@
 package org.apache.struts2.interceptor.validation;
 
 import java.lang.reflect.Method;
+import java.util.Collection;
 
 import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.util.AnnotationUtils;
 import com.opensymphony.xwork2.validator.ValidationInterceptor;
 
 /**
@@ -31,24 +33,24 @@
  * annotation, and if found, don't validate this action method
  */
 public class AnnotationValidationInterceptor extends ValidationInterceptor {
-    
+
     /** Auto-generated serialization id */
     private static final long serialVersionUID = 1813272797367431184L;
 
     protected String doIntercept(ActionInvocation invocation) throws Exception 
{
-        
+
         Object action = invocation.getAction();
         if (action != null) {
             Method method = getActionMethod(action.getClass(), 
invocation.getProxy().getMethod());
-            SkipValidation skip = (SkipValidation) 
method.getAnnotation(SkipValidation.class);
-            if (skip != null) {
+            Collection<Method> annotatedMethods = 
AnnotationUtils.getAnnotatedMethods(action.getClass(), SkipValidation.class);
+            if (annotatedMethods.contains(method)) {
                 return invocation.invoke();
             }
         }
-        
+
         return super.doIntercept(invocation);
     }
-    
+
     // FIXME: This is copied from DefaultActionInvocation but should be 
exposed through the interface
     protected Method getActionMethod(Class actionClass, String methodName) 
throws NoSuchMethodException {
         Method method;

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptorTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptorTest.java?rev=661795&r1=661794&r2=661795&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptorTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/validation/AnnotationValidationInterceptorTest.java
 Fri May 30 10:30:19 2008
@@ -54,22 +54,64 @@
         
interceptor.doIntercept((ActionInvocation)mockActionInvocation.proxy());
         mockActionProxy.verify();
     }
-    
+
     public void testShouldSkip() throws Exception {
         mockActionProxy.expectAndReturn("getMethod", "skipMe");
         
interceptor.doIntercept((ActionInvocation)mockActionInvocation.proxy());
         mockActionProxy.verify();
     }
-    
-    public static class TestAction  {
-        
+
+    public void testShouldSkipBase() throws Exception {
+        mockActionProxy.expectAndReturn("getMethod", "skipMeBase");
+        
interceptor.doIntercept((ActionInvocation)mockActionInvocation.proxy());
+        mockActionProxy.verify();
+    }
+
+    public void testShouldSkip2() throws Exception {
+        mockActionProxy.expectAndReturn("getMethod", "skipMe2");
+        
interceptor.doIntercept((ActionInvocation)mockActionInvocation.proxy());
+        mockActionProxy.verify();
+    }
+
+    public void testDontShouldSkipBase() throws Exception {
+        mockActionProxy.expectAndReturn("getMethod", "dontSkipMeBase");
+        mockActionProxy.expectAndReturn("getActionName", "foo");
+        mockActionProxy.expectAndReturn("getMethod", "dontSkipMeBase");
+        
interceptor.doIntercept((ActionInvocation)mockActionInvocation.proxy());
+        mockActionProxy.verify();
+    }
+
+    public static class TestAction extends TestActionBase {
+
         public String execute() {
             return "execute";
         }
-        
+
         @SkipValidation
         public String skipMe() {
             return "skipme";
         }
+
+        @SkipValidation
+        public String skipMe2() {
+            return "skipme2";
+        }
+    }
+
+    public static class TestActionBase  {
+
+        @SkipValidation
+        public String skipMeBase() {
+            return "skipme";
+        }
+
+        public String dontSkipMeBase() {
+            return "dontskipme";
+        }
+
+        public String skipMe2() {
+            return "skipme2";
+        }
     }
+
 }


Reply via email to