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 2007/12/14 23:11:47 UTC

svn commit: r604312 - in /incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb: JAXBContextInitializer.java JAXBDataBinding.java

Author: dkulp
Date: Fri Dec 14 14:11:42 2007
New Revision: 604312

URL: http://svn.apache.org/viewvc?rev=604312&view=rev
Log:
[CXF-1278] Move the checks for ObjectFactory objects from the ContextInitializer to the same place the checks for jaxb.index is done

Modified:
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?rev=604312&r1=604311&r2=604312&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java Fri Dec 14 14:11:42 2007
@@ -28,7 +28,6 @@
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.Set;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -36,7 +35,6 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 
-import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.service.ServiceModelVisitor;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.ServiceInfo;
@@ -47,12 +45,10 @@
 class JAXBContextInitializer extends ServiceModelVisitor {
 
     private Set<Class<?>> classes;
-    private Set<String> packages;
 
     public JAXBContextInitializer(ServiceInfo serviceInfo, Set<Class<?>> classes) {
         super(serviceInfo);
         this.classes = classes;
-        this.packages = new HashSet<String>();
     }
 
     @Override
@@ -167,20 +163,6 @@
                 }
                 classes.add(cls);
                 walkReferences(cls);
-
-                String pname = PackageUtils.getPackageName(cls);
-                if (!packages.contains(pname)) {
-                    packages.add(pname);
-                    String name = pname + ".ObjectFactory";
-                    try {
-                        Class ocls = Class.forName(name, false, cls.getClassLoader());
-                        if (!classes.contains(ocls)) {
-                            classes.add(ocls);
-                        }
-                    } catch (ClassNotFoundException ex) {
-                        // cannot add factory, just add the class
-                    }
-                }
             }
         }
     }

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=604312&r1=604311&r2=604312&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Fri Dec 14 14:11:42 2007
@@ -340,32 +340,24 @@
             }
         }
         
-        for (Class<?> clz : classes) {
-            if (clz.getName().endsWith("ObjectFactory")) {
-                //kind of a hack, but ObjectFactories may be created with empty namespaces
-                defaultNs = null;
-            }
-        }
-        
-        Map<String, Object> map = new HashMap<String, Object>();
-        if (defaultNs != null) {
-            map.put("com.sun.xml.bind.defaultNamespaceRemap", defaultNs);
-        }
-        
-        if (contextProperties != null) {
-            //add any specified context properties into the properties map
-            map.putAll(contextProperties);
-        }
-        
         //try and read any jaxb.index files that are with the other classes.  This should 
         //allow loading of extra classes (such as subclasses for inheritance reasons) 
-        //that are in the same package.
+        //that are in the same package.  Also check for ObjectFactory classes
         Map<String, InputStream> packages = new HashMap<String, InputStream>();
         Map<String, ClassLoader> packageLoaders = new HashMap<String, ClassLoader>();
+        Set<Class<?>> objectFactories = new HashSet<Class<?>>();
         for (Class<?> jcls : classes) {
-            if (!packages.containsKey(PackageUtils.getPackageName(jcls))) {
-                packages.put(PackageUtils.getPackageName(jcls), jcls.getResourceAsStream("jaxb.index"));
-                packageLoaders.put(PackageUtils.getPackageName(jcls), jcls.getClassLoader());
+            String pkgName = PackageUtils.getPackageName(jcls); 
+            if (!packages.containsKey(pkgName)) {
+                packages.put(pkgName, jcls.getResourceAsStream("jaxb.index"));
+                packageLoaders.put(pkgName, jcls.getClassLoader());
+                try {
+                    Class<?> ofactory = Class.forName(pkgName + "." + "ObjectFactory",
+                                                 false, jcls.getClassLoader());
+                    objectFactories.add(ofactory);
+                } catch (ClassNotFoundException e) {
+                    //ignore
+                }
             }
         }
         for (Map.Entry<String, InputStream> entry : packages.entrySet()) {
@@ -406,9 +398,26 @@
                 }
             }
         }
-        
+        classes.addAll(objectFactories);
         addWsAddressingTypes(classes);
 
+        for (Class<?> clz : classes) {
+            if (clz.getName().endsWith("ObjectFactory")) {
+                //kind of a hack, but ObjectFactories may be created with empty namespaces
+                defaultNs = null;
+            }
+        }
+        
+        Map<String, Object> map = new HashMap<String, Object>();
+        if (defaultNs != null) {
+            map.put("com.sun.xml.bind.defaultNamespaceRemap", defaultNs);
+        }
+        
+        if (contextProperties != null) {
+            //add any specified context properties into the properties map
+            map.putAll(contextProperties);
+        }        
+        
         synchronized (JAXBCONTEXT_CACHE) {
             if (!JAXBCONTEXT_CACHE.containsKey(classes)) {
                 JAXBContext ctx = JAXBContext.newInstance(classes.toArray(new Class[classes.size()]), map);