You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/05/02 14:08:44 UTC

svn commit: r1478340 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java

Author: sergeyb
Date: Thu May  2 12:08:44 2013
New Revision: 1478340

URL: http://svn.apache.org/r1478340
Log:
If modifyable MetadataMap has unmodifiable Lists the replace them if needed

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java?rev=1478340&r1=1478339&r2=1478340&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java Thu May  2 12:08:44 2013
@@ -92,10 +92,21 @@ public class MetadataMap<K, V> implement
     
     private void addValue(K key, V value, boolean last) {
         List<V> data = getList(key);
-        if (last) {
-            data.add(value);
-        } else {
-            data.add(0, value);
+        try {
+            if (last) {
+                data.add(value);
+            } else {
+                data.add(0, value);
+            }
+        } catch (UnsupportedOperationException ex) {
+            // this may happen if an unmodifiable List was set via put or putAll
+            if (!readOnly) {
+                List<V> newList = new ArrayList<V>(data);
+                put(key, newList);
+                addValue(key, value, last);
+            } else {
+                throw ex;
+            }
         }
     }
 

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java?rev=1478340&r1=1478339&r2=1478340&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java Thu May  2 12:08:44 2013
@@ -20,6 +20,7 @@
 package org.apache.cxf.jaxrs.impl;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -66,6 +67,21 @@ public class MetadataMapTest extends Ass
     }
     
     @Test
+    public void testAddFirstUnmodifiableListFirst() {
+        MetadataMap<String, Object> m = new MetadataMap<String, Object>();
+        m.put("baz", Arrays.<Object>asList("foo"));
+        List<Object> values = m.get("baz");
+        assertEquals(1, values.size());
+        assertEquals("foo", values.get(0));
+        
+        m.addFirst("baz", "clazz");
+        values = m.get("baz");
+        assertEquals(2, values.size());
+        assertEquals("clazz", values.get(0));
+        assertEquals("foo", values.get(1));
+    }
+    
+    @Test
     public void testAddAll() {
         MetadataMap<String, Object> m = new MetadataMap<String, Object>();
         List<Object> values = new ArrayList<Object>();