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);