Repository: cxf Updated Branches: refs/heads/master 4f570a742 -> 09d4301ac
[CXF-6103] Updating IgnoreNamespaceWriter to optionally block xsi attributes Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/09d4301a Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/09d4301a Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/09d4301a Branch: refs/heads/master Commit: 09d4301ac26c0dc2d1dc575e3a6943bbf816219a Parents: 4f570a7 Author: Sergey Beryozkin <sberyoz...@talend.com> Authored: Fri Nov 14 21:58:33 2014 +0000 Committer: Sergey Beryozkin <sberyoz...@talend.com> Committed: Fri Nov 14 21:58:33 2014 +0000 ---------------------------------------------------------------------- .../cxf/staxutils/transform/IgnoreNamespacesWriter.java | 11 ++++++++++- .../cxf/jaxrs/provider/aegis/AegisJSONProvider.java | 2 +- .../cxf/jaxrs/provider/json/DataBindingJSONProvider.java | 2 +- .../org/apache/cxf/jaxrs/provider/json/JSONProvider.java | 2 +- .../apache/cxf/jaxrs/provider/json/utils/JSONUtils.java | 10 +++++----- 5 files changed, 18 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/09d4301a/core/src/main/java/org/apache/cxf/staxutils/transform/IgnoreNamespacesWriter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/cxf/staxutils/transform/IgnoreNamespacesWriter.java b/core/src/main/java/org/apache/cxf/staxutils/transform/IgnoreNamespacesWriter.java index ea558ed..75d8f9a 100644 --- a/core/src/main/java/org/apache/cxf/staxutils/transform/IgnoreNamespacesWriter.java +++ b/core/src/main/java/org/apache/cxf/staxutils/transform/IgnoreNamespacesWriter.java @@ -24,13 +24,22 @@ import javax.xml.stream.XMLStreamWriter; import org.apache.cxf.staxutils.DelegatingXMLStreamWriter; public class IgnoreNamespacesWriter extends DelegatingXMLStreamWriter { - + private static final String XSI_PREFIX = "xsi"; + private boolean ignoreXsiAttributes; public IgnoreNamespacesWriter(XMLStreamWriter writer) { + this(writer, true); + } + public IgnoreNamespacesWriter(XMLStreamWriter writer, boolean ignoreXsiAttributes) { super(writer); + this.ignoreXsiAttributes = ignoreXsiAttributes; } public void writeAttribute(String prefix, String uri, String local, String value) throws XMLStreamException { + if (ignoreXsiAttributes && XSI_PREFIX.equals(prefix) + && ("type".equals(local) || "nil".equals(local))) { + return; + } super.writeAttribute(local, value); } http://git-wip-us.apache.org/repos/asf/cxf/blob/09d4301a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/aegis/AegisJSONProvider.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/aegis/AegisJSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/aegis/AegisJSONProvider.java index 332f60e..3bf5894 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/aegis/AegisJSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/aegis/AegisJSONProvider.java @@ -136,7 +136,7 @@ public final class AegisJSONProvider<T> extends AegisElementProvider<T> { writeXsiType && !ignoreNamespaces, false, null); XMLStreamWriter writer = JSONUtils.createStreamWriter(os, typeQName, writeXsiType && !ignoreNamespaces, config, serializeAsArray, arrayKeys, dropRootElement, enc); - return JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces); + return JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces, !writeXsiType); } @Override http://git-wip-us.apache.org/repos/asf/cxf/blob/09d4301a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/DataBindingJSONProvider.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/DataBindingJSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/DataBindingJSONProvider.java index 0768fc6..a41f577 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/DataBindingJSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/DataBindingJSONProvider.java @@ -102,7 +102,7 @@ public class DataBindingJSONProvider<T> extends DataBindingProvider<T> { XMLStreamWriter writer = JSONUtils.createStreamWriter(os, qname, writeXsiType && !ignoreNamespaces, config, serializeAsArray, arrayKeys, dropRootElement, enc); writer = JSONUtils.createIgnoreMixedContentWriterIfNeeded(writer, ignoreMixedContent); - return JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces); + return JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces, !writeXsiType); } @Override http://git-wip-us.apache.org/repos/asf/cxf/blob/09d4301a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java index d361fd1..c4a410a 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java @@ -573,7 +573,7 @@ public class JSONProvider<T> extends AbstractJAXBProvider<T> { writeXsiType && !ignoreNamespaces, config, rootIsArray, theArrayKeys, isCollection || dropRootInXmlNeeded, enc); writer = JSONUtils.createIgnoreMixedContentWriterIfNeeded(writer, ignoreMixedContent); - writer = JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces); + writer = JSONUtils.createIgnoreNsWriterIfNeeded(writer, ignoreNamespaces, !writeXsiType); return createTransformWriterIfNeeded(writer, os, dropElementsInXmlStreamProp); } http://git-wip-us.apache.org/repos/asf/cxf/blob/09d4301a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java index c194cfc..b12d1db 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java @@ -42,7 +42,6 @@ import org.apache.cxf.staxutils.DelegatingXMLStreamWriter; import org.apache.cxf.staxutils.DepthXMLStreamReader; import org.apache.cxf.staxutils.DocumentDepthProperties; import org.apache.cxf.staxutils.transform.IgnoreNamespacesWriter; -import org.apache.cxf.wsdl.WSDLConstants; import org.codehaus.jettison.AbstractXMLStreamWriter; import org.codehaus.jettison.badgerfish.BadgerFishXMLInputFactory; import org.codehaus.jettison.badgerfish.BadgerFishXMLOutputFactory; @@ -56,7 +55,7 @@ import org.codehaus.jettison.mapped.TypeConverter; public final class JSONUtils { public static final String XSI_PREFIX = "xsi"; - public static final String XSI_URI = WSDLConstants.NS_SCHEMA_XSI; + public static final String XSI_URI = "http://www.w3.org/2001/XMLSchema-instance"; private JSONUtils() { } @@ -121,8 +120,9 @@ public final class JSONUtils { } public static XMLStreamWriter createIgnoreNsWriterIfNeeded(XMLStreamWriter writer, - boolean ignoreNamespaces) { - return ignoreNamespaces ? new IgnoreNamespacesWriter(writer) : writer; + boolean ignoreNamespaces, + boolean ignoreXsiAttributes) { + return ignoreNamespaces ? new IgnoreNamespacesWriter(writer, ignoreXsiAttributes) : writer; } private static String getKey(MappedNamespaceConvention convention, QName qname) throws Exception { @@ -239,7 +239,7 @@ public final class JSONUtils { public void writeAttribute(String prefix, String uri, String local, String value) throws XMLStreamException { - if (!writeXsiType && "xsi".equals(prefix) + if (!writeXsiType && XSI_PREFIX.equals(prefix) && ("type".equals(local) || "nil".equals(local))) { return; }