Author: schor
Date: Wed Apr  9 20:05:32 2014
New Revision: 1586121

URL: http://svn.apache.org/r1586121
Log:
[UIMA-3732] avoid modifying passed-in additional params map

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java
    
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
    
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java

Modified: 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java?rev=1586121&r1=1586120&r2=1586121&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java 
(original)
+++ 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java 
Wed Apr  9 20:05:32 2014
@@ -322,6 +322,8 @@ public abstract class UIMAFramework {
     if (aResourceManager != null) {
       if (aAdditionalParams == null) {
         aAdditionalParams = new HashMap<String, Object>();
+      } else {  // copy to avoid modifying the original which might be 
immutable
+        aAdditionalParams = new HashMap<String, Object>(aAdditionalParams);
       }
       aAdditionalParams.put(Resource.PARAM_RESOURCE_MANAGER, aResourceManager);
     }
@@ -976,6 +978,9 @@ public abstract class UIMAFramework {
     if (aResourceManager != null) {
       if (aAdditionalParams == null) {
         aAdditionalParams = new HashMap<String, Object>();
+      } else {
+        // copy to avoid modifying original, which might be immutable, etc.
+        aAdditionalParams = new HashMap<String, Object>(aAdditionalParams);
       }
       aAdditionalParams.put(Resource.PARAM_RESOURCE_MANAGER, aResourceManager);
     }

Modified: 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java?rev=1586121&r1=1586120&r2=1586121&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
 Wed Apr  9 20:05:32 2014
@@ -146,7 +146,8 @@ public class ASB_impl extends Resource_I
       return false;
     }
 
-    super.initialize(aSpecifier, aAdditionalParams);
+    // copy the additional parameters, since this method will modify them
+    super.initialize(aSpecifier, aAdditionalParams = new HashMap<String, 
Object>(aAdditionalParams));
 
     // save parameters for later
     mInitParams = aAdditionalParams;

Modified: 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java?rev=1586121&r1=1586120&r2=1586121&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java
 Wed Apr  9 20:05:32 2014
@@ -179,9 +179,15 @@ public abstract class Resource_ImplBase 
         }
         if (aAdditionalParams == null) {
             aAdditionalParams = new HashMap<String, Object>();
-        }
-        if (!aAdditionalParams.containsKey(PARAM_RESOURCE_MANAGER)) {
             aAdditionalParams.put(PARAM_RESOURCE_MANAGER, 
mUimaContextAdmin.getResourceManager());
+        } else {
+          if (!aAdditionalParams.containsKey(PARAM_RESOURCE_MANAGER)) {
+            // copy in case original is shared on multi-threads, or 
+            // is unmodifiable
+            // and to avoid updating passed - in map
+            aAdditionalParams = new HashMap<String, Object>(aAdditionalParams);
+            aAdditionalParams.put(PARAM_RESOURCE_MANAGER, 
mUimaContextAdmin.getResourceManager());
+          }
         }
         // initializeExternalResources is synchronized
         
mUimaContextAdmin.getResourceManager().initializeExternalResources(resMgrCfg,


Reply via email to