This is an automated email from the ASF dual-hosted git repository. kexianjun pushed a commit to branch 2.6.x in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/2.6.x by this push: new 5672e52 fix fastjson serialize type (#3767) 5672e52 is described below commit 5672e52b125df72a45569b637aa4a14547c65391 Author: cyejing <jing23...@gmail.com> AuthorDate: Fri Mar 29 14:37:45 2019 +0800 fix fastjson serialize type (#3767) --- .../serialize/fastjson/FastJsonObjectInput.java | 5 +- .../fastjson/FastJsonObjectInputTest.java | 61 +++++++++++++++++++--- .../serialize/fastjson/model/Organization.java | 30 +++++++++++ 3 files changed, 85 insertions(+), 11 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 3ef50ce..efe45d7 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 class FastJsonObjectInput implements ObjectInput { @Override @SuppressWarnings("unchecked") public <T> T readObject(Class<T> 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 06e6bc6..95e7417 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 class FastJsonObjectInputTest { 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<Person> 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<List<Person>> 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<Person> towLayer() { + return null; + } + + public Organization<List<Person>> 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 0000000..bbe8bfa --- /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<T> { + + private T data; + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +}