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:
[email protected]
With regards,
Apache Git Services