You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by fh...@apache.org on 2015/04/07 14:49:22 UTC

[3/3] flink git commit: [FLINK-1817] Fix ClassLoaderObjectInputStream to support primitive type classes

[FLINK-1817] Fix ClassLoaderObjectInputStream to support primitive type classes

This closes #565


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/d33b4454
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/d33b4454
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/d33b4454

Branch: refs/heads/master
Commit: d33b44549d416c30f01ead9aacf5cf7ed30674ca
Parents: 23fe006
Author: Fabian Hueske <fh...@apache.org>
Authored: Thu Apr 2 01:28:08 2015 +0200
Committer: Fabian Hueske <fh...@apache.org>
Committed: Tue Apr 7 14:46:24 2015 +0200

----------------------------------------------------------------------
 .../apache/flink/util/InstantiationUtil.java    | 30 +++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/d33b4454/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java
----------------------------------------------------------------------
diff --git a/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java b/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java
index c7088f5..241e56a 100644
--- a/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java
+++ b/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java
@@ -34,6 +34,7 @@ import java.io.ObjectOutputStream;
 import java.io.ObjectStreamClass;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Modifier;
+import java.util.HashMap;
 
 /**
  * Utility class to create instances from class objects and checking failure reasons.
@@ -48,10 +49,37 @@ public class InstantiationUtil {
 	private static class ClassLoaderObjectInputStream extends ObjectInputStream {
 		private ClassLoader classLoader;
 
+		private static final HashMap<String, Class<?>> primitiveClasses
+				= new HashMap<String, Class<?>>(8, 1.0F);
+		static {
+			primitiveClasses.put("boolean", boolean.class);
+			primitiveClasses.put("byte", byte.class);
+			primitiveClasses.put("char", char.class);
+			primitiveClasses.put("short", short.class);
+			primitiveClasses.put("int", int.class);
+			primitiveClasses.put("long", long.class);
+			primitiveClasses.put("float", float.class);
+			primitiveClasses.put("double", double.class);
+			primitiveClasses.put("void", void.class);
+		}
+
 		@Override
 		public Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
 			if (classLoader != null) {
-				return Class.forName(desc.getName(), false, classLoader);
+				String name = desc.getName();
+				try {
+					return Class.forName(name, false, classLoader);
+				} catch (ClassNotFoundException ex) {
+					// check if class is a primitive class
+					Class<?> cl = primitiveClasses.get(name);
+					if (cl != null) {
+						// return primitive class
+						return cl;
+					} else {
+						// throw ClassNotFoundException
+						throw ex;
+					}
+				}
 			}
 
 			return super.resolveClass(desc);