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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to