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();
+ }
+ }
+
}