You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/02/26 10:28:10 UTC

svn commit: r1293791 - in /struts/struts2/trunk/xwork-core/src: main/java/com/opensymphony/xwork2/validator/ test/java/com/opensymphony/xwork2/validator/

Author: lukaszlenart
Date: Sun Feb 26 09:28:10 2012
New Revision: 1293791

URL: http://svn.apache.org/viewvc?rev=1293791&view=rev
Log:
WW-3753 -  adheres AnnotationActionValidatorManager to  ActionValidatorManager interface's contract

Modified:
    struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
    struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/ValidationInterceptor.java
    struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java

Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java?rev=1293791&r1=1293790&r2=1293791&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java Sun Feb 26 09:28:10 2012
@@ -75,7 +75,7 @@ public class AnnotationActionValidatorMa
     }
 
     public List<Validator> getValidators(Class clazz, String context, String method) {
-        final String validatorKey = buildValidatorKey(clazz);
+        final String validatorKey = buildValidatorKey(clazz, context);
         final List<ValidatorConfig> cfgs;
 
         if (validatorCache.containsKey(validatorKey)) {
@@ -216,23 +216,36 @@ public class AnnotationActionValidatorMa
      * @param clazz the action.
      * @return a validator key which is the class name plus context.
      */
-    protected static String buildValidatorKey(Class clazz) {
+    protected static String buildValidatorKey(Class clazz, String context) {
         ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
         ActionProxy proxy = invocation.getProxy();
         ActionConfig config = proxy.getConfig();
 
-        //the key needs to use the name of the action from the config file,
-        //instead of the url, so wild card actions will have the same validator
-        //see WW-2996
         StringBuilder sb = new StringBuilder(clazz.getName());
         sb.append("/");
         if (StringUtils.isNotBlank(config.getPackageName())) {
             sb.append(config.getPackageName());
             sb.append("/");
         }
-        sb.append(config.getName());
-        sb.append("|");
-        sb.append(proxy.getMethod());
+
+        // the key needs to use the name of the action from the config file,
+        // instead of the url, so wild card actions will have the same validator
+        // see WW-2996
+
+        // UPDATE:
+        // WW-3753 Using the config name instead of the context only for
+        // wild card actions to keep the flexibility provided
+        // by the original design (such as mapping different contexts
+        // to the same action and method if desired)
+        String configName = config.getName();
+        if (configName.contains(ActionConfig.WILDCARD)) {
+            sb.append(configName);
+            sb.append("|");
+            sb.append(proxy.getMethod());
+        } else {
+            sb.append(context);
+        }
+        
         return sb.toString();
     }
 

Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/ValidationInterceptor.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/ValidationInterceptor.java?rev=1293791&r1=1293790&r2=1293791&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/ValidationInterceptor.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/ValidationInterceptor.java Sun Feb 26 09:28:10 2012
@@ -19,7 +19,6 @@ import com.opensymphony.xwork2.ActionInv
 import com.opensymphony.xwork2.ActionProxy;
 import com.opensymphony.xwork2.Validateable;
 import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor;
 import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
 import com.opensymphony.xwork2.interceptor.PrefixMethodInvocationUtil;
 import com.opensymphony.xwork2.util.logging.Logger;
@@ -206,7 +205,8 @@ public class ValidationInterceptor exten
 
         //the action name has to be from the url, otherwise validators that use aliases, like
         //MyActio-someaction-validator.xml will not be found, see WW-3194
-        String context = proxy.getActionName();
+        //UPDATE:  see WW-3753
+        String context = this.getValidationContext(proxy);
         String method = proxy.getMethod();
 
         if (log.isDebugEnabled()) {
@@ -264,5 +264,26 @@ public class ValidationInterceptor exten
         
         return invocation.invoke();
     }
+    
+    /**
+     * Returns the context that will be used by the
+     * {@link ActionValidatorManager} to associate the action invocation with
+     * the appropriate {@link ValidatorConfig ValidatorConfigs}.
+     * <p>
+     * The context returned is used in the pattern
+     * <i>ActionClass-context-validation.xml</i>
+     * <p>
+     * The default context is the action name from the URL, but the method can
+     * be overridden to implement custom contexts.
+     * <p>
+     * This can be useful in cases in which a single action and a single model
+     * require vastly different validation based on some condition.
+     * 
+     * @return the Context
+     */
+    protected String getValidationContext(ActionProxy proxy) {
+        // This method created for WW-3753
+        return proxy.getActionName();
+    }
 
 }

Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java?rev=1293791&r1=1293790&r2=1293791&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManagerTest.java Sun Feb 26 09:28:10 2012
@@ -70,8 +70,8 @@ public class AnnotationActionValidatorMa
     }
 
     public void testBuildValidatorKey() {
-        String validatorKey = AnnotationActionValidatorManager.buildValidatorKey(SimpleAnnotationAction.class);
-        assertEquals(SimpleAnnotationAction.class.getName() + "/packageName/name|execute", validatorKey);
+        String validatorKey = AnnotationActionValidatorManager.buildValidatorKey(SimpleAnnotationAction.class, "name");
+        assertEquals(SimpleAnnotationAction.class.getName() + "/packageName/name", validatorKey);
     }
 
     public void testBuildsValidatorsForAlias() {