[jboss-svn-commits] JBoss Common SVN: r2904 - in common-core/trunk/src: test/java/org/jboss/test/util/test/stream and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Aug 26 06:29:05 EDT 2008
Author: manik.surtani at jboss.com
Date: 2008-08-26 06:29:05 -0400 (Tue, 26 Aug 2008)
New Revision: 2904
Modified:
common-core/trunk/src/main/java/org/jboss/util/stream/MarshalledValueInputStream.java
common-core/trunk/src/test/java/org/jboss/test/util/test/stream/MarshallValueStreamTestCase.java
Log:
Added test and fix for JBCOMMON-64: MarshalledValueInputStream's resolveClass() method breaks when deserializing primitive class types.
Modified: common-core/trunk/src/main/java/org/jboss/util/stream/MarshalledValueInputStream.java
===================================================================
--- common-core/trunk/src/main/java/org/jboss/util/stream/MarshalledValueInputStream.java 2008-08-26 10:19:26 UTC (rev 2903)
+++ common-core/trunk/src/main/java/org/jboss/util/stream/MarshalledValueInputStream.java 2008-08-26 10:29:05 UTC (rev 2904)
@@ -25,6 +25,8 @@
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
+import java.util.HashMap;
+import java.util.Map;
/**
* An ObjectInputStream subclass used by the MarshalledValue class to
@@ -35,12 +37,28 @@
* @version $Revision: 37406 $
*/
public class MarshalledValueInputStream
- extends ObjectInputStream
+ extends ObjectInputStream
{
+ private static final Map<String, Class> primClasses = new HashMap<String, Class>(8, 1.0F);
+
+ static
+ {
+ primClasses.put("boolean", boolean.class);
+ primClasses.put("byte", byte.class);
+ primClasses.put("char", char.class);
+ primClasses.put("short", short.class);
+ primClasses.put("int", int.class);
+ primClasses.put("long", long.class);
+ primClasses.put("float", float.class);
+ primClasses.put("double", double.class);
+ primClasses.put("void", void.class);
+ }
+
/**
* Creates a new instance of MarshalledValueOutputStream
- * @param is
- * @throws IOException
+ *
+ * @param is
+ * @throws IOException
*/
public MarshalledValueInputStream(InputStream is) throws IOException
{
@@ -49,21 +67,31 @@
/**
* Use the thread context class loader to resolve the class
- *
- * @throws java.io.IOException Any exception thrown by the underlying OutputStream.
+ *
+ * @throws java.io.IOException Any exception thrown by the underlying OutputStream.
*/
protected Class<?> resolveClass(ObjectStreamClass v)
- throws IOException, ClassNotFoundException
+ throws IOException, ClassNotFoundException
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String className = v.getName();
-
- // JDK 6, by default, only supports array types (ex. [[B) using Class.forName()
- return Class.forName(className, false, loader);
+ try
+ {
+ // JDK 6, by default, only supports array types (ex. [[B) using Class.forName()
+ return Class.forName(className, false, loader);
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ Class cl = primClasses.get(className);
+ if (cl == null)
+ throw cnfe;
+ else
+ return cl;
+ }
}
protected Class<?> resolveProxyClass(String[] interfaces)
- throws IOException, ClassNotFoundException
+ throws IOException, ClassNotFoundException
{
// Load the interfaces from the thread context class loader
ClassLoader loader = Thread.currentThread().getContextClassLoader();
@@ -72,7 +100,7 @@
{
ifaceClasses[i] = loader.loadClass(interfaces[i]);
}
-
+
return java.lang.reflect.Proxy.getProxyClass(loader, ifaceClasses);
}
}
Modified: common-core/trunk/src/test/java/org/jboss/test/util/test/stream/MarshallValueStreamTestCase.java
===================================================================
--- common-core/trunk/src/test/java/org/jboss/test/util/test/stream/MarshallValueStreamTestCase.java 2008-08-26 10:19:26 UTC (rev 2903)
+++ common-core/trunk/src/test/java/org/jboss/test/util/test/stream/MarshallValueStreamTestCase.java 2008-08-26 10:29:05 UTC (rev 2904)
@@ -2,6 +2,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
import java.util.Arrays;
import junit.framework.TestCase;
@@ -29,4 +30,18 @@
MarshalledValueInputStream is = new MarshalledValueInputStream(new ByteArrayInputStream(baos.toByteArray()));
assertTrue(Arrays.equals(bytes, (Byte[]) is.readObject()));
}
+
+ public void testPrimitive() throws Exception
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(int.class);
+ oos.close();
+ baos.close();
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ MarshalledValueInputStream mvis = new MarshalledValueInputStream(bais);
+ Object o = mvis.readObject();
+ assertNotNull(o);
+ assertEquals(o, int.class);
+ }
}
More information about the jboss-svn-commits
mailing list