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);
+ }
+
}
}