You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by rd...@apache.org on 2011/11/02 16:20:38 UTC

svn commit: r1196620 - /myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java

Author: rdebusscher
Date: Wed Nov  2 15:20:37 2011
New Revision: 1196620

URL: http://svn.apache.org/viewvc?rev=1196620&view=rev
Log:
EXTVAL-137 : Deregistering a class from the NameMapperFactory results in unsupported operation on CopyOnWriteArrayList

Modified:
    myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java

Modified: myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java?rev=1196620&r1=1196619&r2=1196620&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java (original)
+++ myfaces/extensions/validator/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java Wed Nov  2 15:20:37 2011
@@ -84,7 +84,18 @@ public abstract class AbstractNameMapper
             subNameMapper = true;
         }
 
-        Iterator<NameMapper<T>> nameMapperIterator = getNameMapperList().iterator();
+        List<NameMapper<T>> nameMapperList = getNameMapperList();
+        List<NameMapper<T>> changeableList;
+        if (!subNameMapper && (getNameMapperList() instanceof CopyOnWriteArrayList))
+        {
+            // If we have a CopyOnWriteArrayList, we can't remove it so copy it to a temporary list
+            changeableList = new ArrayList<NameMapper<T>>(nameMapperList);
+        }
+        else
+        {
+            changeableList = nameMapperList;
+        }
+        Iterator<NameMapper<T>> nameMapperIterator = changeableList.iterator();
         while (nameMapperIterator.hasNext())
         {
             if (subNameMapper)
@@ -104,6 +115,13 @@ public abstract class AbstractNameMapper
                     //break;
                 }
             }
+            if (!subNameMapper && (getNameMapperList() instanceof CopyOnWriteArrayList))
+            {
+                // Set the correct content back in the CopyOnWriteArrayList
+                getNameMapperList().clear();
+                getNameMapperList().addAll(changeableList);
+            }
+
         }
     }