Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 10574 invoked from network); 22 Jul 2008 03:56:44 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 22 Jul 2008 03:56:44 -0000 Received: (qmail 30056 invoked by uid 500); 22 Jul 2008 03:56:44 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 30006 invoked by uid 500); 22 Jul 2008 03:56:44 -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 29995 invoked by uid 99); 22 Jul 2008 03:56:44 -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:56:44 -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:55:58 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id D464F2388987; Mon, 21 Jul 2008 20:56:23 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Tue, 22 Jul 2008 03:56:23 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080722035623.D464F2388987@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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> 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; @@ -394,16 +394,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) { @@ -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> 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);