This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 8e4ef09 RpcInvocation adds returnType assignment in initParameterDesc
(#7746)
8e4ef09 is described below
commit 8e4ef09c78788ff2d44a474cb09a5ca5ca6c0809
Author: xiaoheng1 <[email protected]>
AuthorDate: Sat May 15 01:09:08 2021 +0800
RpcInvocation adds returnType assignment in initParameterDesc (#7746)
* fix #7745 RpcInvocation adds returnType assignment in initParameterDesc
* Code optimization
---
.../java/org/apache/dubbo/rpc/RpcInvocation.java | 9 ++++++++-
.../org/apache/dubbo/rpc/support/RpcUtilsTest.java | 20 ++++++++++++++++++++
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
index abda39e..bbe5d60 100644
---
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
+++
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
@@ -125,7 +125,6 @@ public class RpcInvocation implements Invocation,
Serializable {
public RpcInvocation(Method method, String serviceName, String
protocolServiceKey, Object[] arguments, Map<String, Object> attachment,
Map<Object, Object> attributes) {
this(method.getName(), serviceName, protocolServiceKey,
method.getParameterTypes(), arguments, attachment, null, attributes);
- this.returnType = method.getReturnType();
}
public RpcInvocation(String methodName, String serviceName, String
protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments) {
@@ -159,6 +158,7 @@ public class RpcInvocation implements Invocation,
Serializable {
this.parameterTypesDesc = methodDescriptor.getParamDesc();
this.compatibleParamSignatures =
methodDescriptor.getCompatibleParamSignatures();
this.returnTypes = methodDescriptor.getReturnTypes();
+ this.returnType = methodDescriptor.getReturnClass();
}
}
}
@@ -167,6 +167,7 @@ public class RpcInvocation implements Invocation,
Serializable {
this.parameterTypesDesc =
ReflectUtils.getDesc(this.getParameterTypes());
this.compatibleParamSignatures =
Stream.of(this.parameterTypes).map(Class::getName).toArray(String[]::new);
this.returnTypes = RpcUtils.getReturnTypes(this);
+ this.returnType = RpcUtils.getReturnType(this);
}
}
@@ -179,10 +180,12 @@ public class RpcInvocation implements Invocation,
Serializable {
this.invoker = invoker;
}
+ @Override
public Object put(Object key, Object value) {
return attributes.put(key, value);
}
+ @Override
public Object get(Object key) {
return attributes.get(key);
}
@@ -241,6 +244,7 @@ public class RpcInvocation implements Invocation,
Serializable {
this.parameterTypesDesc = parameterTypesDesc;
}
+ @Override
public String[] getCompatibleParamSignatures() {
return compatibleParamSignatures;
}
@@ -285,6 +289,7 @@ public class RpcInvocation implements Invocation,
Serializable {
this.attachments = attachments == null ? new HashMap<>() : attachments;
}
+ @Override
public void setAttachment(String key, Object value) {
setObjectAttachment(key, value);
}
@@ -302,6 +307,7 @@ public class RpcInvocation implements Invocation,
Serializable {
setObjectAttachmentIfAbsent(key, value);
}
+ @Override
public void setAttachmentIfAbsent(String key, Object value) {
setObjectAttachmentIfAbsent(key, value);
}
@@ -396,6 +402,7 @@ public class RpcInvocation implements Invocation,
Serializable {
}
@Deprecated
+ @Override
public Object getObjectAttachment(String key, Object defaultValue) {
if (attachments == null) {
return defaultValue;
diff --git
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
index f6111df..180aef0 100644
---
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
+++
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/RpcUtilsTest.java
@@ -22,6 +22,8 @@ import org.apache.dubbo.rpc.InvokeMode;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcInvocation;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.ServiceRepository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -355,4 +357,22 @@ public class RpcUtilsTest {
Assertions.assertFalse(RpcUtils.isEcho("Ljava/lang/Object;",
"testMethod"));
Assertions.assertFalse(RpcUtils.isEcho("Ljava/lang/String;", "$echo"));
}
+ @Test
+ public void testIsReturnTypeFuture() {
+ Class<?> demoServiceClass = DemoService.class;
+ String serviceName = demoServiceClass.getName();
+ Invoker invoker = mock(Invoker.class);
+ given(invoker.getUrl()).willReturn(URL.valueOf(
+
"test://127.0.0.1:1/org.apache.dubbo.rpc.support.DemoService?interface=org.apache.dubbo.rpc.support.DemoService"));
+
+ RpcInvocation inv = new RpcInvocation("testReturnType", serviceName,
"", new Class<?>[] {String.class}, null, null, invoker, null);
+ Assertions.assertFalse(RpcUtils.isReturnTypeFuture(inv));
+
+ ServiceRepository repository = ApplicationModel.getServiceRepository();
+ repository.registerService(demoServiceClass);
+
+ inv = new RpcInvocation("testReturnType4", serviceName, "", new
Class<?>[] {String.class}, null, null, invoker, null);
+ Assertions.assertTrue(RpcUtils.isReturnTypeFuture(inv));
+ }
+
}