Repository: cxf Updated Branches: refs/heads/master 86c613b12 -> d3b9fc560
[CXF-5808] Updating JAXBUtils to default to a mapper shipper with CXF if possible Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/d3b9fc56 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/d3b9fc56 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/d3b9fc56 Branch: refs/heads/master Commit: d3b9fc560a230cb44c78c13069f9fd96abcd68fd Parents: 86c613b Author: Sergey Beryozkin <[email protected]> Authored: Wed Jun 18 12:55:22 2014 +0100 Committer: Sergey Beryozkin <[email protected]> Committed: Wed Jun 18 12:55:22 2014 +0100 ---------------------------------------------------------------------- .../org/apache/cxf/common/jaxb/JAXBUtils.java | 32 +++++++++++++++----- .../jaxrs/provider/AbstractJAXBProvider.java | 2 +- .../cxf/jaxrs/provider/json/JSONProvider.java | 6 ++-- .../jaxrs/provider/json/utils/JSONUtils.java | 4 +-- 4 files changed, 30 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/d3b9fc56/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java index e8f750b..28294a4 100644 --- a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java +++ b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java @@ -68,6 +68,7 @@ import org.w3c.dom.Node; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; +import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.util.ASMHelper; import org.apache.cxf.common.util.ASMHelper.ClassWriter; import org.apache.cxf.common.util.ASMHelper.FieldVisitor; @@ -1008,17 +1009,32 @@ public final class JAXBUtils { className += postFix; Class<?> cls = helper.findClass(className, JAXBUtils.class); if (cls == null) { - ClassWriter cw = helper.createClassWriter(); - if (cw == null) { - return null; + try { + ClassWriter cw = helper.createClassWriter(); + if (cw != null) { + cls = createNamespaceWrapperInternal(helper, cw, postFix, mcls); + } + } catch (RuntimeException ex) { + // continue } - cls = createNamespaceWrapperInternal(helper, cw, postFix, mcls); } - try { - return cls.getConstructor(Map.class).newInstance(map); - } catch (Exception e) { - return null; + if (cls == null + && (mcls.getName().contains(".internal.") || mcls.getName().contains("com.sun"))) { + try { + cls = ClassLoaderUtils.loadClass("org.apache.cxf.common.jaxb.NamespaceMapper", + JAXBUtils.class); + } catch (ClassNotFoundException ex2) { + // ignore + } } + if (cls != null) { + try { + return cls.getConstructor(Map.class).newInstance(map); + } catch (Exception e) { + // ignore + } + } + return null; } /* // This is the "prototype" for the ASM generated class below http://git-wip-us.apache.org/repos/asf/cxf/blob/d3b9fc56/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java ---------------------------------------------------------------------- diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java index da1dce8..ff6d5a7 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java @@ -153,7 +153,7 @@ public abstract class AbstractJAXBProvider<T> extends AbstractConfigurableProvid protected void setNamespaceMapper(Marshaller ms, Map<String, String> map) throws Exception { Object nsMapper = JAXBUtils.setNamespaceMapper(map, ms); - if (namespaceMapperPropertyName != null) { + if (nsMapper != null && namespaceMapperPropertyName != null) { setMarshallerProp(ms, nsMapper, namespaceMapperPropertyName, null); } } http://git-wip-us.apache.org/repos/asf/cxf/blob/d3b9fc56/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 24f9182..d3ee719 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 @@ -495,6 +495,9 @@ public class JSONProvider<T> extends AbstractJAXBProvider<T> { } XMLStreamWriter writer = createWriter(actualObject, actualClass, genericType, enc, actualOs, isCollection); + if (namespaceMap.size() > 1 || namespaceMap.size() == 1 && !namespaceMap.containsKey(JSONUtils.XSI_URI)) { + setNamespaceMapper(ms, namespaceMap); + } ms.marshal(actualObject, writer); writer.close(); if (os != actualOs) { @@ -605,9 +608,6 @@ public class JSONProvider<T> extends AbstractJAXBProvider<T> { } Marshaller ms = createMarshaller(actualObject, actualClass, genericType, enc); - if (!namespaceMap.isEmpty()) { - setNamespaceMapper(ms, namespaceMap); - } marshal(ms, actualObject, actualClass, genericType, enc, os, false); } http://git-wip-us.apache.org/repos/asf/cxf/blob/d3b9fc56/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 fa68e95..c194cfc 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 @@ -55,8 +55,8 @@ import org.codehaus.jettison.mapped.TypeConverter; public final class JSONUtils { - private static final String XSI_PREFIX = "xsi"; - private static final String XSI_URI = WSDLConstants.NS_SCHEMA_XSI; + public static final String XSI_PREFIX = "xsi"; + public static final String XSI_URI = WSDLConstants.NS_SCHEMA_XSI; private JSONUtils() { }
