Author: sergeyb
Date: Thu Sep 8 21:14:12 2011
New Revision: 1166907
URL: http://svn.apache.org/viewvc?rev=1166907&view=rev
Log:
[CXF-3795] Configuring JAXBElementProvider to optionally register a namespace
to prefix mapper
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1166907&r1=1166906&r2=1166907&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
Thu Sep 8 21:14:12 2011
@@ -79,11 +79,15 @@ public class JAXBElementProvider extends
Marshaller.JAXB_SCHEMA_LOCATION});
private Map<String, Object> mProperties = Collections.emptyMap();
+ private Map<String, String> nsPrefixes = Collections.emptyMap();
public JAXBElementProvider() {
}
+ public void setNamespacePrefixes(Map<String, String> prefixes) {
+ nsPrefixes = prefixes;
+ }
@Override
protected boolean canBeReadAsJaxbElement(Class<?> type) {
@@ -320,16 +324,21 @@ public class JAXBElementProvider extends
ms.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
if (ns.length() > 0) {
Map<String, String> map = Collections.singletonMap(ns, "ns1");
- NamespaceMapper nsMapper = new NamespaceMapper(map);
- try {
- ms.setProperty("com.sun.xml.bind.namespacePrefixMapper",
nsMapper);
- } catch (PropertyException ex) {
-
ms.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", nsMapper);
- }
+ map.putAll(nsPrefixes);
+ setNamespaceMapper(ms, map);
}
marshal(obj, cls, genericType, enc, os, mt, ms);
}
+ protected static void setNamespaceMapper(Marshaller ms, Map<String,
String> map) throws Exception {
+ NamespaceMapper nsMapper = new NamespaceMapper(map);
+ try {
+ ms.setProperty("com.sun.xml.bind.namespacePrefixMapper", nsMapper);
+ } catch (PropertyException ex) {
+ ms.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper",
nsMapper);
+ }
+ }
+
protected void marshal(Object obj, Class<?> cls, Type genericType,
String enc, OutputStream os, MediaType mt) throws
Exception {
obj = convertToJaxbElementIfNeeded(obj, cls, genericType);
@@ -338,6 +347,9 @@ public class JAXBElementProvider extends
}
Marshaller ms = createMarshaller(obj, cls, genericType, enc);
+ if (!nsPrefixes.isEmpty()) {
+ setNamespaceMapper(ms, nsPrefixes);
+ }
addAttachmentMarshaller(ms);
marshal(obj, cls, genericType, enc, os, mt, ms);
}
Modified:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=1166907&r1=1166906&r2=1166907&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
Thu Sep 8 21:14:12 2011
@@ -323,6 +323,19 @@ public class JAXBElementProviderTest ext
}
@Test
+ public void testWriteWithCustomPrefixes() throws Exception {
+ JAXBElementProvider provider = new JAXBElementProvider();
+ provider.setNamespacePrefixes(
+ Collections.singletonMap("http://tags", "prefix"));
+ TagVO2 tag = new TagVO2("a", "b");
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ provider.writeTo(tag, TagVO2.class, TagVO2.class,
+ new Annotation[0], MediaType.TEXT_XML_TYPE, new
MetadataMap<String, Object>(), bos);
+ assertTrue(bos.toString().contains("prefix:thetag"));
+ }
+
+ @Test
public void testWriteWithoutXmlRootElement() throws Exception {
doTestWriteWithoutXmlRootElement("SuperBook", false, false);
}