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

liubao pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d11c63  [SCB-656]edge service should return back the providers error 
code
4d11c63 is described below

commit 4d11c63541261b8d42285c32f5bc00718d12f5ed
Author: liubao <bao....@huawei.com>
AuthorDate: Mon Jun 11 11:06:16 2018 +0800

    [SCB-656]edge service should return back the providers error code
---
 .../servicecomb/edge/core/AbstractEdgeDispatcher.java   | 14 +++++++++++---
 .../edge/core/TestAbstractEdgeDispatcher.java           | 17 +++++++++++++++++
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/AbstractEdgeDispatcher.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/AbstractEdgeDispatcher.java
index a1824fa..5c7ad05 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/AbstractEdgeDispatcher.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/AbstractEdgeDispatcher.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.edge.core;
 
 import javax.ws.rs.core.Response.Status;
 
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.apache.servicecomb.transport.rest.vertx.AbstractVertxHttpDispatcher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,8 +33,15 @@ public abstract class AbstractEdgeDispatcher extends 
AbstractVertxHttpDispatcher
   protected void onFailure(RoutingContext context) {
     LOGGER.error("edge server failed.", context.failure());
     HttpServerResponse response = context.response();
-    response.setStatusCode(Status.BAD_GATEWAY.getStatusCode());
-    response.setStatusMessage(Status.BAD_GATEWAY.getReasonPhrase());
-    response.end();
+    if (context.failure() instanceof InvocationException) {
+      InvocationException exception = (InvocationException) context.failure();
+      response.setStatusCode(exception.getStatusCode());
+      response.setStatusMessage(exception.getErrorData().toString());
+      response.end();
+    } else {
+      response.setStatusCode(Status.BAD_GATEWAY.getStatusCode());
+      response.setStatusMessage(Status.BAD_GATEWAY.getReasonPhrase());
+      response.end();
+    }
   }
 }
diff --git 
a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
 
b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
index cae30b3..b675045 100644
--- 
a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
+++ 
b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestAbstractEdgeDispatcher.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.edge.core;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -75,5 +76,21 @@ public class TestAbstractEdgeDispatcher {
 
     Assert.assertEquals(502, map.get("code"));
     Assert.assertEquals("Bad Gateway", map.get("msg"));
+
+    new Expectations() {
+      {
+        context.failure();
+        returns(new InvocationException(401, "unauthorized", "unauthorized"),
+            new InvocationException(401, "unauthorized", "unauthorized"));
+        context.response();
+        result = response;
+      }
+    };
+
+    dispatcher = new AbstractEdgeDispatcherForTest();
+    dispatcher.onFailure(context);
+
+    Assert.assertEquals(401, map.get("code"));
+    Assert.assertEquals("unauthorized", map.get("msg"));
   }
 }

-- 
To stop receiving notification emails like this one, please contact
liu...@apache.org.

Reply via email to