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);