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

commit fa9ff764c73459a218ede84880dc4a4907cc5a42
Author: liubao <[email protected]>
AuthorDate: Thu Aug 16 10:21:52 2018 +0800

    [SCB-847]fix container error code handling logic
---
 .../rest/client/http/DefaultHttpClientFilter.java  |  8 ++++---
 .../client/http/TestDefaultHttpClientFilter.java   | 25 ++++++++++++++++------
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/DefaultHttpClientFilter.java
 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/DefaultHttpClientFilter.java
index 7d54078..60921c5 100644
--- 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/DefaultHttpClientFilter.java
+++ 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/DefaultHttpClientFilter.java
@@ -23,13 +23,13 @@ import javax.ws.rs.core.HttpHeaders;
 
 import org.apache.servicecomb.common.rest.RestConst;
 import org.apache.servicecomb.common.rest.codec.produce.ProduceProcessor;
+import 
org.apache.servicecomb.common.rest.codec.produce.ProduceProcessorManager;
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.common.rest.filter.HttpClientFilter;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.definition.OperationMeta;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
-import org.apache.servicecomb.swagger.invocation.InvocationType;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.apache.servicecomb.swagger.invocation.response.ResponseMeta;
 import org.slf4j.Logger;
@@ -74,6 +74,8 @@ public class DefaultHttpClientFilter implements 
HttpClientFilter {
     RestOperationMeta swaggerRestOperation = 
operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
     ProduceProcessor produceProcessor = 
findProduceProcessor(swaggerRestOperation, responseEx);
     if (produceProcessor == null) {
+      // This happens outside the runtime such as Servlet filter response. 
Here we give a default json parser to it
+      // and keep user data not get lose.
       String msg =
           String.format("method %s, path %s, statusCode %d, reasonPhrase %s, 
response content-type %s is not supported",
               swaggerRestOperation.getHttpMethod(),
@@ -81,8 +83,8 @@ public class DefaultHttpClientFilter implements 
HttpClientFilter {
               responseEx.getStatus(),
               responseEx.getStatusType().getReasonPhrase(),
               responseEx.getHeader(HttpHeaders.CONTENT_TYPE));
-      LOGGER.error(msg);
-      return Response.createFail(InvocationType.CONSUMER, msg);
+      LOGGER.warn(msg);
+      produceProcessor = ProduceProcessorManager.DEFAULT_PROCESSOR;
     }
 
     try {
diff --git 
a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestDefaultHttpClientFilter.java
 
b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestDefaultHttpClientFilter.java
index 3279ab3..d14bc1d 100644
--- 
a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestDefaultHttpClientFilter.java
+++ 
b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestDefaultHttpClientFilter.java
@@ -31,6 +31,7 @@ import 
org.apache.servicecomb.common.rest.codec.produce.ProduceProcessor;
 import org.apache.servicecomb.common.rest.definition.RestOperationMeta;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.definition.OperationMeta;
+import org.apache.servicecomb.foundation.common.utils.JsonUtils;
 import org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.foundation.vertx.http.ReadStreamPart;
 import org.apache.servicecomb.swagger.invocation.Response;
@@ -48,6 +49,7 @@ import io.vertx.core.buffer.Buffer;
 import io.vertx.core.buffer.impl.BufferImpl;
 import io.vertx.core.http.CaseInsensitiveHeaders;
 import mockit.Expectations;
+import mockit.Injectable;
 import mockit.Mock;
 import mockit.MockUp;
 import mockit.Mocked;
@@ -172,29 +174,38 @@ public class TestDefaultHttpClientFilter {
   public void testAfterReceiveResponseNullProduceProcessor(@Mocked Invocation 
invocation,
       @Mocked HttpServletResponseEx responseEx,
       @Mocked OperationMeta operationMeta,
-      @Mocked RestOperationMeta swaggerRestOperation) {
+      @Mocked RestOperationMeta swaggerRestOperation,
+      @Injectable ResponseMeta responseMeta) throws Exception {
+    CommonExceptionData data = new CommonExceptionData("abcd");
     new Expectations() {
       {
         invocation.getOperationMeta();
         result = operationMeta;
         operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
         result = swaggerRestOperation;
+        operationMeta.findResponseMeta(403);
+        result = responseMeta;
+        responseMeta.getJavaType();
+        result = SimpleType.constructUnsafe(CommonExceptionData.class);
         responseEx.getStatus();
-        result = 200;
+        result = 403;
+        responseEx.getStatusType();
+        result = Status.FORBIDDEN;
+        responseEx.getBodyBuffer();
+        result = Buffer.buffer(JsonUtils.writeValueAsString(data).getBytes());
       }
     };
 
     Response response = filter.afterReceiveResponse(invocation, responseEx);
-    Assert.assertEquals(490, response.getStatusCode());
-    Assert.assertEquals(ExceptionFactory.CONSUMER_INNER_REASON_PHRASE, 
response.getReasonPhrase());
+    Assert.assertEquals(403, response.getStatusCode());
+    Assert.assertEquals("Forbidden", response.getReasonPhrase());
     Assert.assertEquals(InvocationException.class, 
response.<InvocationException>getResult().getClass());
     InvocationException invocationException = response.getResult();
     Assert.assertEquals(
-        490,
+        403,
         invocationException.getStatusCode());
     Assert.assertEquals(
-        "CommonExceptionData [message=method null, path null, statusCode 200, 
reasonPhrase null, "
-            + "response content-type null is not supported]",
+        "CommonExceptionData [message=abcd]",
         invocationException.getErrorData().toString());
   }
 

Reply via email to