use of org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx in project incubator-servicecomb-java-chassis by apache.
the class VertxHttpMethod method doMethod.
public void doMethod(HttpClientWithContext httpClientWithContext, Invocation invocation, AsyncResponse asyncResp) throws Exception {
OperationMeta operationMeta = invocation.getOperationMeta();
RestOperationMeta swaggerRestOperation = operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
String path = this.createRequestPath(invocation, swaggerRestOperation);
IpPort ipPort = (IpPort) invocation.getEndpoint().getAddress();
HttpClientRequest clientRequest = this.createRequest(httpClientWithContext.getHttpClient(), invocation, ipPort, path, asyncResp);
clientRequest.putHeader(org.apache.servicecomb.core.Const.TARGET_MICROSERVICE, invocation.getMicroserviceName());
RestClientRequestImpl restClientRequest = new RestClientRequestImpl(clientRequest, httpClientWithContext.context().owner(), asyncResp);
invocation.getHandlerContext().put(RestConst.INVOCATION_HANDLER_REQUESTCLIENT, restClientRequest);
Buffer requestBodyBuffer = restClientRequest.getBodyBuffer();
HttpServletRequestEx requestEx = new VertxClientRequestToHttpServletRequest(clientRequest, requestBodyBuffer);
for (HttpClientFilter filter : httpClientFilters) {
filter.beforeSendRequest(invocation, requestEx);
}
clientRequest.exceptionHandler(e -> {
LOGGER.error(e.toString());
asyncResp.fail(invocation.getInvocationType(), e);
});
// 从业务线程转移到网络线程中去发送
httpClientWithContext.runOnContext(httpClient -> {
this.setCseContext(invocation, clientRequest);
clientRequest.setTimeout(AbstractTransport.getRequestTimeoutProperty().get());
try {
restClientRequest.end();
} catch (Throwable e) {
LOGGER.error("send http request failed,", e);
asyncResp.fail(invocation.getInvocationType(), e);
}
});
}
use of org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx in project incubator-servicecomb-java-chassis by apache.
the class TracingFilterTest method testAfterReceiveRequestOnInvocationContainsTraceId.
@Test
public void testAfterReceiveRequestOnInvocationContainsTraceId() {
Invocation invocation = Mockito.mock(Invocation.class);
String traceId = "traceIdTest";
HttpServletRequestEx requestEx = Mockito.mock(HttpServletRequestEx.class);
Mockito.when(invocation.getContext(Const.TRACE_ID_NAME)).thenReturn(traceId);
FILTER.afterReceiveRequest(invocation, requestEx);
Mockito.verify(requestEx, Mockito.times(0)).getHeader(Const.TRACE_ID_NAME);
}
use of org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx in project incubator-servicecomb-java-chassis by apache.
the class TracingFilterTest method testAfterReceiveRequestOnGenerateTraceId.
@Test
public void testAfterReceiveRequestOnGenerateTraceId() {
Invocation invocation = Mockito.mock(Invocation.class);
HttpServletRequestEx requestEx = Mockito.mock(HttpServletRequestEx.class);
Mockito.when(invocation.getContext(Const.TRACE_ID_NAME)).thenReturn(null);
Mockito.when(requestEx.getHeader(Const.TRACE_ID_NAME)).thenReturn(null);
FILTER.afterReceiveRequest(invocation, requestEx);
Mockito.verify(invocation).addContext(Const.TRACE_ID_NAME, TestTracingFilter.TRACE_ID);
}
Aggregations