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;
     }
 }