You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2013/07/11 23:21:25 UTC

svn commit: r1502369 - in /cxf/trunk: api/src/main/java/org/apache/cxf/common/classloader/JAXBClassLoaderUtils.java rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java

Author: dkulp
Date: Thu Jul 11 21:21:25 2013
New Revision: 1502369

URL: http://svn.apache.org/r1502369
Log:
Move some code to a private method in the only place it's called

Removed:
    cxf/trunk/api/src/main/java/org/apache/cxf/common/classloader/JAXBClassLoaderUtils.java
Modified:
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java

Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?rev=1502369&r1=1502368&r2=1502369&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java Thu Jul 11 21:21:25 2013
@@ -41,8 +41,9 @@ import javax.xml.bind.annotation.XmlTran
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
+import javax.xml.namespace.QName;
 
-import org.apache.cxf.common.classloader.JAXBClassLoaderUtils;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.util.ReflectionUtil;
 import org.apache.cxf.common.util.StringUtils;
@@ -164,7 +165,7 @@ class JAXBContextInitializer extends Ser
                 && clazz.getAnnotation(XmlRootElement.class) == null
                 && clazz.getAnnotation(XmlType.class) != null
                 && StringUtils.isEmpty(clazz.getAnnotation(XmlType.class).name())) {
-                Object ref = JAXBClassLoaderUtils.createTypeReference(part.getName(), clazz);
+                Object ref = createTypeReference(part.getName(), clazz);
                 if (ref != null) {
                     typeReferences.add(ref);
                 }
@@ -446,4 +447,38 @@ class JAXBContextInitializer extends Ser
         }
         return false;
     }
+    
+    /**
+     * The TypeReference class is a sun specific class that is found in two different
+     * locations depending on environment. In IBM JDK the class is not available at all.
+     * So we have to load it at runtime.
+     * 
+     * @param n
+     * @param cls
+     * @return initiated TypeReference
+     */
+    private static Object createTypeReference(QName n, Class<?> cls) {
+        Class<?> refClass = null;
+        try {
+            refClass = ClassLoaderUtils.loadClass("com.sun.xml.bind.api.TypeReference", 
+                                                  JAXBContextInitializer.class);
+        } catch (Throwable ex) {
+            try {
+                refClass = ClassLoaderUtils.loadClass("com.sun.xml.internal.bind.api.TypeReference",
+                                                      JAXBContextInitializer.class);
+            } catch (Throwable ex2) {
+                //ignore
+            }
+        }
+        if (refClass != null) {
+            try {
+                return refClass.getConstructor(QName.class, Type.class, new Annotation[0].getClass())
+                    .newInstance(n, cls, new Annotation[0]);
+            } catch (Throwable e) {
+                //ignore
+            }
+        }
+        return null;
+    }
+    
 }
\ No newline at end of file