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 2008/07/22 05:56:23 UTC
svn commit: r678630 - in /cxf/branches/2.0.x-fixes: ./
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
Author: dkulp
Date: Mon Jul 21 20:56:22 2008
New Revision: 678630
URL: http://svn.apache.org/viewvc?rev=678630&view=rev
Log:
Merged revisions 678629 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r678629 | dkulp | 2008-07-21 23:54:45 -0400 (Mon, 21 Jul 2008) | 2 lines
[CXF-1712] Fix problems of caching objectfactories based on classname instead of Package object
........
Modified:
cxf/branches/2.0.x-fixes/ (props changed)
cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
Propchange: cxf/branches/2.0.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul 21 20:56:22 2008
@@ -1 +1 @@
-/cxf/trunk:673548,674485,674547,674551,674562,674601,674649,674764,674887,675644,675653,677048,677385,678004,678009,678559
+/cxf/trunk:673548,674485,674547,674551,674562,674601,674649,674764,674887,675644,675653,677048,677385,678004,678009,678559,678629
Propchange: cxf/branches/2.0.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=678630&r1=678629&r2=678630&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Mon Jul 21 20:56:22 2008
@@ -24,13 +24,13 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -112,26 +112,26 @@
}
private static final class CachedClassOrNull {
- private Class<?> cachedClass;
+ private WeakReference<Class<?>> cachedClass;
public CachedClassOrNull(Class<?> cachedClass) {
- this.cachedClass = cachedClass;
+ this.cachedClass = new WeakReference<Class<?>>(cachedClass);
}
public Class<?> getCachedClass() {
- return cachedClass;
+ return cachedClass == null ? null : cachedClass.get();
}
public void setCachedClass(Class<?> cachedClass) {
- this.cachedClass = cachedClass;
+ this.cachedClass = new WeakReference<Class<?>>(cachedClass);
}
}
private static final Map<Set<Class<?>>, CachedContextAndSchemas> JAXBCONTEXT_CACHE
= new CacheMap<Set<Class<?>>, CachedContextAndSchemas>();
- private static final Map<String, CachedClassOrNull> OBJECT_FACTORY_CACHE
- = new CacheMap<String, CachedClassOrNull>();
+ private static final Map<Package, CachedClassOrNull> OBJECT_FACTORY_CACHE
+ = new CacheMap<Package, CachedClassOrNull>();
Class[] extraClass;
@@ -394,16 +394,6 @@
}
public JAXBContext createJAXBContext(Set<Class<?>> classes, String defaultNs) throws JAXBException {
- Iterator it = classes.iterator();
- String className = "";
- Object remoteExceptionObject = null;
- while (it.hasNext()) {
- remoteExceptionObject = (Class)it.next();
- className = remoteExceptionObject.toString();
- if (!("".equals(className)) && className.contains("RemoteException")) {
- it.remove();
- }
- }
// add user extra class into jaxb context
if (extraClass != null && extraClass.length > 0) {
for (Class clz : extraClass) {
@@ -422,13 +412,17 @@
for (Class<?> jcls : classes) {
String pkgName = PackageUtils.getPackageName(jcls);
if (!packages.containsKey(pkgName)) {
+ Package pkg = jcls.getPackage();
+
packages.put(pkgName, jcls.getResourceAsStream("jaxb.index"));
packageLoaders.put(pkgName, jcls.getClassLoader());
String objectFactoryClassName = pkgName + "." + "ObjectFactory";
Class<?> ofactory = null;
CachedClassOrNull cachedFactory = null;
- synchronized (OBJECT_FACTORY_CACHE) {
- cachedFactory = OBJECT_FACTORY_CACHE.get(objectFactoryClassName);
+ if (pkg != null) {
+ synchronized (OBJECT_FACTORY_CACHE) {
+ cachedFactory = OBJECT_FACTORY_CACHE.get(pkg);
+ }
}
if (cachedFactory != null) {
ofactory = cachedFactory.getCachedClass();
@@ -438,9 +432,9 @@
ofactory = Class.forName(objectFactoryClassName, false, jcls
.getClassLoader());
objectFactories.add(ofactory);
- addToObjectFactoryCache(objectFactoryClassName, ofactory);
+ addToObjectFactoryCache(pkg, ofactory);
} catch (ClassNotFoundException e) {
- addToObjectFactoryCache(objectFactoryClassName, null);
+ addToObjectFactoryCache(pkg, null);
}
} else {
objectFactories.add(ofactory);
@@ -519,9 +513,12 @@
return cachedContextAndSchemas.getContext();
}
- private void addToObjectFactoryCache(String objectFactoryClassName, Class<?> ofactory) {
+ private void addToObjectFactoryCache(Package objectFactoryPkg, Class<?> ofactory) {
+ if (objectFactoryPkg == null) {
+ return;
+ }
synchronized (OBJECT_FACTORY_CACHE) {
- OBJECT_FACTORY_CACHE.put(objectFactoryClassName,
+ OBJECT_FACTORY_CACHE.put(objectFactoryPkg,
new CachedClassOrNull(ofactory));
}
}
Modified: cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java?rev=678630&r1=678629&r2=678630&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java (original)
+++ cxf/branches/2.0.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java Mon Jul 21 20:56:22 2008
@@ -121,17 +121,6 @@
}
@Test
- public void testCreateJAXBContext() throws Exception {
- try {
- Set<Class<?>> classes = new HashSet<Class<?>>();
- classes.add(Class.forName("java.rmi.RemoteException"));
- assertNotNull(new JAXBDataBinding().createJAXBContext(classes));
- } catch (Exception e) {
- assertFalse(true);
- }
-
- }
- @Test
public void testCreateReader() {
DataReader reader = jaxbDataBinding.createReader(XMLStreamReader.class);
assertTrue(reader instanceof DataReaderImpl);