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..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; @@ -99,8 +98,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-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..bbe8bfa3fb8 --- /dev/null +++ b/dubbo-serialization/dubbo-serialization-fastjson/src/test/java/com/alibaba/dubbo/common/serialize/fastjson/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 com.alibaba.dubbo.common.serialize.fastjson.model; + +public class Organization { + + private T data; + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +}