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;