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/11/03 05:34:40 UTC

[dubbo] 08/12: to process a scenario when service type is not available and service invocation is not generic either

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/dubbo.git

commit c18e6c367237584cc01c630141262cad9aae9595
Author: beiwei.ly <be...@alibaba-inc.com>
AuthorDate: Tue Oct 29 15:45:33 2019 +0800

    to process a scenario when service type is not available and service invocation is not generic either
---
 .../src/main/java/org/apache/dubbo/rpc/Invocation.java | 12 ++++++++++++
 .../main/java/org/apache/dubbo/rpc/RpcInvocation.java  | 18 ++++++++++++++++++
 .../org/apache/dubbo/rpc/filter/GenericImplFilter.java |  2 ++
 .../java/org/apache/dubbo/rpc/support/RpcUtils.java    |  2 +-
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java
index 96520d3..d5a24b0 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Invocation.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.rpc;
 
 import java.util.Map;
+import java.util.stream.Stream;
 
 /**
  * Invocation. (API, Prototype, NonThreadSafe)
@@ -46,6 +47,17 @@ public interface Invocation {
     Class<?>[] getParameterTypes();
 
     /**
+     * get parameter's signature, string representation of parameter types.
+     *
+     * @return parameter's signature
+     */
+    default String[] getParameterSignatures() {
+        return Stream.of(getParameterTypes())
+                .map(Class::getName)
+                .toArray(String[]::new);
+    }
+
+    /**
      * get arguments.
      *
      * @return arguments.
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 fc63bae..b29ee56 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
@@ -23,6 +23,7 @@ import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.stream.Stream;
 
 import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
@@ -47,6 +48,8 @@ public class RpcInvocation implements Invocation, Serializable {
 
     private Class<?>[] parameterTypes;
 
+    private String[] parameterSignatures;
+
     private Object[] arguments;
 
     private Map<String, Object> attachments;
@@ -118,6 +121,10 @@ public class RpcInvocation implements Invocation, Serializable {
     public RpcInvocation(String methodName, Class<?>[] parameterTypes, Object[] arguments, Map<String, Object> attachments, Invoker<?> invoker) {
         this.methodName = methodName;
         this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;
+        this.parameterSignatures = parameterTypes == null ? null :
+                Stream.of(getParameterTypes())
+                        .map(Class::getName)
+                        .toArray(String[]::new);
         this.arguments = arguments == null ? new Object[0] : arguments;
         this.attachments = attachments == null ? new HashMap<String, Object>() : attachments;
         this.invoker = invoker;
@@ -168,10 +175,21 @@ public class RpcInvocation implements Invocation, Serializable {
         return parameterTypes;
     }
 
+    @Override
+    public String[] getParameterSignatures() {
+        return  parameterSignatures;
+    }
+
     public void setParameterTypes(Class<?>[] parameterTypes) {
         this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;
     }
 
+    // parameter signatures can be set independently, it is useful when the service type is not found on caller side and
+    // the invocation is not generic invocation either.
+    public void setParameterSignatures(String[] parameterSignatures) {
+        this.parameterSignatures = parameterSignatures;
+    }
+
     @Override
     public Object[] getArguments() {
         return arguments;
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java
index 0fd0d82..2277f27 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/GenericImplFilter.java
@@ -32,6 +32,7 @@ import org.apache.dubbo.rpc.Result;
 import org.apache.dubbo.rpc.RpcException;
 import org.apache.dubbo.rpc.RpcInvocation;
 import org.apache.dubbo.rpc.service.GenericException;
+import org.apache.dubbo.rpc.service.GenericService;
 import org.apache.dubbo.rpc.support.ProtocolUtils;
 import org.apache.dubbo.rpc.support.RpcUtils;
 
@@ -130,6 +131,7 @@ public class GenericImplFilter extends ListenableFilter {
             String methodName = invocation.getMethodName();
             Class<?>[] parameterTypes = invocation.getParameterTypes();
             if (ProtocolUtils.isGeneric(generic)
+                    && GenericService.class != invoker.getInterface()
                     && (!$INVOKE.equals(invocation.getMethodName()) && !$INVOKE_ASYNC.equals(invocation.getMethodName()))
                     && invocation instanceof RpcInvocation) {
                 if (!appResponse.hasException()) {
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/RpcUtils.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/RpcUtils.java
index 60ed621..94faa57 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/RpcUtils.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/RpcUtils.java
@@ -62,7 +62,7 @@ public class RpcUtils {
                 }
             }
         } catch (Throwable t) {
-            logger.warn(t.getMessage(), t);
+            // ignore
         }
         return null;
     }