You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2011/07/07 23:17:25 UTC

svn commit: r1144044 - /geronimo/tck/branches/3.0/geronimo-porting/src/main/java/org/apache/geronimo/test/tck/BeansImpl.java

Author: dblevins
Date: Thu Jul  7 21:17:25 2011
New Revision: 1144044

URL: http://svn.apache.org/viewvc?rev=1144044&view=rev
Log:
Use the Thread context classloader when deserializing

Modified:
    geronimo/tck/branches/3.0/geronimo-porting/src/main/java/org/apache/geronimo/test/tck/BeansImpl.java

Modified: geronimo/tck/branches/3.0/geronimo-porting/src/main/java/org/apache/geronimo/test/tck/BeansImpl.java
URL: http://svn.apache.org/viewvc/geronimo/tck/branches/3.0/geronimo-porting/src/main/java/org/apache/geronimo/test/tck/BeansImpl.java?rev=1144044&r1=1144043&r2=1144044&view=diff
==============================================================================
--- geronimo/tck/branches/3.0/geronimo-porting/src/main/java/org/apache/geronimo/test/tck/BeansImpl.java (original)
+++ geronimo/tck/branches/3.0/geronimo-porting/src/main/java/org/apache/geronimo/test/tck/BeansImpl.java Thu Jul  7 21:17:25 2011
@@ -18,13 +18,16 @@
  */
 package org.apache.geronimo.test.tck;
 
+import org.jboss.jsr299.tck.spi.Beans;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-
-import org.jboss.jsr299.tck.spi.Beans;
+import java.io.ObjectStreamClass;
+import java.lang.reflect.Proxy;
 
 public class BeansImpl implements Beans {
 
@@ -46,8 +49,51 @@ public class BeansImpl implements Beans 
     @Override
     public Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
         ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-        ObjectInputStream is = new ObjectInputStream(bais);
+        ObjectInputStream is = new BeanObjectInputStream(bais);
         return is.readObject();
     }
 
+
+    public static class BeanObjectInputStream extends ObjectInputStream {
+
+        public BeanObjectInputStream(InputStream in) throws IOException {
+            super(in);
+        }
+
+        protected Class resolveClass(ObjectStreamClass classDesc) throws IOException, ClassNotFoundException {
+            try {
+                return Class.forName(classDesc.getName(), false, getClassloader());
+            } catch (ClassNotFoundException e) {
+                String n = classDesc.getName();
+                if (n.equals("boolean")) return boolean.class;
+                if (n.equals("byte")) return byte.class;
+                if (n.equals("char")) return char.class;
+                if (n.equals("short")) return short.class;
+                if (n.equals("int")) return int.class;
+                if (n.equals("long")) return long.class;
+                if (n.equals("float")) return float.class;
+                if (n.equals("double")) return double.class;
+
+                throw e;
+            }
+        }
+
+        protected Class resolveProxyClass(String[] interfaces) throws IOException, ClassNotFoundException {
+            Class[] cinterfaces = new Class[interfaces.length];
+            for (int i = 0; i < interfaces.length; i++)
+                cinterfaces[i] = getClassloader().loadClass(interfaces[i]);
+
+            try {
+                return Proxy.getProxyClass(getClassloader(), cinterfaces);
+            } catch (IllegalArgumentException e) {
+                throw new ClassNotFoundException(null, e);
+            }
+        }
+
+        ClassLoader getClassloader() {
+            return Thread.currentThread().getContextClassLoader();
+        }
+    }
+
+
 }