diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/GenericServiceTest.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/GenericServiceTest.java index 529bbcbd03a..0c0f4928ad0 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/GenericServiceTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/GenericServiceTest.java @@ -149,13 +149,45 @@ public void testGenericSerializationJava() throws Exception { String name = "kimi"; ByteArrayOutputStream bos = new ByteArrayOutputStream(512); ExtensionLoader.getExtensionLoader(Serialization.class) - .getExtension("java").serialize(null, bos).writeObject(name); + .getExtension("nativejava").serialize(null, bos).writeObject(name); byte[] arg = bos.toByteArray(); Object obj = genericService.$invoke("sayName", new String[]{String.class.getName()}, new Object[]{arg}); Assert.assertTrue(obj instanceof byte[]); byte[] result = (byte[]) obj; Assert.assertEquals(ref.sayName(name), ExtensionLoader.getExtensionLoader(Serialization.class) - .getExtension("java").deserialize(null, new ByteArrayInputStream(result)).readObject().toString()); + .getExtension("nativejava").deserialize(null, new ByteArrayInputStream(result)).readObject().toString()); + + // getUsers + List users = new ArrayList(); + User user = new User(); + user.setName(name); + users.add(user); + bos = new ByteArrayOutputStream(512); + ExtensionLoader.getExtensionLoader(Serialization.class) + .getExtension("nativejava").serialize(null, bos).writeObject(users); + obj = genericService.$invoke("getUsers", + new String[]{List.class.getName()}, + new Object[]{bos.toByteArray()}); + Assert.assertTrue(obj instanceof byte[]); + result = (byte[]) obj; + Assert.assertEquals(users, + ExtensionLoader.getExtensionLoader(Serialization.class) + .getExtension("nativejava") + .deserialize(null, new ByteArrayInputStream(result)) + .readObject()); + + // echo(int) + bos = new ByteArrayOutputStream(512); + ExtensionLoader.getExtensionLoader(Serialization.class).getExtension("nativejava") + .serialize(null, bos).writeObject(Integer.MAX_VALUE); + obj = genericService.$invoke("echo", new String[]{int.class.getName()}, new Object[]{bos.toByteArray()}); + Assert.assertTrue(obj instanceof byte[]); + Assert.assertEquals(Integer.MAX_VALUE, + ExtensionLoader.getExtensionLoader(Serialization.class) + .getExtension("nativejava") + .deserialize(null, new ByteArrayInputStream((byte[]) obj)) + .readObject()); + } finally { reference.destroy(); } diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/DemoService.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/DemoService.java index 8615a26a3b3..e82bf2d7f67 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/DemoService.java +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/DemoService.java @@ -13,18 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.config.api; +package com.alibaba.dubbo.config.api; import java.util.List; - - -/** - * DemoService - * - * @author william.liangf - */ + + +/** + * DemoService + * + * @author william.liangf + */ public interface DemoService { - + String sayName(String name); Box getBox(); @@ -32,5 +32,7 @@ public interface DemoService { void throwDemoException() throws DemoException; List getUsers(List users); - + + int echo(int i); + } \ No newline at end of file diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/User.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/User.java index 249a0ee1aa2..9840a4aa151 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/User.java +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/api/User.java @@ -43,4 +43,24 @@ public void setName(String name) { this.name = name; } + @Override + public int hashCode() { + return name == null ? -1 : name.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof User)) { + return false; + } + User other = (User) obj; + if (this == other) { + return true; + } + if (name != null && other.name != null) { + return name.equals(other.name); + } + return false; + } + } diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl.java index 2d1dd9aac25..b2b89a4e62c 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl.java +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl.java @@ -13,24 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.dubbo.config.provider.impl; - +package com.alibaba.dubbo.config.provider.impl; + import java.util.List; import com.alibaba.dubbo.config.api.Box; import com.alibaba.dubbo.config.api.DemoException; import com.alibaba.dubbo.config.api.DemoService; import com.alibaba.dubbo.config.api.User; - -/** - * DemoServiceImpl - * - * @author william.liangf - */ + +/** + * DemoServiceImpl + * + * @author william.liangf + */ public class DemoServiceImpl implements DemoService { - - public String sayName(String name) { - return "say:" + name; + + public String sayName(String name) { + return "say:" + name; } public Box getBox() { @@ -44,5 +44,9 @@ public void throwDemoException() throws DemoException { public List getUsers(List users) { return users; } - + + public int echo(int i) { + return i; + } + } \ No newline at end of file diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl_LongWaiting.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl_LongWaiting.java index cb4a52b10b1..1b3795ab8ae 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl_LongWaiting.java +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/DemoServiceImpl_LongWaiting.java @@ -48,5 +48,9 @@ public void throwDemoException() throws DemoException { public List getUsers(List users) { return users; } + + public int echo(int i) { + return i; + } } \ No newline at end of file diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/UnserializableBoxDemoServiceImpl.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/UnserializableBoxDemoServiceImpl.java index 118d934a5dd..a3b7d9d50f7 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/UnserializableBoxDemoServiceImpl.java +++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/provider/impl/UnserializableBoxDemoServiceImpl.java @@ -44,5 +44,9 @@ public void throwDemoException() throws DemoException { public List getUsers(List users) { return users; } + + public int echo(int i) { + return i; + } } \ No newline at end of file diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java index 4a2a46d8f55..af916f6fe73 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/filter/GenericFilter.java @@ -69,7 +69,8 @@ public Result invoke(Invoker invoker, Invocation inv) throws RpcException { try { UnsafeByteArrayInputStream is = new UnsafeByteArrayInputStream((byte[])args[i]); args[i] = ExtensionLoader.getExtensionLoader(Serialization.class) - .getExtension(Constants.GENERIC_SERIALIZATION_JAVA).deserialize(null, is).readObject(); + .getExtension(getSerializationExtension(Constants.GENERIC_SERIALIZATION_JAVA)) + .deserialize(null, is).readObject(); } catch (Exception e) { throw new RpcException("Deserialize argument [" + (i + 1) + "] failed.", e); } @@ -93,7 +94,8 @@ public Result invoke(Invoker invoker, Invocation inv) throws RpcException { try { UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512); ExtensionLoader.getExtensionLoader(Serialization.class) - .getExtension(Constants.GENERIC_SERIALIZATION_JAVA).serialize(null, os).writeObject(result.getValue()); + .getExtension(getSerializationExtension(Constants.GENERIC_SERIALIZATION_JAVA)) + .serialize(null, os).writeObject(result.getValue()); return new RpcResult(os.toByteArray()); } catch (IOException e) { throw new RpcException("Serialize result failed.", e); @@ -110,4 +112,7 @@ public Result invoke(Invoker invoker, Invocation inv) throws RpcException { return invoker.invoke(inv); } + private String getSerializationExtension(String generic) { + return "nativejava"; + } } \ No newline at end of file