From 9240ad6c07c93febc821113a47093bc5606822af Mon Sep 17 00:00:00 2001 From: Born Date: Thu, 28 Mar 2019 18:26:13 +0800 Subject: [PATCH 1/4] fix fastjson serialize type --- .../dubbo/common/serialize/fastjson/FastJsonObjectInput.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java index 3ef50ce68f8..d440b7de0ac 100644 --- a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java @@ -99,8 +99,8 @@ public T readObject(Class cls) throws IOException, ClassNotFoundException @Override @SuppressWarnings("unchecked") public T readObject(Class cls, Type type) throws IOException, ClassNotFoundException { - Object value = readObject(cls); - return (T) PojoUtils.realize(value, cls, type); + String json = readLine(); + return (T) JSON.parseObject(json, type); } private String readLine() throws IOException, EOFException { From a790762f3012b006474ef6f710389de2d4b2eaee Mon Sep 17 00:00:00 2001 From: Born Date: Thu, 28 Mar 2019 19:15:51 +0800 Subject: [PATCH 2/4] fix fastjson serialize type add unit test --- .../fastjson/FastJsonObjectInputTest.java | 61 ++++++++++++++++--- .../fastjson/model/Organization.java | 17 ++++++ 2 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java index 06e6bc66d99..95e74172d05 100644 --- a/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java @@ -16,19 +16,25 @@ */ package com.alibaba.dubbo.common.serialize.fastjson; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import com.alibaba.dubbo.common.serialize.fastjson.model.Organization; import com.alibaba.dubbo.common.serialize.fastjson.model.Person; import com.alibaba.fastjson.JSONObject; -import org.junit.Test; - import java.io.ByteArrayInputStream; import java.io.EOFException; import java.io.IOException; import java.io.StringReader; - -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.CoreMatchers.nullValue; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.List; +import javax.lang.model.util.Types; +import org.junit.Test; public class FastJsonObjectInputTest { private FastJsonObjectInput fastJsonObjectInput; @@ -144,4 +150,43 @@ public void testReadObjectWithoutClass() throws IOException, ClassNotFoundExcept assertThat(readObject.getString("name"), is("John")); assertThat(readObject.getInteger("age"), is(30)); } -} \ No newline at end of file + + @Test + public void testReadObjectWithTowType() throws Exception { + fastJsonObjectInput = new FastJsonObjectInput(new StringReader("[{\"name\":\"John\",\"age\":30},{\"name\":\"Born\",\"age\":24}]")); + + Method methodReturnType = getClass().getMethod("towLayer"); + Type type = methodReturnType.getGenericReturnType(); + List o = fastJsonObjectInput.readObject(List.class, type); + + assertTrue(o instanceof List); + assertTrue(o.get(0) instanceof Person); + + assertThat(o.size(), is(2)); + assertThat(o.get(1).getName(), is("Born")); + } + + @Test + public void testReadObjectWithThreeType() throws Exception { + fastJsonObjectInput = new FastJsonObjectInput(new StringReader("{\"data\":[{\"name\":\"John\",\"age\":30},{\"name\":\"Born\",\"age\":24}]}")); + + Method methodReturnType = getClass().getMethod("threeLayer"); + Type type = methodReturnType.getGenericReturnType(); + Organization> o = fastJsonObjectInput.readObject(Organization.class, type); + + assertTrue(o instanceof Organization); + assertTrue(o.getData() instanceof List); + assertTrue(o.getData().get(0) instanceof Person); + + assertThat(o.getData().size(), is(2)); + assertThat(o.getData().get(1).getName(), is("Born")); + } + + public List towLayer() { + return null; + } + + public Organization> threeLayer() { + return null; + } +} diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java new file mode 100644 index 00000000000..e460ca609b6 --- /dev/null +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java @@ -0,0 +1,17 @@ +package com.alibaba.dubbo.common.serialize.fastjson.model; + +/** + * @author Born + */ +public class Organization { + + private T data; + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} From a137d08e9481e0bbe96df07eb6a683f8c8e782a8 Mon Sep 17 00:00:00 2001 From: Born Date: Fri, 29 Mar 2019 09:30:44 +0800 Subject: [PATCH 3/4] fix fastjson serialize type remove Unused import --- .../dubbo/common/serialize/fastjson/FastJsonObjectInput.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java index d440b7de0ac..efe45d7262b 100644 --- a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/com/alibaba/dubbo/common/serialize/fastjson/FastJsonObjectInput.java @@ -17,7 +17,6 @@ package com.alibaba.dubbo.common.serialize.fastjson; import com.alibaba.dubbo.common.serialize.ObjectInput; -import com.alibaba.dubbo.common.utils.PojoUtils; import com.alibaba.fastjson.JSON; import java.io.BufferedReader; From 4786ee6e859a917bf07ac9fda672511eef35d6cb Mon Sep 17 00:00:00 2001 From: Born Date: Fri, 29 Mar 2019 10:31:44 +0800 Subject: [PATCH 4/4] add ASF license header --- .../fastjson/model/Organization.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java index e460ca609b6..bbe8bfa3fb8 100644 --- a/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/model/Organization.java @@ -1,8 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.alibaba.dubbo.common.serialize.fastjson.model; -/** - * @author Born - */ public class Organization { private T data;