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