aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/apache/commons/lang3/SerializationUtils.java
diff options
context:
space:
mode:
authorGary D. Gregory <ggregory@apache.org>2012-02-29 14:39:01 +0000
committerGary D. Gregory <ggregory@apache.org>2012-02-29 14:39:01 +0000
commite9429c05e1a4797383fb405928088d2f8563ff97 (patch)
tree0332f8f1618f1b7fa1b3f6c96a434acb83747180 /src/main/java/org/apache/commons/lang3/SerializationUtils.java
parent81797ed4402a982f90bd903c7437aeea4e3933f5 (diff)
downloadapache-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.java26
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;
+ }
}
}