EXTVAL-137 : Deregistering a class from the NameMapperFactory results in unsupported operation on CopyOnWriteArrayList

git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk@1196620 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java
index 80a7e79..9ae1aac 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/AbstractNameMapperAwareFactory.java
@@ -84,7 +84,18 @@
             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 @@
                     //break;

                 }

             }

+            if (!subNameMapper && (getNameMapperList() instanceof CopyOnWriteArrayList))

+            {

+                // Set the correct content back in the CopyOnWriteArrayList

+                getNameMapperList().clear();

+                getNameMapperList().addAll(changeableList);

+            }

+

         }

     }