@Override public void beforeCommit(Supplier<? extends Mono<Void>> action) { getDelegate().beforeCommit(action); }
@Override public void beforeCommit(Supplier<? extends Mono<Void>> action) { getDelegate().beforeCommit(action); }
private void endTimerRespectingCommit(ServerWebExchange exchange, Sample sample) { ServerHttpResponse response = exchange.getResponse(); if (response.isCommitted()) { endTimerInner(exchange, sample); } else { response.beforeCommit(() -> { endTimerInner(exchange, sample); return Mono.empty(); }); } }
@Override public Mono<WebSession> getSession(ServerWebExchange exchange) { return Mono.defer(() -> retrieveSession(exchange) .switchIfEmpty(this.sessionStore.createWebSession()) .doOnNext(session -> exchange.getResponse().beforeCommit(() -> save(exchange, session)))); }
@Test // SPR-17144 public void notFoundWithCommitAction() { AtomicBoolean commitInvoked = new AtomicBoolean(false); ServerHttpRequest request = MockServerHttpRequest.get("/unknown/path").build(); ServerHttpResponse response = new MockServerHttpResponse(); response.beforeCommit(() -> { commitInvoked.set(true); return Mono.empty(); }); Map<String, HttpHandler> map = new HashMap<>(); TestHttpHandler handler = new TestHttpHandler(); map.put("/path", handler); new ContextPathCompositeHandler(map).handle(request, response).block(Duration.ofSeconds(5)); assertNotInvoked(handler); assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); assertTrue(commitInvoked.get()); }
@Override public Mono<WebSession> getSession(ServerWebExchange exchange) { return Mono.defer(() -> retrieveSession(exchange) .switchIfEmpty(this.sessionStore.createWebSession()) .doOnNext(session -> exchange.getResponse().beforeCommit(() -> save(exchange, session)))); }
private Publisher<Void> filter(ServerWebExchange exchange, Mono<Void> call) { long start = System.nanoTime(); ServerHttpResponse response = exchange.getResponse(); return call.doOnSuccess((done) -> success(exchange, start)).doOnError((cause) -> { if (response.isCommitted()) { error(exchange, start, cause); } else { response.beforeCommit(() -> { error(exchange, start, cause); return Mono.empty(); }); } }); }
@Override public void beforeCommit(Supplier<? extends Mono<Void>> action) { getDelegate().beforeCommit(action); }
@Override public void beforeCommit(Supplier<? extends Mono<Void>> action) { getDelegate().beforeCommit(action); }
@Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { exchange.getResponse().beforeCommit(() -> writer.writeHttpHeaders(exchange)); return chain.filter(exchange); }
@Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { exchange.getResponse().beforeCommit(() -> writer.writeHttpHeaders(exchange)); return chain.filter(exchange); }
@Override public Mono<WebSession> getSession(ServerWebExchange exchange) { return Mono.defer(() -> retrieveSession(exchange) .switchIfEmpty(this.sessionStore.createWebSession()) .doOnNext(session -> exchange.getResponse().beforeCommit(() -> save(exchange, session)))); }
@Override public Mono<WebSession> getSession(ServerWebExchange exchange) { return Mono.defer(() -> retrieveSession(exchange) .switchIfEmpty(this.sessionStore.createWebSession()) .doOnNext(session -> exchange.getResponse().beforeCommit(() -> save(exchange, session)))); }