@Override public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException { ListenableFuture<ClientHttpResponse> future = execution.executeAsync(request, body); future.addCallback( resp -> { response = resp; this.latch.countDown(); }, ex -> { exception = ex; this.latch.countDown(); }); return future; } }
@Override public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException { Span span = handler.handleSend(injector, request.getHeaders(), request); try (Tracer.SpanInScope ws = tracer.withSpanInScope(span)) { ListenableFuture<ClientHttpResponse> result = execution.executeAsync(request, body); result.addCallback(new TraceListenableFutureCallback(span, handler)); return result; } catch (IOException | RuntimeException | Error e) { handler.handleReceive(null, e, span); throw e; } }
@Override public ListenableFuture<ClientHttpResponse> apply(final ServiceInstance instance) throws Exception { HttpRequest serviceRequest = new ServiceRequestWrapper(request, instance, loadBalancer); return execution.executeAsync(serviceRequest, body); }
@Override public ListenableFuture<ClientHttpResponse> apply(final ServiceInstance instance) throws Exception { HttpRequest serviceRequest = new ServiceRequestWrapper(request, instance, loadBalancer); return execution.executeAsync(serviceRequest, body); }
@Override public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException { String token = Base64Utils.encodeToString((this.username + ":" + this.password).getBytes(StandardCharsets.UTF_8)); request.getHeaders().add("Authorization", "Basic " + token); return execution.executeAsync(request, body); } }
@Override public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException { try { final HttpHeaders headers = request.getHeaders(); interceptInner(headers, request); return execution.executeAsync(request, body); } finally { registryName.remove(); } } }
private HttpRequest extractRequestFromExecution() { ArgumentCaptor<HttpRequest> requestCaptor = ArgumentCaptor.forClass(HttpRequest.class); try { verify(executionMock).executeAsync(requestCaptor.capture(), eq(body)); } catch (IOException e) { throw new RuntimeException(e); } return requestCaptor.getValue(); }
/** * Calls {@link WingtipsSpringUtil#propagateTracingHeaders(HttpMessage, Span)} to propagate the current span's * tracing state on the given request's headers, then returns * {@link AsyncClientHttpRequestExecution#executeAsync(HttpRequest, byte[])} to execute the request. * * @return The result of calling {@link AsyncClientHttpRequestExecution#executeAsync(HttpRequest, byte[])}. */ protected ListenableFuture<ClientHttpResponse> propagateTracingHeadersAndExecute( HttpRequestWrapperWithModifiableHeaders wrapperRequest, byte[] body, AsyncClientHttpRequestExecution execution ) throws IOException { propagateTracingHeaders(wrapperRequest, Tracer.getInstance().getCurrentSpan()); // Execute the request/interceptor chain. return execution.executeAsync(wrapperRequest, body); }
/** * Calls {@link WingtipsSpringUtil#propagateTracingHeaders(HttpMessage, Span)} to propagate the current span's * tracing state on the given request's headers, then returns * {@link AsyncClientHttpRequestExecution#executeAsync(HttpRequest, byte[])} to execute the request. * * @return The result of calling {@link AsyncClientHttpRequestExecution#executeAsync(HttpRequest, byte[])}. */ protected ListenableFuture<ClientHttpResponse> propagateTracingHeadersAndExecute( HttpRequestWrapperWithModifiableHeaders wrapperRequest, byte[] body, AsyncClientHttpRequestExecution execution ) throws IOException { propagateTracingHeaders(wrapperRequest, Tracer.getInstance().getCurrentSpan()); // Execute the request/interceptor chain. return execution.executeAsync(wrapperRequest, body); }
@Override public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException { SofaTracerSpan sofaTracerSpan = restTemplateTracer.clientSend(request.getMethod().name()); appendRestTemplateRequestSpanTags(request, sofaTracerSpan); try { ListenableFuture<ClientHttpResponse> result = execution.executeAsync(request, body); result.addCallback(new SofaTraceListenableFutureCallback(restTemplateTracer, sofaTracerSpan)); return result; } catch (IOException e) { restTemplateTracer.clientReceiveTagFinish(sofaTracerSpan, String.valueOf(500)); throw e; } }
@Override public ListenableFuture<ClientHttpResponse> intercept(final HttpRequest request, final byte[] body, final AsyncClientHttpRequestExecution execution) throws IOException { final RequestArguments arguments = toArguments(request, body); final RequestExecution requestExecution = () -> { try { final ListenableFuture<ClientHttpResponse> original = execution.executeAsync(request, body); final CompletableFuture<ClientHttpResponse> future = preserveCancelability(original); original.addCallback(future::complete, future::completeExceptionally); return future; } catch (final Exception e) { // this branch is just for issues inside of executeAsync, not during the actual execution final CompletableFuture<ClientHttpResponse> future = new CompletableFuture<>(); future.completeExceptionally(e); return future; } }; // since there is no routing to be done, we just call the plugin twice in succession final RequestExecution before = plugin.interceptBeforeRouting(arguments, requestExecution); final RequestExecution after = plugin.interceptAfterRouting(arguments, before); return new CompletableToListenableFutureAdapter<>(after.execute()); }
@Override public ListenableFuture<ClientHttpResponse> intercept(final HttpRequest request, final byte[] body, final AsyncClientHttpRequestExecution execution) throws IOException { final RequestArguments arguments = toArguments(request, body); final RequestExecution requestExecution = () -> { try { final ListenableFuture<ClientHttpResponse> original = execution.executeAsync(request, body); final CompletableFuture<ClientHttpResponse> future = preserveCancelability(original); original.addCallback(future::complete, future::completeExceptionally); return future; } catch (final Exception e) { // this branch is just for issues inside of executeAsync, not during the actual execution final CompletableFuture<ClientHttpResponse> future = new CompletableFuture<>(); future.completeExceptionally(e); return future; } }; // since there is no routing to be done, we just call the plugin twice in succession final RequestExecution before = plugin.interceptBeforeRouting(arguments, requestExecution); final RequestExecution after = plugin.interceptAfterRouting(arguments, before); return new CompletableToListenableFutureAdapter<>(after.execute()); }
@Override public ListenableFuture<ClientHttpResponse> intercept(HttpRequest request, byte[] body, AsyncClientHttpRequestExecution execution) throws IOException { final String urlTemplate = urlTemplateHolder.get(); urlTemplateHolder.remove(); final Clock clock = meterRegistry.config().clock(); final long startTime = clock.monotonicTime(); ListenableFuture<ClientHttpResponse> future; try { future = execution.executeAsync(request, body); } catch (IOException e) { getTimeBuilder(urlTemplate, request, null).register(meterRegistry) .record(clock.monotonicTime() - startTime, TimeUnit.NANOSECONDS); throw e; } future.addCallback(new ListenableFutureCallback<ClientHttpResponse>() { @Override public void onSuccess(final ClientHttpResponse response) { getTimeBuilder(urlTemplate, request, response).register(meterRegistry) .record(clock.monotonicTime() - startTime, TimeUnit.NANOSECONDS); } @Override public void onFailure(final Throwable ex) { getTimeBuilder(urlTemplate, request, null).register(meterRegistry) .record(clock.monotonicTime() - startTime, TimeUnit.NANOSECONDS); } }); return future; }
executionResponseFuture = new SettableListenableFuture<>(); return executionResponseFuture; }).when(executionMock).executeAsync(any(HttpRequest.class), any(byte[].class));
tracingStateAtTimeOfExecution = TracingState.getCurrentThreadTracingState(); throw executionExplosion; }).when(executionMock).executeAsync(any(HttpRequest.class), any(byte[].class));
tracingStateAtTimeOfExecution = TracingState.getCurrentThreadTracingState(); throw executeAsyncException; }).when(executionMock).executeAsync(any(HttpRequest.class), any(byte[].class));
ListenableFuture<ClientHttpResponse> future = execution.executeAsync(httpRequest, body);