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/07/21 15:12:49 UTC

svn commit: r1364079 - in /struts/struts2/trunk/xwork-core/src: main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java

Author: lukaszlenart
Date: Sat Jul 21 13:12:48 2012
New Revision: 1364079

URL: http://svn.apache.org/viewvc?rev=1364079&view=rev
Log:
WW-3850 solves problem with NPE when ActionValidationManager is trying to load Object-validation.xml

Modified:
    struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
    struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java

Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java?rev=1364079&r1=1364078&r2=1364079&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java Sat Jul 21 13:12:48 2012
@@ -328,7 +328,7 @@ public class DefaultActionValidatorManag
     private List<ValidatorConfig> loadFile(String fileName, Class clazz, boolean checkFile) {
         List<ValidatorConfig> retList = Collections.emptyList();
         URL fileUrl = ClassLoaderUtil.getResource(fileName, clazz);
-        if ((checkFile && fileManager.fileNeedsReloading(fileUrl.toString())) || !validatorFileCache.containsKey(fileName)) {
+        if ((checkFile && fileUrl != null && fileManager.fileNeedsReloading(fileUrl.toString())) || !validatorFileCache.containsKey(fileName)) {
             InputStream is = null;
 
             try {

Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java?rev=1364079&r1=1364078&r2=1364079&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java (original)
+++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java Sat Jul 21 13:12:48 2012
@@ -18,6 +18,7 @@ package com.opensymphony.xwork2.validato
 import com.mockobjects.dynamic.C;
 import com.mockobjects.dynamic.Mock;
 import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManagerFactory;
 import com.opensymphony.xwork2.SimpleAction;
 import com.opensymphony.xwork2.StubValueStack;
 import com.opensymphony.xwork2.TestBean;
@@ -164,6 +165,25 @@ public class DefaultActionValidatorManag
         mockValidatorFileParser.verify();
     }
 
+    /**
+     * Test to verify WW-3850.
+     *
+     * @since 2.3.5
+     */
+    public void testBuildsValidatorsForClassError() {
+        // for this test we need to have a file manager with reloadingConfigs to true
+        container.getInstance(FileManagerFactory.class).getFileManager().setReloadingConfigs("true");
+        // no validator found, but no check on file since it is not in cache
+        actionValidatorManager.getValidators(List.class, null);
+        // this second call will try reload a not existing file
+        // and causes a NPE (see WW-3850)
+        try {
+            actionValidatorManager.getValidators(List.class, null);
+        } catch (Exception e) {
+            fail("Exception occurred " + e);
+        }
+    }
+
     /*
     // TODO: this all need to be converted to real unit tests