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;