Merge pull request #34 from apache/whitelist

whitelist patch
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java b/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java
index 5428228..8f38f5f 100644
--- a/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/SerializerFactory.java
@@ -70,15 +70,7 @@
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.logging.Level;
@@ -152,6 +144,10 @@
         } catch (Throwable e) {
         }
 
+
+        _staticSerializerMap.put(UUID.class, new StringValueSerializer());
+        _staticDeserializerMap.put(UUID.class, new UUIDDeserializer());
+
         _staticSerializerMap.put(File.class, new StringValueSerializer());
         try {
             _staticDeserializerMap.put(File.class,
diff --git a/src/main/java/com/alibaba/com/caucho/hessian/io/UUIDDeserializer.java b/src/main/java/com/alibaba/com/caucho/hessian/io/UUIDDeserializer.java
new file mode 100644
index 0000000..ffe1fca
--- /dev/null
+++ b/src/main/java/com/alibaba/com/caucho/hessian/io/UUIDDeserializer.java
@@ -0,0 +1,28 @@
+package com.alibaba.com.caucho.hessian.io;
+
+import java.io.IOException;
+import java.util.UUID;
+
+/**
+ * Deserializing a uuid valued object
+ **/
+public class UUIDDeserializer extends AbstractDeserializer {
+
+	@Override
+	public Class getType() {
+		return UUID.class;
+	}
+
+	@Override
+	public Object readObject(AbstractHessianInput in) throws IOException {
+		String uuidString = in.readString();
+		return UUID.fromString(uuidString);
+	}
+
+	@Override
+	public Object readObject(AbstractHessianInput in, String[] fieldNames) throws IOException {
+		String uuidString = in.readString();
+		return UUID.fromString(uuidString);
+	}
+
+}
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java b/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java
new file mode 100644
index 0000000..911d6c2
--- /dev/null
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/Hessian2UUIDTest.java
@@ -0,0 +1,70 @@
+package com.alibaba.com.caucho.hessian.io;
+
+import com.alibaba.com.caucho.hessian.io.base.SerializeTestBase;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.*;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
+
+/**
+ * fix hessian serialize bug:
+ * the uuid can not be deserialized properly
+ **/
+public class Hessian2UUIDTest extends SerializeTestBase {
+
+	@Test
+	public void testUUIDObject() throws IOException {
+		UUID actual = UUID.randomUUID();
+		UUID deserialize = baseHessian2Serialize(actual);
+		Assert.assertEquals(actual, deserialize);
+	}
+
+	@Test
+	public void testUUIDList() throws IOException {
+		List<UUID> actual = new ArrayList<>(2);
+		actual.add(UUID.randomUUID());
+		actual.add(UUID.randomUUID());
+
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		Hessian2Output out = new Hessian2Output(bout);
+
+		out.writeObject(actual);
+		out.flush();
+
+		ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
+		Hessian2Input input = new Hessian2Input(bin);
+
+		List<UUID> deserialize = (List) input.readObject();
+		assertTrue(deserialize != null);
+		assertTrue(deserialize.size() == 2);
+		assertEquals(actual, deserialize);
+	}
+
+	@Test
+	public void testUUIDMap() throws IOException {
+		Map<UUID, Object> actual = new HashMap<>(8);
+		actual.put(UUID.randomUUID(), UUID.randomUUID());
+		actual.put(UUID.randomUUID(), null);
+
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		Hessian2Output out = new Hessian2Output(bout);
+
+		out.writeObject(actual);
+		out.flush();
+
+		ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
+		Hessian2Input input = new Hessian2Input(bin);
+
+		Map<UUID, Object> deserialize = (Map<UUID, Object>) input.readObject();
+		assertTrue(deserialize != null);
+		assertTrue(deserialize.size() == 2);
+		assertEquals(actual, deserialize);
+	}
+
+}
diff --git a/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java b/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
index 5bb08a3..000e5dc 100644
--- a/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
+++ b/src/test/java/com/alibaba/com/caucho/hessian/io/HessianJavaSerializeTest.java
@@ -20,7 +20,6 @@
 import com.alibaba.com.caucho.hessian.io.beans.BaseUser;
 import com.alibaba.com.caucho.hessian.io.beans.GrandsonUser;
 import com.alibaba.com.caucho.hessian.io.beans.SubUser;
-
 import org.junit.Assert;
 import org.junit.Test;