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

svn commit: r1498988 - in /cxf/trunk/rt/frontend/jaxws/src: main/java/org/apache/cxf/jaxws/context/WrappedAttachments.java test/java/org/apache/cxf/jaxws/context/WrappedAttachmentsTest.java

Author: ay
Date: Tue Jul  2 15:44:55 2013
New Revision: 1498988

URL: http://svn.apache.org/r1498988
Log:
clean up and add another test for CXF-5095

Added:
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/context/WrappedAttachmentsTest.java
Modified:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedAttachments.java

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedAttachments.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedAttachments.java?rev=1498988&r1=1498987&r2=1498988&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedAttachments.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedAttachments.java Tue Jul  2 15:44:55 2013
@@ -19,7 +19,7 @@
 
 package org.apache.cxf.jaxws.context;
 
-import java.util.Arrays;
+import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -65,7 +65,13 @@ class WrappedAttachments implements Set<
     }
 
     public Object[] toArray() {
-        Object[] obj = new Object[attachments.size()];
+        return toArray(new Object[attachments.size()]);
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> T[] toArray(T[] a) {
+        T[] copy = a.length == attachments.size() 
+            ? a : (T[])Array.newInstance(a.getClass(), attachments.size());
         int i = 0;
         for (Map.Entry<String, DataHandler> entry : attachments.entrySet()) {
             Attachment o = cache.get(entry.getKey());
@@ -73,15 +79,9 @@ class WrappedAttachments implements Set<
                 o = new AttachmentImpl(entry.getKey(), entry.getValue());
                 cache.put(entry.getKey(), o);
             }
-            obj[i++] = o;
+            copy[i++] = (T)o;
         }
-        return obj;
-    }
-
-    @SuppressWarnings("unchecked")
-    public <T> T[] toArray(T[] a) {
-        Object[] obj = toArray();
-        return (T[])Arrays.copyOf(obj, obj.length, a.getClass());
+        return copy;        
     }
 
     public boolean add(Attachment e) {

Added: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/context/WrappedAttachmentsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/context/WrappedAttachmentsTest.java?rev=1498988&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/context/WrappedAttachmentsTest.java (added)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/context/WrappedAttachmentsTest.java Tue Jul  2 15:44:55 2013
@@ -0,0 +1,74 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxws.context;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.activation.DataHandler;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.apache.cxf.attachment.AttachmentImpl;
+import org.apache.cxf.message.Attachment;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * 
+ */
+public class WrappedAttachmentsTest extends Assert {
+    @Test
+    public void testCreateAndModify() {
+        Map<String, DataHandler> content = new HashMap<String, DataHandler>();
+        content.put("att-1", new DataHandler(new ByteArrayDataSource("Hello world!".getBytes(), "text/plain")));
+        content.put("att-2", new DataHandler(new ByteArrayDataSource("Hola mundo!".getBytes(), "text/plain")));
+        WrappedAttachments attachments = new WrappedAttachments(content);
+        Attachment att3 = new AttachmentImpl("att-3", 
+            new DataHandler(new ByteArrayDataSource("Bonjour tout le monde!".getBytes(), "text/plain")));
+
+        assertEquals(2, attachments.size());
+        assertFalse(attachments.isEmpty());
+        
+        attachments.add(att3);
+        assertEquals(3, attachments.size());
+
+        attachments.add(att3);
+        assertEquals(3, attachments.size());
+        
+        attachments.remove(att3);
+        
+        assertEquals(2, attachments.size());
+        
+        Attachment attx = attachments.iterator().next();
+        
+        attachments.remove(attx);
+        
+        assertEquals(1, attachments.size());
+        
+        Attachment[] atts = attachments.toArray(new Attachment[attachments.size()]);
+        assertEquals(1, atts.length);
+        assertEquals("att-1".equals(attx.getId()) ? "att-2" : "att-1", atts[0].getId());
+        
+        attachments.clear();
+        assertTrue(attachments.isEmpty());
+        assertTrue(content.isEmpty());
+    }
+}