diff options
author | Gary D. Gregory <ggregory@apache.org> | 2012-02-29 14:39:01 +0000 |
---|---|---|
committer | Gary D. Gregory <ggregory@apache.org> | 2012-02-29 14:39:01 +0000 |
commit | e9429c05e1a4797383fb405928088d2f8563ff97 (patch) | |
tree | 0332f8f1618f1b7fa1b3f6c96a434acb83747180 /src/main/java/org/apache/commons/lang3/SerializationUtils.java | |
parent | 81797ed4402a982f90bd903c7437aeea4e3933f5 (diff) | |
download | apache-commons-lang-e9429c05e1a4797383fb405928088d2f8563ff97.tar.gz |
[LANG-788] SerializationUtils throws ClassNotFoundException when cloning primitive classes
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1295134 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/main/java/org/apache/commons/lang3/SerializationUtils.java')
-rw-r--r-- | src/main/java/org/apache/commons/lang3/SerializationUtils.java | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/main/java/org/apache/commons/lang3/SerializationUtils.java b/src/main/java/org/apache/commons/lang3/SerializationUtils.java index b766b2145..7c89b61d7 100644 --- a/src/main/java/org/apache/commons/lang3/SerializationUtils.java +++ b/src/main/java/org/apache/commons/lang3/SerializationUtils.java @@ -25,6 +25,8 @@ import java.io.ObjectOutputStream; import java.io.ObjectStreamClass; import java.io.OutputStream; import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; /** * <p>Assists with the serialization process and performs additional functionality based @@ -234,8 +236,10 @@ public class SerializationUtils { * class here is a workaround, see the JIRA issue LANG-626. </p> */ static class ClassLoaderAwareObjectInputStream extends ObjectInputStream { + private static final Map<String, Class<?>> primitiveTypes = + new HashMap<String, Class<?>>(); private ClassLoader classLoader; - + /** * Constructor. * @param in The <code>InputStream</code>. @@ -246,6 +250,16 @@ public class SerializationUtils { public ClassLoaderAwareObjectInputStream(InputStream in, ClassLoader classLoader) throws IOException { super(in); this.classLoader = classLoader; + + primitiveTypes.put("byte", byte.class); + primitiveTypes.put("short", short.class); + primitiveTypes.put("int", int.class); + primitiveTypes.put("long", long.class); + primitiveTypes.put("float", float.class); + primitiveTypes.put("double", double.class); + primitiveTypes.put("boolean", boolean.class); + primitiveTypes.put("char", char.class); + primitiveTypes.put("void", void.class); } /** @@ -262,7 +276,15 @@ public class SerializationUtils { try { return Class.forName(name, false, classLoader); } catch (ClassNotFoundException ex) { - return Class.forName(name, false, Thread.currentThread().getContextClassLoader()); + try { + return Class.forName(name, false, Thread.currentThread().getContextClassLoader()); + } catch (ClassNotFoundException cnfe) { + Class<?> cls = primitiveTypes.get(name); + if (cls != null) + return cls; + else + throw cnfe; + } } } |