@Override public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) { AtomicReference<WiretapClientHttpRequest> requestRef = new AtomicReference<>(); return this.delegate .connect(method, uri, request -> { WiretapClientHttpRequest wrapped = new WiretapClientHttpRequest(request); requestRef.set(wrapped); return requestCallback.apply(wrapped); }) .map(response -> { WiretapClientHttpRequest wrappedRequest = requestRef.get(); String header = WebTestClient.WEBTESTCLIENT_REQUEST_ID; String requestId = wrappedRequest.getHeaders().getFirst(header); Assert.state(requestId != null, () -> "No \"" + header + "\" header"); WiretapClientHttpResponse wrappedResponse = new WiretapClientHttpResponse(response); this.exchanges.put(requestId, new Info(wrappedRequest, wrappedResponse)); return wrappedResponse; }); }
@Override public Mono<ClientResponse> exchange(ClientRequest clientRequest) { Assert.notNull(clientRequest, "ClientRequest must not be null"); HttpMethod httpMethod = clientRequest.method(); URI url = clientRequest.url(); String logPrefix = clientRequest.logPrefix(); return this.connector .connect(httpMethod, url, httpRequest -> clientRequest.writeTo(httpRequest, this.strategies)) .doOnRequest(n -> logRequest(clientRequest)) .doOnCancel(() -> logger.debug(logPrefix + "Cancel signal (to close connection)")) .map(httpResponse -> { logResponse(httpResponse, logPrefix); return new DefaultClientResponse(httpResponse, this.strategies, logPrefix); }); }
@Override public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) { AtomicReference<WiretapClientHttpRequest> requestRef = new AtomicReference<>(); return this.delegate .connect(method, uri, request -> { WiretapClientHttpRequest wrapped = new WiretapClientHttpRequest(request); requestRef.set(wrapped); return requestCallback.apply(wrapped); }) .map(response -> { WiretapClientHttpRequest wrappedRequest = requestRef.get(); String header = WebTestClient.WEBTESTCLIENT_REQUEST_ID; String requestId = wrappedRequest.getHeaders().getFirst(header); Assert.state(requestId != null, () -> "No \"" + header + "\" header"); WiretapClientHttpResponse wrappedResponse = new WiretapClientHttpResponse(response); this.exchanges.put(requestId, new Info(wrappedRequest, wrappedResponse)); return wrappedResponse; }); }
@Override public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) { AtomicReference<WiretapClientHttpRequest> requestRef = new AtomicReference<>(); return this.delegate .connect(method, uri, request -> { WiretapClientHttpRequest wrapped = new WiretapClientHttpRequest(request); requestRef.set(wrapped); return requestCallback.apply(wrapped); }) .map(response -> { WiretapClientHttpRequest wrappedRequest = requestRef.get(); String header = WebTestClient.WEBTESTCLIENT_REQUEST_ID; String requestId = wrappedRequest.getHeaders().getFirst(header); Assert.state(requestId != null, () -> "No \"" + header + "\" header"); WiretapClientHttpResponse wrappedResponse = new WiretapClientHttpResponse(response); this.exchanges.put(requestId, new Info(wrappedRequest, wrappedResponse)); return wrappedResponse; }); }
private Mono<ClientResponse> exchangeInternal(ClientRequest<?> request) { return this.clientHttpConnector .connect(request.method(), request.url(), clientHttpRequest -> request .writeTo(clientHttpRequest, this.strategies)) .log("org.springframework.web.client.reactive", Level.FINE) .map(clientHttpResponse -> new DefaultClientResponse(clientHttpResponse, this.strategies)); }