Author: dblevins
Date: Fri Jun 27 16:48:34 2008
New Revision: 672429

URL: http://svn.apache.org/viewvc?rev=672429&view=rev
Log:
OPENEJB-832: Remotely passing boolean.class, byte.class, char.class, 
short.class, int.class, long.class, float.class, in double.class results in 
ClassNotFoundException

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectInputStream.java
    
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectInputStream.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectInputStream.java?rev=672429&r1=672428&r2=672429&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectInputStream.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbObjectInputStream.java
 Fri Jun 27 16:48:34 2008
@@ -16,8 +16,6 @@
  */
 package org.apache.openejb.core.ivm;
 
-import org.apache.openejb.util.Classes;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.ObjectInputStream;
@@ -34,7 +32,21 @@
     }
 
     protected Class resolveClass(ObjectStreamClass classDesc) throws 
IOException, ClassNotFoundException {
-        return Classes.forName(classDesc.getName(), getClassloader());
+        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 {

Modified: 
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java?rev=672429&r1=672428&r2=672429&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
 (original)
+++ 
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EjbObjectInputStream.java
 Fri Jun 27 16:48:34 2008
@@ -16,7 +16,7 @@
  */
 package org.apache.openejb.client;
 
-import java.io.IOException;
+import java.io.*;
 import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectStreamClass;
@@ -32,7 +32,21 @@
     }
 
     protected Class resolveClass(ObjectStreamClass classDesc) throws 
IOException, ClassNotFoundException {
-        return Class.forName(classDesc.getName(), false, getClassloader());
+        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 {
@@ -51,4 +65,17 @@
         return Thread.currentThread().getContextClassLoader();
     }
 
+    public static void main(String[] args) throws Exception {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(baos);
+
+        out.writeObject(boolean.class);
+        out.close();
+
+        ByteArrayInputStream bais = new 
ByteArrayInputStream(baos.toByteArray());
+        ObjectInputStream in = new EjbObjectInputStream(bais);
+        Class clazz = (Class) in.readObject();
+        if (clazz != boolean.class) throw new Exception(clazz.toString());
+    }
+
 }


Reply via email to