List of usage examples for io.vertx.core.http HttpServerRequest endHandler
@Override
HttpServerRequest endHandler(Handler<Void> endHandler);
From source file:com.englishtown.vertx.jersey.impl.DefaultJerseyHandler.java
License:Open Source License
/** * {@inheritDoc}// w w w.j a v a2 s. c o m */ @Override public void handle(final HttpServerRequest vertxRequest) { // Wait for the body for jersey to handle form/json/xml params if (shouldReadData(vertxRequest)) { if (logger.isDebugEnabled()) { logger.debug("DefaultJerseyHandler - handle request and read body: " + vertxRequest.method() + " " + vertxRequest.uri()); } final Buffer body = Buffer.buffer(); vertxRequest.handler(buffer -> { body.appendBuffer(buffer); if (body.length() > maxBodySize) { throw new RuntimeException( "The input stream has exceeded the max allowed body size " + maxBodySize + "."); } }); vertxRequest.endHandler(aVoid -> { InputStream inputStream = new ByteArrayInputStream(body.getBytes()); DefaultJerseyHandler.this.handle(vertxRequest, inputStream); }); } else { if (logger.isDebugEnabled()) { logger.debug("DefaultJerseyHandler - handle request: " + vertxRequest.method() + " " + vertxRequest.uri()); } DefaultJerseyHandler.this.handle(vertxRequest, null); } }
From source file:com.sibvisions.vertx.HttpServer.java
License:Apache License
/** * Handles a service/server request./*w ww . j a v a 2 s . c om*/ * * @param pRequest the request */ private void handleService(HttpServerRequest pRequest) { AbstractDataHandler dataHandler = new HttpDataHandler(srvJVx, pRequest.response()); pRequest.handler(dataHandler); pRequest.endHandler(new StopHandler(dataHandler)); pRequest.exceptionHandler(new ExceptionHandler(dataHandler)); }
From source file:com.sibvisions.vertx.HttpServer.java
License:Apache License
/** * Handles an upload request.//from w w w . ja va 2 s .c o m * * @param pRequest the request */ private void handleUpload(final HttpServerRequest pRequest) { pRequest.handler(new Handler<Buffer>() { private OutputStream os; public void handle(Buffer event) { try { if (os == null) { String sFileName = getFileName(pRequest.headers().get("Content-Disposition")); if (sFileName == null) { pRequest.response().setStatusCode(HttpResponseStatus.BAD_REQUEST.code()); pRequest.response().end(); return; } RemoteFileHandle rfh = new RemoteFileHandle(sFileName, pRequest.params().get("KEY")); os = rfh.getOutputStream(); } os.write(event.getBytes()); } catch (IOException ioe) { throw new RuntimeException(ioe); } } }); pRequest.exceptionHandler(new Handler<Throwable>() { public void handle(Throwable event) { pRequest.response().end(); } }); pRequest.endHandler(new Handler<Void>() { public void handle(Void event) { pRequest.response().end(); } }); }
From source file:examples.HTTPExamples.java
License:Open Source License
public void example10(HttpServerRequest request) { // Create an empty buffer Buffer totalBuffer = Buffer.buffer(); request.handler(buffer -> {/*from w w w. java 2s. c o m*/ System.out.println("I have received a chunk of the body of length " + buffer.length()); totalBuffer.appendBuffer(buffer); }); request.endHandler(v -> { System.out.println("Full body received, length = " + totalBuffer.length()); }); }
From source file:fr.wseduc.rack.controllers.RackController.java
License:Open Source License
/** * Post a new document to other people's rack folder. * @param request Client request containing a list of user ids belonging to the receivers and the file. *//*from ww w .j a v a 2s . c om*/ @Post("") @SecuredAction(send) public void postRack(final HttpServerRequest request) { UserUtils.getUserInfos(eb, request, new Handler<UserInfos>() { @Override public void handle(final UserInfos userInfos) { if (userInfos == null) { badRequest(request); return; } request.setExpectMultipart(true); final Buffer fileBuffer = Buffer.buffer(); final JsonObject metadata = new JsonObject(); /* Upload file */ request.uploadHandler(getUploadHandler(fileBuffer, metadata, request)); /* After upload */ request.endHandler(new Handler<Void>() { @Override public void handle(Void v) { String users = request.formAttributes().get("users"); if (users == null) { badRequest(request); return; } String[] userIds = users.split(","); final AtomicInteger countdown = new AtomicInteger(userIds.length); final AtomicInteger success = new AtomicInteger(0); final AtomicInteger failure = new AtomicInteger(0); /* Final handler - called after each attempt */ final Handler<Boolean> finalHandler = new Handler<Boolean>() { @Override public void handle(Boolean event) { if (event == null || !event) failure.addAndGet(1); else success.addAndGet(1); if (countdown.decrementAndGet() == 0) { JsonObject result = new JsonObject(); result.put("success", success.get()); result.put("failure", failure.get()); renderJson(request, result); } } }; for (final String to : userIds) { /* Query user and check existence */ String query = "MATCH (n:User) " + "WHERE n.id = {id} " + "RETURN count(n) as nb, n.displayName as username"; Map<String, Object> params = new HashMap<>(); params.put("id", to); Handler<Message<JsonObject>> existenceHandler = new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { JsonArray result = res.body().getJsonArray("result"); if (!"ok".equals(res.body().getString("status")) || 1 != result.size() || 1 != result.getJsonObject(0).getInteger("nb")) { finalHandler.handle(false); return; } /* Pre write rack document fields */ final JsonObject doc = new JsonObject(); doc.put("to", to); doc.put("toName", result.getJsonObject(0).getString("username")); doc.put("from", userInfos.getUserId()); doc.put("fromName", userInfos.getUsername()); String now = dateFormat.format(new Date()); doc.put("sent", now); /* Rack collection saving */ final Handler<JsonObject> rackSaveHandler = new Handler<JsonObject>() { @Override public void handle(JsonObject uploaded) { if (uploaded == null || !"ok".equals(uploaded.getString("status"))) { finalHandler.handle(false); } else { addAfterUpload(uploaded.put("metadata", metadata), doc, request.params().get("name"), request.params().get("application"), request.params().getAll("thumbnail"), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> res) { if ("ok".equals(res.body().getString("status"))) { JsonObject params = new JsonObject() .put("uri", "/userbook/annuaire#" + doc.getString("from")) .put("resourceUri", pathPrefix) .put("username", doc.getString("fromName")) .put("documentName", doc.getString("name")); List<String> receivers = new ArrayList<>(); receivers.add(doc.getString("to")); JsonObject pushNotif = new JsonObject() .put("title", "rack.push.notif.rack-post") .put("body", I18n.getInstance().translate( "rack.push.notif.rack-post.body", getHost(request), I18n.acceptLanguage( request), doc.getString( "fromName"), doc.getString("name"))); params.put("pushNotif", pushNotif); timelineHelper.notifyTimeline(request, "rack.rack-post", userInfos, receivers, userInfos.getUserId() + System.currentTimeMillis() + "postrack", null, params, true); finalHandler.handle(true); } else { finalHandler.handle(false); } } }); } } }; /* Get user quota & check */ getUserQuota(to, new Handler<JsonObject>() { @Override public void handle(JsonObject j) { if (j == null || "error".equals(j.getString("status"))) { finalHandler.handle(false); return; } long emptySize = 0l; long quota = j.getLong("quota", 0l); long storage = j.getLong("storage", 0l); emptySize = quota - storage; if (emptySize < metadata.getLong("size", 0l)) { finalHandler.handle(false); return; } //Save file RackController.this.storage.writeBuffer(fileBuffer, metadata.getString("content-type"), metadata.getString("name"), rackSaveHandler); } }); } }; Neo4j.getInstance().execute(query, params, existenceHandler); } } }); } }); }
From source file:io.advantageous.qbit.vertx.http.server.HttpServerVertx.java
License:Apache License
private void setupMetrics(final HttpServerRequest request) { request.exceptionHandler(event -> { if (debug) { exceptionCount++;// ww w . j ava 2 s . c om } logger.info("EXCEPTION", event); }); request.endHandler(event -> { if (debug) { closeCount++; } logger.info("REQUEST OVER"); }); }
From source file:io.nitor.api.backend.msgraph.GraphQueryHandler.java
License:Apache License
@Override public void handle(RoutingContext ctx) { HttpServerRequest sreq = ctx.request(); String path = sreq.path();/*w w w .ja v a 2 s . c o m*/ path = path.substring(routeLength); if (!path.startsWith("/")) { path = '/' + path; } path = baseUrl + path + paramsOf(ctx.request().absoluteURI()); Map<String, String> data = sessionHandler.getSessionData(ctx); String refreshToken = data.get(GRAPH_ACCESS_TOKEN_KEY); Future<TokenData> tokenFuture = tokenCache.getAccessToken(refreshToken); HttpServerResponse sres = ctx.response(); String finalPath = path; tokenFuture.setHandler(tokenResult -> { if (tokenResult.failed()) { sessionHandler.removeCookie(ctx); String err = tokenResult.cause().toString(); logger.error(err); sres.setStatusCode(INTERNAL_SERVER_ERROR.code()).end(err); return; } TokenData token = tokenResult.result(); if (!refreshToken.equals(token.refreshToken)) { Map<String, String> newData = new HashMap<>(data); newData.put(GRAPH_ACCESS_TOKEN_KEY, token.refreshToken); sessionHandler.setSessionData(ctx, newData); } String clientRequestId = UUID.randomUUID().toString(); logger.info("Querying " + sreq.method() + " " + finalPath + " [" + clientRequestId + "]"); HttpClientRequest creq = httpClient.requestAbs(sreq.method(), finalPath) .putHeader(AUTHORIZATION, "Bearer " + token.accessToken).putHeader(ACCEPT, APPLICATION_JSON) .putHeader("client-request-id", clientRequestId).setTimeout(SECONDS.toMillis(20)) .exceptionHandler(err -> { logger.error("Graph query failed [" + clientRequestId + "]", err); if (!sres.ended()) { sres.setStatusCode(INTERNAL_SERVER_ERROR.code()).write("Graph query failed: " + err) .end(); } }); for (String header : allowedRequestHeaders) { ofNullable(sreq.getHeader(header)).ifPresent(value -> creq.putHeader(header, value)); } if (sres.headers().getAll("transfer-encoding").stream().anyMatch(v -> v.equals("chunked"))) { creq.setChunked(true); } sres.closeHandler(close -> creq.connection().close()); creq.handler(cres -> mapResponse(cres, sres, clientRequestId)); if (sreq.isEnded()) { creq.end(); } else { sreq.endHandler(v -> { try { creq.end(); } catch (IllegalStateException ex) { // ignore - nothing can be done - the request is already complete/closed - TODO log? } }); Pump resPump = Pump.pump(sreq, creq); resPump.start(); } }); }
From source file:io.nitor.api.backend.proxy.Proxy.java
License:Apache License
public void handle(RoutingContext routingContext) { final HttpServerRequest sreq = routingContext.request(); final boolean isTls = isOrigReqHttps || "https".equals(routingContext.request().scheme()); final boolean isHTTP2 = routingContext.request().version() == HTTP_2; final String chost = getRemoteAddress(routingContext); final ProxyTracer tracer = tracerFactory.get(); String reqId = sreq.headers().get(requestIdHeader); boolean hadRequestId = reqId != null; if (reqId == null) { reqId = Long.toString(requestId.getAndIncrement()); }/* w w w . ja va 2 s . c om*/ tracer.incomingRequestStart(routingContext, isTls, isHTTP2, chost, reqId); if (!hadRequestId) { sreq.headers().add(requestIdHeader, reqId); } HttpServerResponse sres = sreq.response(); sres.exceptionHandler(tracer::outgoingResponseException); routingContext.addHeadersEndHandler(tracer::outgoingResponseHeadersEnd); sres.bodyEndHandler(tracer::outgoingResponseBodyEnd); if (!isHTTP2) { sres.headers().add("keep-alive", keepAliveHeaderValue); sres.headers().add("connection", "keep-alive"); } sreq.exceptionHandler(t -> { tracer.incomingRequestException(t); routingContext.fail(new ProxyException(500, RejectReason.incomingRequestFail, t)); }); final State state = new State(); targetResolver.resolveNextHop(routingContext, nextHop -> { if (nextHop == null) { NullPointerException e = new NullPointerException("nextHop must not be null"); tracer.incomingRequestException(e); throw e; } tracer.nextHopResolved(nextHop); MultiMap sreqh = sreq.headers(); String origHost = null; if (isHTTP2) { origHost = sreqh.get(":authority"); } if (origHost == null) { origHost = sreqh.get("Host"); } if (origHost == null) { ProxyException e = new ProxyException(400, RejectReason.noHostHeader, null); tracer.incomingRequestException(e); routingContext.fail(e); return; } boolean isWebsocket = !isHTTP2 && "websocket".equals(sreqh.get("upgrade")); if (isWebsocket) { MultiMap creqh = new CaseInsensitiveHeaders(); propagateRequestHeaders(isTls, chost, sreqh, origHost, creqh); if (nextHop.hostHeader != null) { creqh.set("Host", nextHop.hostHeader); } else { creqh.remove("Host"); } tracer.outgoingWebsocketInitial(creqh); client.websocket(nextHop.socketPort, nextHop.socketHost, nextHop.uri, creqh, cws -> { // lol no headers copied final boolean[] isClosed = { false }; ServerWebSocket sws = sreq.upgrade(); tracer.websocketEstablished(); for (final WebSocketBase[] pair : new WebSocketBase[][] { { sws, cws }, { cws, sws } }) { pair[0].frameHandler(pair[1]::writeFrame).closeHandler(v -> { if (!isClosed[0]) { tracer.establishedWebsocketClosed(); isClosed[0] = true; pair[1].close(); } }).exceptionHandler(t -> { tracer.establishedWebsocketException(t); t.printStackTrace(); if (!isClosed[0]) { isClosed[0] = true; try { pair[1].close(); } catch (IllegalStateException e) { // whatever } } }); } }, t -> { tracer.outgoingWebsocketException(t); t.printStackTrace(); sres.setStatusCode(HttpResponseStatus.BAD_GATEWAY.code()); if (t instanceof WebSocketHandshakeRejectedException) { WebSocketHandshakeRejectedException e = (WebSocketHandshakeRejectedException) t; sres.setStatusCode(e.resp.status().code()); sres.setStatusMessage(e.resp.status().reasonPhrase()); MultiMap cresh = new HeadersAdaptor(e.resp.headers()); copyEndToEndHeaders(cresh, sres.headers()); sres.headers().add("keep-alive", keepAliveHeaderValue); sres.headers().add("connection", "keep-alive"); sres.headers().set("content-length", "0"); } tracer.outgoingResponseInitial(); tracer.outgoingResponseHeadersEnd(null); sres.end(); tracer.outgoingResponseBodyEnd(null); }); return; } String expectStr; state.expecting100 = null != (expectStr = sreq.headers().get("expect")) && expectStr.equalsIgnoreCase("100-continue"); HttpClientRequest creq = client.request(sreq.method(), nextHop.socketPort, nextHop.socketHost, nextHop.uri); creq.setTimeout(SECONDS.toMillis(clientReceiveTimeout)); creq.handler(cres -> { cres.exceptionHandler(t -> { tracer.incomingResponseException(t); if (!state.serverFinished) { state.clientFinished = true; state.serverFinished = true; routingContext.fail(new ProxyException(502, RejectReason.incomingResponseFail, t)); } }); tracer.incomingResponseStart(cres); sres.setStatusCode(cres.statusCode()); sres.setStatusMessage(cres.statusMessage()); MultiMap headers = cres.headers(); copyEndToEndHeaders(headers, sres.headers()); final boolean reqCompletedBeforeResponse = state.requestComplete; if (state.expecting100) { log.info("Got " + cres.statusCode() + " instead of 100 Continue"); if (!isHTTP2) { if (/* state.receivedRequestBodyBefore100 && */ !reqCompletedBeforeResponse) { // TODO investigate whether vertx is able to handle the server request correctly without us closing the conn // but actually the client might have data in transit.. log.info( "Client might have started streaming data anyway, so request message boundary is lost. Continue streaming, but close server connection after response complete."); sres.headers().set("connection", "close"); } else { log.info( "Client had streamed the complete data anyway. Can carry on without closing server conn."); } } } if (!isHTTP2) { if (!sres.headers().contains("connection") || !sres.headers().get("connection").contains("close")) { sres.headers().add("keep-alive", keepAliveHeaderValue); sres.headers().add("connection", "keep-alive"); } } if (!headers.contains("content-length")) { sres.setChunked(true); } tracer.outgoingResponseInitial(); cres.endHandler(v -> { tracer.incomingResponseEnd(); state.clientFinished = true; if (!state.serverFinished) { state.serverFinished = true; sres.end(); } if (state.expecting100 && /* state.receivedRequestBodyBefore100 && */ !reqCompletedBeforeResponse) { log.info( "Client had started streaming data anyway, so request message boundary is lost. Close client connection."); creq.connection().close(); } }); pump.start(cres, sres, tracer); }); creq.exceptionHandler(t -> { tracer.outgoingRequestException(t); if (!state.serverFinished) { state.clientFinished = true; state.serverFinished = true; routingContext.fail(new ProxyException(502, RejectReason.outgoingRequestFail, t)); } }); MultiMap creqh = creq.headers(); propagateRequestHeaders(isTls, chost, sreqh, origHost, creqh); creq.headers().addAll(addHeaders); if (nextHop.hostHeader != null) { creq.setHost(nextHop.hostHeader); } else { creqh.remove("host"); } if (sreqh.getAll("transfer-encoding").stream().anyMatch(v -> v.equals("chunked"))) { creq.setChunked(true); } sres.closeHandler(v -> { if (!state.clientFinished) { state.clientFinished = true; tracer.incomingConnectionPrematurelyClosed(); HttpConnection connection = creq.connection(); if (connection != null) { connection.close(); } // else TODO } if (!state.serverFinished) { state.serverFinished = true; routingContext.fail(new ProxyException(0, RejectReason.outgoingResponseFail, null)); } }); tracer.outgoingRequestInitial(creq); if (sreq.isEnded()) { state.requestComplete = true; Buffer body = routingContext.getBody(); if (body == null || body.length() == 0) { creq.end(); } else { if (!creq.isChunked()) { creq.putHeader("content-length", Integer.toString(body.length())); } creq.end(routingContext.getBody()); } tracer.incomingRequestEnd(); } else { sreq.endHandler(v -> { state.requestComplete = true; try { creq.end(); } catch (IllegalStateException ex) { // ignore - nothing can be done - the request is already complete/closed - TODO log? } tracer.incomingRequestEnd(); }); ReadStream<Buffer> sreqStream; if (state.expecting100) { log.debug("Expect: 100"); creq.continueHandler(v -> { // no longer expecting 100, it's like a normal not-expecting-100 request from now on state.expecting100 = false; // since we received 100 Continue, we know the server agrees to accept all the request body, so we can assume we are forgiven for sending data early state.receivedRequestBodyBefore100 = false; log.info("Got 100, propagating"); sres.writeContinue(); }); // in this case we must flush request headers before the body is sent creq.sendHead(); sreqStream = new ReadStreamWrapper<Buffer>(sreq) { final LazyHandlerWrapper<Buffer> handlerWrapper = new LazyHandlerWrapper<Buffer>( super::handler, null) { @Override public void handle(Buffer event) { log.info("Got first request body chunk"); if (state.expecting100) { log.info("Got request body before '100 Continue'"); // data received despite not having yet recived 100-continue state.receivedRequestBodyBefore100 = true; } deactivate(); wrapped.handle(event); } }; @Override public ReadStream<Buffer> handler(Handler<Buffer> handler) { return handlerWrapper.handler(handler, this); } }; } else { log.debug("Not expect-100"); sreqStream = sreq; } pump.start(sreqStream, creq, tracer); } }); }
From source file:io.servicecomb.transport.rest.vertx.RestBodyHandler.java
License:Apache License
@Override public void handle(RoutingContext context) { HttpServerRequest request = context.request(); // we need to keep state since we can be called again on reroute Boolean handled = context.get(BODY_HANDLED); if (handled == null || !handled) { BHandler handler = new BHandler(context); request.handler(handler);//from w w w . j av a 2s . c om request.endHandler(v -> handler.end()); context.put(BODY_HANDLED, true); } else { // on reroute we need to re-merge the form params if that was desired if (mergeFormAttributes && request.isExpectMultipart()) { request.params().addAll(request.formAttributes()); } context.next(); } }
From source file:org.entcore.auth.controllers.AuthController.java
License:Open Source License
@Post("/oauth2/token") public void token(final HttpServerRequest request) { request.setExpectMultipart(true);//from ww w. ja v a2 s . c om request.endHandler(new io.vertx.core.Handler<Void>() { @Override public void handle(Void v) { Request req = new HttpServerRequestAdapter(request); token.handleRequest(req, new Handler<Response>() { @Override public void handle(Response response) { renderJson(request, new JsonObject(response.getBody()), response.getCode()); } }); } }); }