[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