You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by cr...@apache.org on 2023/07/14 02:37:15 UTC

[dubbo] branch 3.2 updated: The Response Filter and Response Interceptor handle exceptions (#12722)

This is an automated email from the ASF dual-hosted git repository.

crazyhzm pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 65491fda07 The Response Filter and Response Interceptor handle exceptions (#12722)
65491fda07 is described below

commit 65491fda073edee57155fbbc8b258205a8379c3b
Author: huazhongming <cr...@gmail.com>
AuthorDate: Fri Jul 14 10:37:10 2023 +0800

    The Response Filter and Response Interceptor handle exceptions (#12722)
    
    Signed-off-by: crazyhzm <cr...@gmail.com>
---
 .../protocol/rest/filter/ServiceInvokeRestFilter.java    | 16 +++++++---------
 .../rpc/protocol/rest/handler/NettyHttpHandler.java      | 10 ++++++++--
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
index f1ac30b350..5ec11d5551 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/filter/ServiceInvokeRestFilter.java
@@ -121,16 +121,14 @@ public class ServiceInvokeRestFilter implements RestRequestFilter {
                         + "\n message is: " + result.getException().getMessage()
                         + "\n stacktrace is: " + stackTraceToString(exception));
             }
-        } else {
-
-            try {
-                // invoke the intercept chain before Result  write to  response
-                executeResponseIntercepts(url, request, nettyHttpResponse, result.getValue(), rpcInvocation, serviceDeployer);
-            } catch (Exception exception) {
-                logger.error("", exception.getMessage(), "", "dubbo rest protocol execute ResponseIntercepts error", exception);
-                throw exception;
-            }
+        }
 
+        try {
+            // invoke the intercept chain before Result  write to  response
+            executeResponseIntercepts(url, request, nettyHttpResponse, result.getValue(), rpcInvocation, serviceDeployer);
+        } catch (Exception exception) {
+            logger.error("", exception.getMessage(), "", "dubbo rest protocol execute ResponseIntercepts error", exception);
+            throw exception;
         }
     }
 
diff --git a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
index bc4f9f0219..839015ba6a 100644
--- a/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
+++ b/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/handler/NettyHttpHandler.java
@@ -85,8 +85,6 @@ public class NettyHttpHandler implements HttpHandler<NettyRequestFacade, NettyHt
             // first request filter
             executeFilters(url, requestFacade, nettyHttpResponse, serviceDeployer, restRequestFilters);
 
-            // second response filter
-            executeFilters(url, requestFacade, nettyHttpResponse, serviceDeployer, restResponseFilters);
         } catch (PathNoFoundException pathNoFoundException) {
             logger.error("", pathNoFoundException.getMessage(), "", "dubbo rest protocol provider path   no found ,raw request is :" + nettyHttpRequest, pathNoFoundException);
             nettyHttpResponse.sendError(404, pathNoFoundException.getMessage());
@@ -102,6 +100,14 @@ public class NettyHttpHandler implements HttpHandler<NettyRequestFacade, NettyHt
                 + " , stacktrace is: " + ServiceInvokeRestFilter.stackTraceToString(throwable));
         }
 
+        // second response filter
+        try {
+            executeFilters(url, requestFacade, nettyHttpResponse, serviceDeployer, restResponseFilters);
+        } catch (Throwable throwable) {
+            logger.error("", throwable.getMessage(), "", "dubbo rest protocol provider error ,and raw request is  " + nettyHttpRequest, throwable);
+            nettyHttpResponse.sendError(500, "dubbo rest invoke Internal error, message is " + throwable.getMessage() + " ,and exception type is : " + throwable.getClass()
+                + " , stacktrace is: " + ServiceInvokeRestFilter.stackTraceToString(throwable));
+        }
 
     }