You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2011/09/14 21:17:19 UTC

svn commit: r1170781 - /openejb/trunk/openejb3/tck/cdi-tomee/src/main/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java

Author: dblevins
Date: Wed Sep 14 19:17:19 2011
New Revision: 1170781

URL: http://svn.apache.org/viewvc?rev=1170781&view=rev
Log:
use proper classloader for deserialization

Modified:
    openejb/trunk/openejb3/tck/cdi-tomee/src/main/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java

Modified: openejb/trunk/openejb3/tck/cdi-tomee/src/main/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/cdi-tomee/src/main/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java?rev=1170781&r1=1170780&r2=1170781&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/cdi-tomee/src/main/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java (original)
+++ openejb/trunk/openejb3/tck/cdi-tomee/src/main/java/org/apache/openejb/tck/cdi/tomee/BeansImpl.java Wed Sep 14 19:17:19 2011
@@ -21,12 +21,15 @@ import org.apache.openejb.core.ivm.Intra
 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 java.io.ObjectStreamClass;
+import java.lang.reflect.Proxy;
 
 /**
-* @version $Rev$ $Date$
-*/
+ * @version $Rev$ $Date$
+ */
 public class BeansImpl implements org.jboss.jsr299.tck.spi.Beans {
 
     public boolean isProxy(Object instance) {
@@ -46,7 +49,50 @@ public class BeansImpl implements org.jb
     @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();
+        }
+    }
+
 }