Author: musachy Date: Wed Jun 4 11:15:36 2008 New Revision: 663335 URL: http://svn.apache.org/viewvc?rev=663335&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=663335&r1=663334&r2=663335&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 Wed Jun 4 11:15:36 2008 @@ -22,8 +22,11 @@ package org.apache.struts2.interceptor.validation; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.Collection; +import org.apache.commons.lang.ArrayUtils; + import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.util.AnnotationUtils; import com.opensymphony.xwork2.validator.ValidationInterceptor; @@ -43,8 +46,22 @@ if (action != null) { Method method = getActionMethod(action.getClass(), invocation.getProxy().getMethod()); Collection<Method> annotatedMethods = AnnotationUtils.getAnnotatedMethods(action.getClass(), SkipValidation.class); - if (annotatedMethods.contains(method)) { + if (annotatedMethods.contains(method)) return invocation.invoke(); + + //check if method overwites an annotated method + Class clazz = action.getClass().getSuperclass(); + while (clazz != null) { + annotatedMethods = AnnotationUtils.getAnnotatedMethods(clazz, SkipValidation.class); + if (annotatedMethods != null) { + for (Method annotatedMethod : annotatedMethods) { + if (annotatedMethod.getName().equals(method.getName()) + && Arrays.equals(annotatedMethod.getParameterTypes(), method.getParameterTypes()) + && Arrays.equals(annotatedMethod.getExceptionTypes(), method.getExceptionTypes())) + return invocation.invoke(); + } + } + clazz = clazz.getSuperclass(); } } 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=663335&r1=663334&r2=663335&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 Wed Jun 4 11:15:36 2008 @@ -67,13 +67,19 @@ mockActionProxy.verify(); } + public void testShouldSkipBase2() throws Exception { + mockActionProxy.expectAndReturn("getMethod", "skipMeBase2"); + 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 { + public void testShouldNotSkipBase() throws Exception { mockActionProxy.expectAndReturn("getMethod", "dontSkipMeBase"); mockActionProxy.expectAndReturn("getActionName", "foo"); mockActionProxy.expectAndReturn("getMethod", "dontSkipMeBase"); @@ -96,6 +102,10 @@ public String skipMe2() { return "skipme2"; } + + public String skipMeBase() { + return "skipme"; + } } public static class TestActionBase { @@ -105,6 +115,11 @@ return "skipme"; } + @SkipValidation + public String skipMeBase2() { + return "skipme"; + } + public String dontSkipMeBase() { return "dontskipme"; }