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