assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement());
@Test public void testResponseEndHandlers2() { waitFor(2); AtomicInteger cnt = new AtomicInteger(); String content = "blah"; server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().end(content); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", onSuccess(res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); res.bodyHandler(buff -> { assertEquals(Buffer.buffer(content), buff); complete(); }); })).end(); })); await(); }
@Test public void testResponseEndHandlersSendFile() throws Exception { waitFor(2); AtomicInteger cnt = new AtomicInteger(); String content = "iqdioqwdqwiojqwijdwqd"; File toSend = setupFile("somefile.txt", content); server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().sendFile(toSend.getAbsolutePath()); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", onSuccess(res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); res.bodyHandler(buff -> { assertEquals(Buffer.buffer(content), buff); complete(); }); })).end(); })); await(); }
@Test public void testResponseEndHandlers1() { waitFor(2); AtomicInteger cnt = new AtomicInteger(); server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(0, req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().end(); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", onSuccess(res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); complete(); })).end(); })); await(); }
private Map<Integer, Handler<Void>> getBodyEndHandlers() { if (bodyEndHandlers == null) { // order is important we we should traverse backwards bodyEndHandlers = new TreeMap<>(Collections.reverseOrder()); response().bodyEndHandler(v -> bodyEndHandlers.values().forEach(handler -> handler.handle(null))); } return bodyEndHandlers; }
@Override public HttpServerResponse bodyEndHandler(Handler<Void> handler) { wrapped.bodyEndHandler(handler); return this; }
/** * Provides a handler that will be called after the last part of the body is written to the wire. * The handler is called asynchronously of when the response has been received by the client. * This provides a hook allowing you to do more operations once the request has been sent over the wire * such as resource cleanup. * @param handler the handler * @return a reference to this, so the API can be used fluently */ public io.vertx.rxjava.core.http.HttpServerResponse bodyEndHandler(Handler<Void> handler) { delegate.bodyEndHandler(handler); return this; }
/** * Provides a handler that will be called after the last part of the body is written to the wire. * The handler is called asynchronously of when the response has been received by the client. * This provides a hook allowing you to do more operations once the request has been sent over the wire * such as resource cleanup. * @param handler the handler * @return a reference to this, so the API can be used fluently */ public io.vertx.rxjava.core.http.HttpServerResponse bodyEndHandler(Handler<Void> handler) { delegate.bodyEndHandler(handler); return this; }
@Override public HttpServerResponse bodyEndHandler(Handler<Void> handler) { return response.bodyEndHandler(handler); }
assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement());
@Test public void testResponseEndHandlers2() { waitFor(2); AtomicInteger cnt = new AtomicInteger(); String content = "blah"; server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().end(content); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); res.bodyHandler(buff -> { assertEquals(Buffer.buffer(content), buff); complete(); }); }).end(); })); await(); }
private Map<Integer, Handler<Void>> getBodyEndHandlers() { if (bodyEndHandlers == null) { // order is important we we should traverse backwards bodyEndHandlers = new TreeMap<>(Collections.reverseOrder()); response().bodyEndHandler(v -> bodyEndHandlers.values().forEach(handler -> handler.handle(null))); } return bodyEndHandlers; }
@Test public void testResponseEndHandlers1() { waitFor(2); AtomicInteger cnt = new AtomicInteger(); server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(0, req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().end(); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); complete(); }).end(); })); await(); }
@Test public void testResponseEndHandlersSendFile() throws Exception { waitFor(2); AtomicInteger cnt = new AtomicInteger(); String content = "iqdioqwdqwiojqwijdwqd"; File toSend = setupFile("somefile.txt", content); server.requestHandler(req -> { req.response().headersEndHandler(v -> { // Insert another header req.response().putHeader("extraheader", "wibble"); assertEquals(0, cnt.getAndIncrement()); }); req.response().bodyEndHandler(v -> { assertEquals(content.length(), req.response().bytesWritten()); assertEquals(1, cnt.getAndIncrement()); complete(); }); req.response().sendFile(toSend.getAbsolutePath()); }).listen(onSuccess(server -> { client.request(HttpMethod.GET, DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/", res -> { assertEquals(200, res.statusCode()); assertEquals("wibble", res.headers().get("extraheader")); res.bodyHandler(buff -> { assertEquals(Buffer.buffer(content), buff); complete(); }); }).end(); })); await(); }
resp.exceptionHandler(null); resp.drainHandler(null); resp.bodyEndHandler(null); resp.closeHandler(null); resp.headersEndHandler(null);
@Override @Suspendable public void handle(RoutingContext routingContext) { try { FilterContext filterContext = buildFilterContext(routingContext); targetFilter.beforeHandleEndpoint(filterContext); routingContext.data().putAll(filterContext.getFilterVariables()); copyMultiMap(filterContext.getRequest().getHeaders(), routingContext.request().headers()); copyMultiMap(filterContext.getRequest().getParams(), routingContext.request().params()); // Ensure beforeSendHeaders and afterResponseSent are called insertIntoFilterChain(routingContext); routingContext.response().headersEndHandler(event -> dispatchToFilterChain(routingContext, Filter::afterHandleEndpoint)); routingContext.response().bodyEndHandler(event -> dispatchToFilterChain(routingContext, Filter::afterResponseSent)); if (filterContext.isSendResponseFromFilter()) { // Filter decided to send its own response endWithResponse(routingContext, filterContext); } else { routingContext.next(); } } catch (Throwable t) { LOG.error("Error occurred in handleBefore() on filterClassName=" + targetFilter.getClass().getName(), t); routingContext.next(); } }