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 2012/05/08 12:29:39 UTC
svn commit: r1335406 - in /cxf/branches/2.5.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/
Author: sergeyb
Date: Tue May 8 10:29:39 2012
New Revision: 1335406
URL: http://svn.apache.org/viewvc?rev=1335406&view=rev
Log:
Merged revisions 1335400 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1335400 | sergeyb | 2012-05-08 11:00:22 +0100 (Tue, 08 May 2012) | 1 line
[CXF-4296] Updating JSONProvider to use a namespaceMap for setting a Marshaller namespace mapper
........
Modified:
cxf/branches/2.5.x-fixes/ (props changed)
cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
svn:mergeinfo = /cxf/trunk:1335400
Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1335406&r1=1335405&r2=1335406&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Tue May 8 10:29:39 2012
@@ -46,6 +46,7 @@ import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
+import javax.xml.bind.PropertyException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.XmlAnyElement;
@@ -64,6 +65,7 @@ import org.apache.cxf.common.i18n.Bundle
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.PackageUtils;
import org.apache.cxf.jaxb.JAXBUtils;
+import org.apache.cxf.jaxb.NamespaceMapper;
import org.apache.cxf.jaxrs.ext.MessageContext;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
@@ -83,9 +85,12 @@ public abstract class AbstractJAXBProvid
protected static final ResourceBundle BUNDLE = BundleUtils.getBundle(AbstractJAXBProvider.class);
protected static final Logger LOG = LogUtils.getL7dLogger(AbstractJAXBProvider.class);
+ protected static final String NS_MAPPER_PROPERTY = "com.sun.xml.bind.namespacePrefixMapper";
+ protected static final String NS_MAPPER_PROPERTY_INT = "com.sun.xml.internal.bind.namespacePrefixMapper";
private static final String JAXB_DEFAULT_NAMESPACE = "##default";
private static final String JAXB_DEFAULT_NAME = "##default";
+
protected Set<Class<?>> collectionContextClasses = new HashSet<Class<?>>();
protected Map<String, String> jaxbElementClassMap = Collections.emptyMap();
@@ -122,6 +127,21 @@ public abstract class AbstractJAXBProvid
private Marshaller.Listener marshallerListener;
private DocumentDepthProperties depthProperties;
+ protected static void setNamespaceMapper(Marshaller ms, Map<String, String> map) throws Exception {
+ NamespaceMapper nsMapper = new NamespaceMapper(map);
+ setMarshallerProp(ms, nsMapper, NS_MAPPER_PROPERTY, NS_MAPPER_PROPERTY_INT);
+ }
+
+ protected static void setMarshallerProp(Marshaller ms, Object value,
+ String name1, String name2) throws Exception {
+ try {
+ ms.setProperty(name1, value);
+ } catch (PropertyException ex) {
+ ms.setProperty(name2, value);
+ }
+
+ }
+
public void setValidationHandler(ValidationEventHandler handler) {
eventHandler = handler;
}
Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1335406&r1=1335405&r2=1335406&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Tue May 8 10:29:39 2012
@@ -44,7 +44,6 @@ import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
-import javax.xml.bind.PropertyException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.namespace.QName;
@@ -56,7 +55,6 @@ import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Source;
import org.apache.cxf.helpers.CastUtils;
-import org.apache.cxf.jaxb.NamespaceMapper;
import org.apache.cxf.jaxrs.ext.MessageContext;
import org.apache.cxf.jaxrs.ext.Nullable;
import org.apache.cxf.jaxrs.ext.xml.XMLInstruction;
@@ -78,8 +76,6 @@ import org.apache.cxf.staxutils.transfor
@Provider
public class JAXBElementProvider extends AbstractJAXBProvider {
private static final String XML_PI_START = "<?xml version=\"1.0\" encoding=\"";
- private static final String NS_MAPPER_PROPERTY = "com.sun.xml.bind.namespacePrefixMapper";
- private static final String NS_MAPPER_PROPERTY_INT = "com.sun.xml.internal.bind.namespacePrefixMapper";
private static final String XML_PI_PROPERTY = "com.sun.xml.bind.xmlHeaders";
private static final String XML_PI_PROPERTY_INT = "com.sun.xml.internal.bind.xmlHeaders";
@@ -372,11 +368,6 @@ public class JAXBElementProvider extends
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);
- setMarshallerProp(ms, nsMapper, NS_MAPPER_PROPERTY, NS_MAPPER_PROPERTY_INT);
- }
-
protected void marshal(Object obj, Class<?> cls, Type genericType,
String enc, OutputStream os, MediaType mt) throws Exception {
marshal(obj, cls, genericType, enc, os, mt, new Annotation[]{});
@@ -440,15 +431,7 @@ public class JAXBElementProvider extends
}
}
- private static void setMarshallerProp(Marshaller ms, Object value,
- String name1, String name2) throws Exception {
- try {
- ms.setProperty(name1, value);
- } catch (PropertyException ex) {
- ms.setProperty(name2, value);
- }
-
- }
+
protected void addAttachmentMarshaller(Marshaller ms) {
Collection<Attachment> attachments = getAttachments(true);
Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java?rev=1335406&r1=1335405&r2=1335406&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java Tue May 8 10:29:39 2012
@@ -504,6 +504,9 @@ public class JSONProvider extends Abstra
}
Marshaller ms = createMarshaller(actualObject, actualClass, genericType, enc);
+ if (!namespaceMap.isEmpty()) {
+ setNamespaceMapper(ms, namespaceMap);
+ }
marshal(ms, actualObject, actualClass, genericType, enc, os, false);
}
Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java?rev=1335406&r1=1335405&r2=1335406&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java (original)
+++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java Tue May 8 10:29:39 2012
@@ -50,6 +50,7 @@ import javax.xml.bind.annotation.XmlElem
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.stream.StreamSource;
@@ -602,7 +603,6 @@ public class JSONProviderTest extends As
MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), os);
String s = os.toString();
- System.out.println(s);
assertEquals("{\"ns1.thetag\":{\"group\":\"b\",\"name\":\"a\"}}", s);
}
@@ -1147,7 +1147,87 @@ public class JSONProviderTest extends As
private TagVO2 createTag2(String name, String group) {
return new TagVO2(name, group);
}
+
+ @Test
+ public void testWriteReadDerivedNamespace() throws Exception {
+ JSONProvider provider = new JSONProvider();
+ provider.setMarshallAsJaxbElement(true);
+ Map<String, String> namespaceMap = new HashMap<String, String>();
+ namespaceMap.put("http://derivedtest", "derivedtestnamespace");
+ provider.setNamespaceMap(namespaceMap);
+
+ Base1 b = new Derived1("base", "derived");
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ provider.writeTo(b, Base1.class, Base1.class,
+ new Annotation[0], MediaType.APPLICATION_JSON_TYPE,
+ new MetadataMap<String, Object>(), bos);
+
+ readBase(bos.toString());
+ }
+
+ @SuppressWarnings("unchecked")
+ private void readBase(String data) throws Exception {
+ JSONProvider provider = new JSONProvider();
+ provider.setUnmarshallAsJaxbElement(true);
+ Map<String, String> namespaceMap = new HashMap<String, String>();
+ namespaceMap.put("http://derivedtest", "derivedtestnamespace");
+ provider.setNamespaceMap(namespaceMap);
+
+ ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+
+ Base1 base = (Base1)provider.readFrom(
+ (Class)Base1.class, Base1.class,
+ new Annotation[0], MediaType.APPLICATION_JSON_TYPE,
+ new MetadataMap<String, String>(), is);
+ assertEquals("base", base.getBase1Field());
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "Base1", namespace = "http://derivedtest")
+ @XmlSeeAlso({Derived1.class })
+ public static class Base1 {
+
+ protected String base1Field;
+
+ Base1() { }
+
+ Base1(String base) {
+ base1Field = base;
+ }
+
+ public String getBase1Field() {
+ return base1Field;
+ }
+
+ public void setBase1Field(String value) {
+ this.base1Field = value;
+ }
+ }
+
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "Derived1", namespace = "http://derivedtest")
+ public static class Derived1 extends Base1 {
+
+ protected String derived1Field;
+
+ Derived1() { }
+ public Derived1(String base, String derived) {
+ super(base);
+ derived1Field = derived;
+ }
+ public String getDerived1Field() {
+ return derived1Field;
+ }
+
+ public void setDerived1Field(String value) {
+ this.derived1Field = value;
+ }
+
+ }
+
@XmlRootElement()
public static class Books {
@XmlMixed