This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-hessian-lite.git


The following commit(s) were added to refs/heads/master by this push:
     new b662d24  fix deserialize uuid
     new fd11566  Merge pull request #33 from Queeee/fix_deserialize_uuid
b662d24 is described below

commit b662d24a6b4f2d1cb466d02064dcfe04bec34cc2
Author: 阙沂平 <queyip...@cvte.com>
AuthorDate: Thu Jun 4 17:05:42 2020 +0800

    fix deserialize uuid
---
 .../com/caucho/hessian/io/SerializerFactory.java   | 14 ++---
 .../com/caucho/hessian/io/UUIDDeserializer.java    | 28 +++++++++
 .../com/caucho/hessian/io/Hessian2UUIDTest.java    | 70 ++++++++++++++++++++++
 .../hessian/io/HessianJavaSerializeTest.java       |  1 -
 4 files changed, 103 insertions(+), 10 deletions(-)

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 20c4187..56f3a86 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.InputStream;
 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 @@ public class SerializerFactory extends 
AbstractSerializerFactory {
         } 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.base.SerializeTestBase;
 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;
 

Reply via email to