[ 
https://issues.apache.org/jira/browse/SCB-943?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16631456#comment-16631456
 ] 

ASF GitHub Bot commented on SCB-943:
------------------------------------

liubao68 closed pull request #929: [SCB-943]make 
ProduceJsonProcessor,DefaultHttpClientFilter,ServerRestArgsFilter changable
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/929
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
index 09b7fc72c..6d9582034 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/AbstractRestInvocation.java
@@ -189,9 +189,11 @@ protected Response prepareInvoke() throws Throwable {
 
     invocation.getInvocationStageTrace().startServerFiltersRequest();
     for (HttpServerFilter filter : httpServerFilters) {
-      Response response = filter.afterReceiveRequest(invocation, requestEx);
-      if (response != null) {
-        return response;
+      if (filter.enabled()) {
+        Response response = filter.afterReceiveRequest(invocation, requestEx);
+        if (response != null) {
+          return response;
+        }
       }
     }
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpClientFilter.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpClientFilter.java
index 22c8e2bb6..a139712c1 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpClientFilter.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpClientFilter.java
@@ -23,6 +23,10 @@
 import org.apache.servicecomb.swagger.invocation.Response;
 
 public interface HttpClientFilter {
+  default boolean enabled() {
+    return true;
+  }
+
   int getOrder();
 
   void beforeSendRequest(Invocation invocation, HttpServletRequestEx 
requestEx);
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilter.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilter.java
index 8e56e9956..b809660a4 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilter.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilter.java
@@ -28,6 +28,10 @@
 public interface HttpServerFilter {
   int getOrder();
 
+  default boolean enabled() {
+    return true;
+  }
+
   default boolean needCacheRequest(OperationMeta operationMeta) {
     return false;
   }
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
index b07485a0f..2c6e1f431 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/HttpServerFilterBeforeSendResponseExecutor.java
@@ -48,7 +48,13 @@ public 
HttpServerFilterBeforeSendResponseExecutor(List<HttpServerFilter> httpSer
 
   protected CompletableFuture<Void> safeInvoke(HttpServerFilter 
httpServerFilter) {
     try {
-      return httpServerFilter.beforeSendResponseAsync(invocation, responseEx);
+      if (httpServerFilter.enabled()) {
+        return httpServerFilter.beforeSendResponseAsync(invocation, 
responseEx);
+      } else {
+        CompletableFuture<Void> eFuture = new CompletableFuture<Void>();
+        eFuture.complete(null);
+        return eFuture;
+      }
     } catch (Throwable e) {
       CompletableFuture<Void> eFuture = new CompletableFuture<Void>();
       eFuture.completeExceptionally(e);
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
index 1f656effe..6416d7afc 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
@@ -35,15 +35,24 @@
 import org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory;
 import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
 
+import com.netflix.config.DynamicPropertyFactory;
+
 import io.netty.buffer.Unpooled;
 
 public class ServerRestArgsFilter implements HttpServerFilter {
+  private static final boolean enabled = 
DynamicPropertyFactory.getInstance().getBooleanProperty
+      ("servicecomb.http.filter.server.serverRestArgs.enabled", true).get();
 
   @Override
   public int getOrder() {
     return -100;
   }
 
+  @Override
+  public boolean enabled() {
+    return enabled;
+  }
+
   @Override
   public Response afterReceiveRequest(Invocation invocation, 
HttpServletRequestEx requestEx) {
     OperationMeta operationMeta = invocation.getOperationMeta();
diff --git 
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
 
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
index f0b2513c9..faf37a539 100644
--- 
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
+++ 
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestAbstractRestInvocation.java
@@ -266,6 +266,8 @@ public void invokeFilterHaveResponse(@Mocked 
HttpServerFilter filter) {
     Response response = Response.ok("");
     new Expectations() {
       {
+        filter.enabled();
+        result = true;
         filter.afterReceiveRequest(invocation, requestEx);
         result = response;
       }
@@ -295,6 +297,8 @@ protected void sendResponseQuietly(Response response) {
   public void invokeFilterNoResponse(@Mocked HttpServerFilter filter) {
     new Expectations() {
       {
+        filter.enabled();
+        result = true;
         filter.afterReceiveRequest(invocation, requestEx);
         result = null;
       }
@@ -315,11 +319,37 @@ protected void doInvoke() {
     Assert.assertTrue(result.value);
   }
 
+  @Test
+  public void invokeFilterNoResponseDisableFilter(@Mocked HttpServerFilter 
filter) {
+    new Expectations() {
+      {
+        filter.enabled();
+        result = false;
+      }
+    };
+
+    Holder<Boolean> result = new Holder<>();
+    restInvocation = new AbstractRestInvocationForTest() {
+      @Override
+      protected void doInvoke() {
+        result.value = true;
+      }
+    };
+    initRestInvocation();
+    restInvocation.httpServerFilters = Arrays.asList(filter);
+
+    restInvocation.invoke();
+
+    Assert.assertTrue(result.value);
+  }
+
   @Test
   public void invokeFilterException(@Mocked HttpServerFilter filter) {
     Error error = new Error();
     new Expectations() {
       {
+        filter.enabled();
+        result = true;
         filter.afterReceiveRequest(invocation, requestEx);
         result = error;
       }
@@ -349,6 +379,8 @@ protected void doInvoke() {
   public void invokeNormal(@Mocked HttpServerFilter filter) {
     new Expectations() {
       {
+        filter.enabled();
+        result = true;
         filter.afterReceiveRequest(invocation, requestEx);
         result = null;
       }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/thirdparty/Test3rdPartyInvocation.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/thirdparty/Test3rdPartyInvocation.java
index 370910621..fec1f81c1 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/thirdparty/Test3rdPartyInvocation.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/thirdparty/Test3rdPartyInvocation.java
@@ -94,7 +94,7 @@ public void testSyncInvoke_RPC() {
     Assert.assertEquals(4, dataTypeJaxrsSchema.intCookie(4));
     Assert.assertEquals(5, dataTypeJaxrsSchema.intForm(5));
     Assert.assertEquals(6, dataTypeJaxrsSchema.intBody(6));
-    Assert.assertEquals(7, dataTypeJaxrsSchema.add(3, 4));
+    Assert.assertEquals(7, dataTypeJaxrsSchema.intAdd(3, 4));
     Assert.assertEquals("abc", dataTypeJaxrsSchema.stringPath("abc"));
     Assert.assertEquals("def", dataTypeJaxrsSchema.stringQuery("def"));
     Assert.assertEquals("ghi", dataTypeJaxrsSchema.stringHeader("ghi"));
@@ -107,7 +107,7 @@ public void testSyncInvoke_RPC() {
   @Test
   public void testAsyncInvoke_RPC() throws ExecutionException, 
InterruptedException {
     Holder<Boolean> addChecked = new Holder<>(false);
-    dataTypeJaxrsSchemaAsync.add(5, 6).whenComplete((result, t) -> {
+    dataTypeJaxrsSchemaAsync.intAdd(5, 6).whenComplete((result, t) -> {
       Assert.assertEquals(11, result.intValue());
       Assert.assertNull(t);
       addChecked.value = true;
@@ -136,7 +136,7 @@ public void testSyncInvoke_RestTemplate() {
     RestTemplate restTemplate = RestTemplateBuilder.create();
     ResponseEntity<Integer> responseEntity = restTemplate
         .getForEntity(
-            "cse://" + THIRD_PARTY_MICROSERVICE_NAME + 
"/rest/it-producer/v1/dataTypeJaxrs/add?num1=11&num2=22",
+            "cse://" + THIRD_PARTY_MICROSERVICE_NAME + 
"/rest/it-producer/v1/dataTypeJaxrs/intAdd?num1=11&num2=22",
             int.class);
     Assert.assertEquals(200, responseEntity.getStatusCodeValue());
     Assert.assertEquals(33, responseEntity.getBody().intValue());
@@ -154,7 +154,8 @@ public void testAsyncInvoke_RestTemplate() throws 
ExecutionException, Interrupte
     CseAsyncRestTemplate cseAsyncRestTemplate = new CseAsyncRestTemplate();
     ListenableFuture<ResponseEntity<Integer>> responseFuture = 
cseAsyncRestTemplate
         .getForEntity(
-            "cse://" + ASYNC_THIRD_PARTY_MICROSERVICE_NAME + 
"/rest/it-producer/v1/dataTypeJaxrs/add?num1=11&num2=22",
+            "cse://" + ASYNC_THIRD_PARTY_MICROSERVICE_NAME
+                + "/rest/it-producer/v1/dataTypeJaxrs/intAdd?num1=11&num2=22",
             Integer.class);
     ResponseEntity<Integer> responseEntity = responseFuture.get();
     Assert.assertEquals(200, responseEntity.getStatusCodeValue());
@@ -195,9 +196,9 @@ public void testAsyncInvoke_RestTemplate() throws 
ExecutionException, Interrupte
     @POST
     int intBody(int input);
 
-    @Path("add")
+    @Path("intAdd")
     @GET
-    int add(@QueryParam("num1") int num1, @QueryParam("num2") int num2);
+    int intAdd(@QueryParam("num1") int num1, @QueryParam("num2") int num2);
 
     //strinnum1
     @Path("stringPath/{input}")
@@ -231,9 +232,9 @@ public void testAsyncInvoke_RestTemplate() throws 
ExecutionException, Interrupte
 
   @Path("/rest/it-producer/v1/dataTypeJaxrs")
   interface DataTypeJaxrsSchemaAsyncIntf {
-    @Path("add")
+    @Path("intAdd")
     @GET
-    CompletableFuture<Integer> add(@QueryParam("num1") int num1, 
@QueryParam("num2") int num2);
+    CompletableFuture<Integer> intAdd(@QueryParam("num1") int num1, 
@QueryParam("num2") int num2);
 
     @Path("stringBody")
     @POST
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 806a9c916..13f91ab51 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
@@ -38,14 +38,24 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.netflix.config.DynamicPropertyFactory;
+
 public class DefaultHttpClientFilter implements HttpClientFilter {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(DefaultHttpClientFilter.class);
 
+  private static final boolean enabled = 
DynamicPropertyFactory.getInstance().getBooleanProperty
+      ("servicecomb.http.filter.client.default.enabled", true).get();
+
   @Override
   public int getOrder() {
     return Integer.MAX_VALUE;
   }
 
+  @Override
+  public boolean enabled() {
+    return enabled;
+  }
+
   @Override
   public void beforeSendRequest(Invocation invocation, HttpServletRequestEx 
requestEx) {
 
diff --git 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
index dc0f86b75..7ebc70538 100644
--- 
a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
+++ 
b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
@@ -94,7 +94,9 @@ public void invoke(Invocation invocation, AsyncResponse 
asyncResp) throws Except
     HttpServletRequestEx requestEx = new 
VertxClientRequestToHttpServletRequest(clientRequest, requestBodyBuffer);
     invocation.getInvocationStageTrace().startClientFiltersRequest();
     for (HttpClientFilter filter : httpClientFilters) {
-      filter.beforeSendRequest(invocation, requestEx);
+      if (filter.enabled()) {
+        filter.beforeSendRequest(invocation, requestEx);
+      }
     }
 
     clientRequest.exceptionHandler(e -> {
@@ -193,10 +195,12 @@ protected void processResponseBody(Buffer responseBuf) {
         HttpServletResponseEx responseEx =
             new VertxClientResponseToHttpServletResponse(clientResponse, 
responseBuf);
         for (HttpClientFilter filter : httpClientFilters) {
-          Response response = filter.afterReceiveResponse(invocation, 
responseEx);
-          if (response != null) {
-            complete(response);
-            return;
+          if (filter.enabled()) {
+            Response response = filter.afterReceiveResponse(invocation, 
responseEx);
+            if (response != null) {
+              complete(response);
+              return;
+            }
           }
         }
       } catch (Throwable e) {
diff --git 
a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestRestClientInvocation.java
 
b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestRestClientInvocation.java
index e1f115372..57a590c42 100644
--- 
a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestRestClientInvocation.java
+++ 
b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/http/TestRestClientInvocation.java
@@ -306,11 +306,13 @@ public void processResponseBody() {
     {
       HttpClientFilter filter = mock(HttpClientFilter.class);
       when(filter.afterReceiveResponse(any(), any())).thenReturn(null);
+      when(filter.enabled()).thenReturn(true);
       httpClientFilters.add(filter);
     }
     {
       HttpClientFilter filter = mock(HttpClientFilter.class);
       when(filter.afterReceiveResponse(any(), any())).thenReturn(resp);
+      when(filter.enabled()).thenReturn(true);
       httpClientFilters.add(filter);
     }
 
@@ -335,6 +337,7 @@ public void processResponseBody_throw() {
     {
       HttpClientFilter filter = mock(HttpClientFilter.class);
       when(filter.afterReceiveResponse(any(), any())).thenThrow(Error.class);
+      when(filter.enabled()).thenReturn(true);
       httpClientFilters.add(filter);
     }
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> make ProduceJsonProcessor,DefaultHttpClientFilter,ServerRestArgsFilter 
> changable
> --------------------------------------------------------------------------------
>
>                 Key: SCB-943
>                 URL: https://issues.apache.org/jira/browse/SCB-943
>             Project: Apache ServiceComb
>          Issue Type: Improvement
>          Components: Java-Chassis
>            Reporter: liubao
>            Assignee: liubao
>            Priority: Major
>
> In user customized scenario, they want to change the default behavior of 
> ProduceJsonProcessor,DefaultHttpClientFilter,ServerRestArgsFilter



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to