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 2013/04/17 13:14:07 UTC
svn commit: r1468837 -
/cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
Author: sergeyb
Date: Wed Apr 17 11:14:07 2013
New Revision: 1468837
URL: http://svn.apache.org/r1468837
Log:
[CXF-4971] Updating JSONProvider to check a context property too when deciding whether to keep the root or not
Modified:
cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
Modified: cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java?rev=1468837&r1=1468836&r2=1468837&view=diff
==============================================================================
--- cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java (original)
+++ cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java Wed Apr 17 11:14:07 2013
@@ -85,7 +85,7 @@ public class JSONProvider<T> extends Abs
private static final String MAPPED_CONVENTION = "mapped";
private static final String BADGER_FISH_CONVENTION = "badgerfish";
-
+ private static final String DROP_ROOT_CONTEXT_PROPERTY = "drop.json.root.element";
static {
new SimpleConverter();
}
@@ -490,14 +490,17 @@ public class JSONProvider<T> extends Abs
protected XMLStreamWriter createWriter(Object actualObject, Class<?> actualClass,
Type genericType, String enc, OutputStream os, boolean isCollection) throws Exception {
- QName qname = actualClass == Document.class ? null : getQName(actualClass, genericType, actualObject);
- if (qname != null && ignoreNamespaces && (isCollection || dropRootElement)) {
- qname = new QName(qname.getLocalPart());
- }
if (BADGER_FISH_CONVENTION.equals(convention)) {
return JSONUtils.createBadgerFishWriter(os);
}
+ boolean dropRootNeeded = isDropRootNeeded();
+
+ QName qname = actualClass == Document.class ? null : getQName(actualClass, genericType, actualObject);
+ if (qname != null && ignoreNamespaces && (isCollection || dropRootNeeded)) {
+ qname = new QName(qname.getLocalPart());
+ }
+
Configuration config =
JSONUtils.createConfiguration(namespaceMap,
writeXsiType && !ignoreNamespaces,
@@ -506,12 +509,24 @@ public class JSONProvider<T> extends Abs
XMLStreamWriter writer = JSONUtils.createStreamWriter(os, qname,
writeXsiType && !ignoreNamespaces, config, serializeAsArray, arrayKeys,
- isCollection || dropRootElement);
+ isCollection || dropRootNeeded);
writer = JSONUtils.createIgnoreMixedContentWriterIfNeeded(writer, ignoreMixedContent);
writer = JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces);
return createTransformWriterIfNeeded(writer, os);
}
+ protected boolean isDropRootNeeded() {
+ MessageContext mc = getContext();
+ if (mc != null) {
+ Object prop = mc.get(DROP_ROOT_CONTEXT_PROPERTY);
+ if (prop != null) {
+ // means the property has been set explicitly
+ return MessageUtils.isTrue(prop);
+ }
+ }
+ return dropRootElement;
+ }
+
protected void marshal(Object actualObject, Class<?> actualClass,
Type genericType, String enc, OutputStream os) throws Exception {