From 93b1d643959e7da8edea4b86bf75075964cf235c Mon Sep 17 00:00:00 2001 From: Born Date: Fri, 29 Mar 2019 13:01:44 +0800 Subject: [PATCH 1/2] fix fastjson serialize type --- .../fastjson/FastJsonObjectInput.java | 4 +- .../fastjson/FastJsonObjectInputTest.java | 47 ++++++++++++++++++- .../common/serialize/model/Organization.java | 30 ++++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/model/Organization.java diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java index 1a38f277dc7..68604d9bc27 100644 --- a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java @@ -103,8 +103,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 { diff --git a/dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java b/dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java index 5711f137450..bfc197c8b3d 100644 --- a/dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java +++ b/dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInputTest.java @@ -18,6 +18,10 @@ import com.alibaba.fastjson.JSONObject; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.List; +import org.apache.dubbo.common.serialize.model.Organization; import org.apache.dubbo.common.serialize.model.Person; import org.junit.jupiter.api.Assertions; @@ -32,6 +36,7 @@ import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.core.Is.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; public class FastJsonObjectInputTest { private FastJsonObjectInput fastJsonObjectInput; @@ -151,4 +156,44 @@ 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-test/src/test/java/org/apache/dubbo/common/serialize/model/Organization.java b/dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/model/Organization.java new file mode 100644 index 00000000000..d36d68ed28c --- /dev/null +++ b/dubbo-serialization/dubbo-serialization-test/src/test/java/org/apache/dubbo/common/serialize/model/Organization.java @@ -0,0 +1,30 @@ +/* + * 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 org.apache.dubbo.common.serialize.model; + +public class Organization { + + private T data; + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} From aadfdda983bbd91dc5efe55bc3a26dc3784a67ea Mon Sep 17 00:00:00 2001 From: Born Date: Fri, 29 Mar 2019 16:11:48 +0800 Subject: [PATCH 2/2] remove unuse import --- .../dubbo/common/serialize/fastjson/FastJsonObjectInput.java | 1 - 1 file changed, 1 deletion(-) diff --git a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java index 68604d9bc27..ccf6a2b3d51 100644 --- a/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/main/java/org/apache/dubbo/common/serialize/fastjson/FastJsonObjectInput.java @@ -17,7 +17,6 @@ package org.apache.dubbo.common.serialize.fastjson; import org.apache.dubbo.common.serialize.ObjectInput; -import org.apache.dubbo.common.utils.PojoUtils; import com.alibaba.fastjson.JSON;