You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by mc...@apache.org on 2008/02/21 13:48:20 UTC

svn commit: r629768 - /incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java

Author: mcombellack
Date: Thu Feb 21 04:48:15 2008
New Revision: 629768

URL: http://svn.apache.org/viewvc?rev=629768&view=rev
Log:
Fixed issue when trying to deserialize a Collection as the Collection class will be loaded by the System ClassLoader but the contents of the Collection may not be

Modified:
    incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java?rev=629768&r1=629767&r2=629768&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java Thu Feb 21 04:48:15 2008
@@ -72,8 +72,23 @@
                 oos.close();
                 bos.close();
 
+                // Work out which ClassLoader to use for deserializing arg
+                // We want to use:
+                //   * The ClassLoader of arg if it is not the System ClassLoader
+                //   * The ThreadContext ClassLoader if the ClassLoader of arg is the System ClassLoader
+                //     because Collection classes are loaded by the System ClassLoader but their contents
+                //     may be loaded from another ClassLoader
+                // 
+                ClassLoader classLoaderToUse = clazz.getClassLoader();
+                if (classLoaderToUse == null)
+                {
+                    // ClassLoader of arg is the System ClassLoader so we will use the ThreadContext ClassLoader
+                    // instead
+                    classLoaderToUse = Thread.currentThread().getContextClassLoader();
+                }
+                
                 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
-                ObjectInputStream ois = getObjectInputStream(bis, clazz.getClassLoader());
+                ObjectInputStream ois = getObjectInputStream(bis, classLoaderToUse);
                 Object objectCopy = ois.readObject();
                 ois.close();
                 bis.close();



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org