You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2019/02/26 01:53:13 UTC
[incubator-dubbo] branch master updated: Merge pull request #3528,
fixes #208, setOnreturn does not work with generic invocation.
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 6034ceb Merge pull request #3528, fixes #208, setOnreturn does not work with generic invocation.
6034ceb is described below
commit 6034ceb21af7c34ef1778dad9a41b6ffa67667b6
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Tue Feb 26 09:52:56 2019 +0800
Merge pull request #3528, fixes #208, setOnreturn does not work with generic invocation.
---
.../java/org/apache/dubbo/config/ReferenceConfig.java | 18 ++++++++++++++++--
.../dubbo/rpc/protocol/dubbo/filter/FutureFilter.java | 10 +++++++++-
2 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
index 71d0573..659b46d 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java
@@ -46,6 +46,7 @@ import org.apache.dubbo.rpc.support.ProtocolUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -305,8 +306,21 @@ public class ReferenceConfig<T> extends AbstractReferenceConfig {
ref = createProxy(map);
- ConsumerModel consumerModel = new ConsumerModel(getUniqueServiceName(), interfaceClass, ref, interfaceClass.getMethods(), attributes);
- ApplicationModel.initConsumerModel(getUniqueServiceName(), consumerModel);
+ ApplicationModel.initConsumerModel(getUniqueServiceName(), buildConsumerModel(attributes));
+ }
+
+ private ConsumerModel buildConsumerModel(Map<String, Object> attributes) {
+ Method[] methods = interfaceClass.getMethods();
+ Class serviceInterface = interfaceClass;
+ if (interfaceClass == GenericService.class) {
+ try {
+ serviceInterface = Class.forName(interfaceName);
+ methods = serviceInterface.getMethods();
+ } catch (ClassNotFoundException e) {
+ methods = interfaceClass.getMethods();
+ }
+ }
+ return new ConsumerModel(getUniqueServiceName(), serviceInterface, ref, methods, attributes);
}
@SuppressWarnings({"unchecked", "rawtypes", "deprecation"})
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
index a4c6b09..98283f4 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/filter/FutureFilter.java
@@ -206,14 +206,22 @@ public class FutureFilter implements Filter {
if (consumerModel == null) {
return null;
}
- ConsumerMethodModel methodModel = consumerModel.getMethodModel(invocation.getMethodName());
+
+ String methodName = invocation.getMethodName();
+ if (methodName.equals(Constants.$INVOKE)) {
+ methodName = (String) invocation.getArguments()[0];
+ }
+
+ ConsumerMethodModel methodModel = consumerModel.getMethodModel(methodName);
if (methodModel == null) {
return null;
}
+
final ConsumerMethodModel.AsyncMethodInfo asyncMethodInfo = methodModel.getAsyncInfo();
if (asyncMethodInfo == null) {
return null;
}
+
return asyncMethodInfo;
}
}