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 2011/12/02 23:17:25 UTC

svn commit: r1209733 - in /cxf/branches/2.4.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java

Author: sergeyb
Date: Fri Dec  2 22:17:24 2011
New Revision: 1209733

URL: http://svn.apache.org/viewvc?rev=1209733&view=rev
Log:
Merged revisions 1209728 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1209728 | sergeyb | 2011-12-02 22:13:29 +0000 (Fri, 02 Dec 2011) | 1 line
  
  [CXF-3946] Using a mutable map to keep the namespace-prefix pairs when dealing with collections
........

Modified:
    cxf/branches/2.4.x-fixes/   (props changed)
    cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Dec  2 22:17:24 2011
@@ -1 +1 @@
-/cxf/trunk:1209588
+/cxf/trunk:1209588,1209728

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1209733&r1=1209732&r2=1209733&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Fri Dec  2 22:17:24 2011
@@ -27,6 +27,7 @@ import java.lang.reflect.Type;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -279,15 +280,20 @@ public class JAXBElementProvider extends
                                               .entity(message).build());
         }
         
-        StringBuilder prefix = new StringBuilder();
-        prefix.append(XML_PI_START + (enc == null ? "UTF-8" : enc) + "\"?>");
-        os.write(prefix.toString().getBytes());
+        StringBuilder pi = new StringBuilder();
+        pi.append(XML_PI_START + (enc == null ? "UTF-8" : enc) + "\"?>");
+        os.write(pi.toString().getBytes());
         String startTag = null;
         String endTag = null;
+        
         if (qname.getNamespaceURI().length() > 0) {
-            startTag = "<ns1:" + qname.getLocalPart() + " xmlns:ns1=\"" + qname.getNamespaceURI()
-                       + "\">";
-            endTag = "</ns1:" + qname.getLocalPart() + ">"; 
+            String prefix = nsPrefixes.get(qname.getNamespaceURI());
+            if (prefix == null) {
+                prefix = "ns1";
+            }
+            startTag = "<" + prefix + ":" + qname.getLocalPart() + " xmlns:" + prefix + "=\"" 
+                + qname.getNamespaceURI() + "\">";
+            endTag = "</" + prefix + ":" + qname.getLocalPart() + ">"; 
         } else {
             startTag = "<" + qname.getLocalPart() + ">";
             endTag = "</" + qname.getLocalPart() + ">";
@@ -329,7 +335,11 @@ public class JAXBElementProvider extends
         Marshaller ms = createMarshaller(obj, cls, genericType, enc);
         ms.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
         if (ns.length() > 0) {
-            Map<String, String> map = Collections.singletonMap(ns, "ns1");
+            Map<String, String> map = new HashMap<String, String>();
+            // set the default just in case
+            if (!nsPrefixes.containsKey(ns)) {
+                map.put(ns, "ns1");
+            }
             map.putAll(nsPrefixes);
             setNamespaceMapper(ms, map);
         }

Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=1209733&r1=1209732&r2=1209733&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java Fri Dec  2 22:17:24 2011
@@ -80,6 +80,7 @@ import org.apache.cxf.jaxrs.resources.Su
 import org.apache.cxf.jaxrs.resources.TagVO;
 import org.apache.cxf.jaxrs.resources.TagVO2;
 import org.apache.cxf.jaxrs.resources.Tags;
+import org.apache.cxf.jaxrs.utils.ParameterizedCollectionType;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
 
 import org.junit.Assert;
@@ -336,6 +337,20 @@ public class JAXBElementProviderTest ext
     }
     
     @Test
+    public void testWriteCollectionWithCustomPrefixes() throws Exception {
+        JAXBElementProvider provider = new JAXBElementProvider();
+        provider.setNamespacePrefixes(
+            Collections.singletonMap("http://tags", "prefix"));
+        TagVO2 tag = new TagVO2("a", "b");
+        List<TagVO2> tags = Collections.singletonList(tag);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        provider.writeTo(tags, List.class, new ParameterizedCollectionType<TagVO2>(TagVO2.class),
+                       new Annotation[0], MediaType.TEXT_XML_TYPE, new MetadataMap<String, Object>(), bos);
+        assertTrue(bos.toString().contains("prefix:thetag"));
+        assertFalse(bos.toString().contains("ns1:thetag"));
+    }
+    
+    @Test
     public void testWriteWithoutXmlRootElement() throws Exception {
         doTestWriteWithoutXmlRootElement("SuperBook", false, false);
     }