Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 9408 invoked from network); 22 Jul 2008 03:55:07 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 22 Jul 2008 03:55:07 -0000 Received: (qmail 29280 invoked by uid 500); 22 Jul 2008 03:55:06 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 29241 invoked by uid 500); 22 Jul 2008 03:55:06 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 29232 invoked by uid 99); 22 Jul 2008 03:55:06 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Jul 2008 20:55:06 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 22 Jul 2008 03:54:20 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3DCAE2388987; Mon, 21 Jul 2008 20:54:46 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r678629 - in /cxf/trunk/rt/databinding/jaxb/src: main/java/org/apache/cxf/jaxb/JAXBDataBinding.java test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java Date: Tue, 22 Jul 2008 03:54:45 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080722035446.3DCAE2388987@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dkulp Date: Mon Jul 21 20:54:45 2008 New Revision: 678629 URL: http://svn.apache.org/viewvc?rev=678629&view=rev Log: [CXF-1712] Fix problems of caching objectfactories based on classname instead of Package object Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=678629&r1=678628&r2=678629&view=diff ============================================================================== --- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original) +++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Mon Jul 21 20:54:45 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; @@ -116,26 +116,26 @@ } private static final class CachedClassOrNull { - private Class cachedClass; + private WeakReference> cachedClass; public CachedClassOrNull(Class cachedClass) { - this.cachedClass = cachedClass; + this.cachedClass = new WeakReference>(cachedClass); } public Class getCachedClass() { - return cachedClass; + return cachedClass == null ? null : cachedClass.get(); } public void setCachedClass(Class cachedClass) { - this.cachedClass = cachedClass; + this.cachedClass = new WeakReference>(cachedClass); } } private static final Map>, CachedContextAndSchemas> JAXBCONTEXT_CACHE = new CacheMap>, CachedContextAndSchemas>(); - private static final Map OBJECT_FACTORY_CACHE - = new CacheMap(); + private static final Map OBJECT_FACTORY_CACHE + = new CacheMap(); Class[] extraClass; @@ -404,16 +404,6 @@ } public JAXBContext createJAXBContext(Set> 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) { @@ -432,13 +422,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(); @@ -448,9 +442,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); @@ -529,9 +523,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/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java?rev=678629&r1=678628&r2=678629&view=diff ============================================================================== --- cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java (original) +++ cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBDataBindingTest.java Mon Jul 21 20:54:45 2008 @@ -121,17 +121,6 @@ } @Test - public void testCreateJAXBContext() throws Exception { - try { - Set> classes = new HashSet>(); - 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);