You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by li...@apache.org on 2006/11/20 11:15:19 UTC

svn commit: r477132 - in /harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/io/ObjectInputStream.java test/java/tests/api/java/io/ObjectInputStreamTest.java

Author: liangyx
Date: Mon Nov 20 02:15:18 2006
New Revision: 477132

URL: http://svn.apache.org/viewvc?view=rev&rev=477132
Log:
Apply patch for HARMONY-2192 ([classlib][ObjectStreamInputStream]Fails to deserialze an object created by cglib)

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java?view=diff&rev=477132&r1=477131&r2=477132
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/io/ObjectInputStream.java Mon Nov 20 02:15:18 2006
@@ -107,6 +107,19 @@
 
     // cache for readResolve methods
     private IdentityHashMap<Class<?>, Object> readResolveCache;
+    
+    private static final Hashtable<String, Class> PRIMITIVE_CLASSES = new Hashtable<String,Class>();
+    
+    static {
+		PRIMITIVE_CLASSES.put("byte", byte.class);
+		PRIMITIVE_CLASSES.put("short", short.class);
+		PRIMITIVE_CLASSES.put("int", int.class);
+		PRIMITIVE_CLASSES.put("long", long.class);
+		PRIMITIVE_CLASSES.put("boolean", boolean.class);
+		PRIMITIVE_CLASSES.put("char", char.class);
+		PRIMITIVE_CLASSES.put("float", float.class);
+		PRIMITIVE_CLASSES.put("double", double.class);
+	}
 
     // Internal type used to keep track of validators & corresponding priority
     class InputValidationDesc {
@@ -2350,11 +2363,18 @@
      *             If the corresponding class cannot be found.
      */
     protected Class<?> resolveClass(ObjectStreamClass osClass)
-            throws IOException, ClassNotFoundException {
-        // Use the first non-null ClassLoader on the stack. If null, use the
-        // system class loader
-        return Class.forName(osClass.getName(), true, callerClassLoader);
-    }
+			throws IOException, ClassNotFoundException {		
+		String className = osClass.getName();
+		//if it is primitive class, for example, long.class
+		Class cls = PRIMITIVE_CLASSES.get(className);
+		if (null == cls) {
+			//not primitive class
+            //Use the first non-null ClassLoader on the stack. If null, use the
+			// system class loader
+			return cls = Class.forName(className, true, callerClassLoader);
+		}
+		return cls;
+	}
 
     /**
      * If <code>enableResolveObject()</code> was activated, computes the

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java?view=diff&rev=477132&r1=477131&r2=477132
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/io/ObjectInputStreamTest.java Mon Nov 20 02:15:18 2006
@@ -19,6 +19,9 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.NotActiveException;
@@ -28,6 +31,7 @@
 import java.io.SerializablePermission;
 import java.io.StreamCorruptedException;
 import java.security.Permission;
+import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.Vector;
 
@@ -634,6 +638,23 @@
             fail("NullPointerException expected");
         } catch (NullPointerException e) {}
     }
+    
+    // Regression Test for JIRA 2192
+	public void test_readObject_withPrimitiveClass() throws Exception {
+		File file = new File("test.ser");
+		file.deleteOnExit();
+		Test test = new Test();
+		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
+				file));
+		out.writeObject(test);
+		out.close();
+
+		ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
+		Test another = (Test) in.readObject();
+		in.close();
+		assertEquals(test, another);
+	}  
+   
 
     /**
      * Sets up the fixture, for example, open a network connection. This method
@@ -643,4 +664,19 @@
         super.setUp();
         oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
     }
+}
+
+
+class Test implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	Class classes[] = new Class[] { byte.class, short.class, int.class,
+			long.class, boolean.class, char.class, float.class, double.class };
+
+	public boolean equals(Object o) {
+		if (!(o instanceof Test)) {
+			return false;
+		}
+		return Arrays.equals(classes, ((Test) o).classes);
+	}
 }