[ 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)