private ServerHttpResponse prepareResponse(ServerHttpResponse response, ServerHttpRequest request) { return (request.getMethod() == HttpMethod.HEAD ? new HttpHeadResponseDecorator(response) : response); }
/** * Invoke {@link #setComplete()} without writing. * <p>RFC 7302 allows HTTP HEAD response without content-length and it's not * something that can be computed on a streaming response. */ @Override public final Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body) { // Not feasible to count bytes on potentially streaming response. // RFC 7302 allows HEAD without content-length. return setComplete(); }
/** * Apply {@link Flux#reduce(Object, BiFunction) reduce} on the body, count * the number of bytes produced, release data buffers without writing, and * set the {@literal Content-Length} header. */ @Override public final Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { return Flux.from(body) .reduce(0, (current, buffer) -> { int next = current + buffer.readableByteCount(); DataBufferUtils.release(buffer); return next; }) .doOnNext(count -> getHeaders().setContentLength(count)) .then(); }
/** * Apply {@link Flux#reduce(Object, BiFunction) reduce} on the body, count * the number of bytes produced, release data buffers without writing, and * set the {@literal Content-Length} header. */ @Override public final Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { return Flux.from(body) .reduce(0, (current, buffer) -> { int next = current + buffer.readableByteCount(); DataBufferUtils.release(buffer); return next; }) .doOnNext(count -> getHeaders().setContentLength(count)) .then(); }
@Override public Mono<Void> apply(HttpServerRequest reactorRequest, HttpServerResponse reactorResponse) { NettyDataBufferFactory bufferFactory = new NettyDataBufferFactory(reactorResponse.alloc()); try { ReactorServerHttpRequest request = new ReactorServerHttpRequest(reactorRequest, bufferFactory); ServerHttpResponse response = new ReactorServerHttpResponse(reactorResponse, bufferFactory); if (request.getMethod() == HttpMethod.HEAD) { response = new HttpHeadResponseDecorator(response); } return this.httpHandler.handle(request, response) .doOnError(ex -> logger.trace(request.getLogPrefix() + "Failed to complete: " + ex.getMessage())) .doOnSuccess(aVoid -> logger.trace(request.getLogPrefix() + "Handling completed")); } catch (URISyntaxException ex) { if (logger.isDebugEnabled()) { logger.debug("Failed to get request URI: " + ex.getMessage()); } reactorResponse.status(HttpResponseStatus.BAD_REQUEST); return Mono.empty(); } }
/** * Invoke {@link #setComplete()} without writing. * <p>RFC 7302 allows HTTP HEAD response without content-length and it's not * something that can be computed on a streaming response. */ @Override public final Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body) { // Not feasible to count bytes on potentially streaming response. // RFC 7302 allows HEAD without content-length. return setComplete(); }
/** * Apply {@link Flux#reduce(Object, BiFunction) reduce} on the body, count * the number of bytes produced, release data buffers without writing, and * set the {@literal Content-Length} header. */ @Override public final Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { return Flux.from(body) .reduce(0, (current, buffer) -> { int next = current + buffer.readableByteCount(); DataBufferUtils.release(buffer); return next; }) .doOnNext(count -> getHeaders().setContentLength(count)) .then(); }
@Override public void handleRequest(HttpServerExchange exchange) { UndertowServerHttpRequest request = null; try { request = new UndertowServerHttpRequest(exchange, getDataBufferFactory()); } catch (URISyntaxException ex) { if (logger.isWarnEnabled()) { logger.debug("Failed to get request URI: " + ex.getMessage()); } exchange.setStatusCode(400); return; } ServerHttpResponse response = new UndertowServerHttpResponse(exchange, getDataBufferFactory(), request); if (request.getMethod() == HttpMethod.HEAD) { response = new HttpHeadResponseDecorator(response); } HandlerResultSubscriber resultSubscriber = new HandlerResultSubscriber(exchange, request); this.httpHandler.handle(request, response).subscribe(resultSubscriber); }
/** * Invoke {@link #setComplete()} without writing. * <p>RFC 7302 allows HTTP HEAD response without content-length and it's not * something that can be computed on a streaming response. */ @Override public final Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body) { // Not feasible to count bytes on potentially streaming response. // RFC 7302 allows HEAD without content-length. return setComplete(); }
/** * Apply {@link Flux#reduce(Object, BiFunction) reduce} on the body, count * the number of bytes produced, release data buffers without writing, and * set the {@literal Content-Length} header. */ @Override public final Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { // After Reactor Netty #171 is fixed we can return without delegating return getDelegate().writeWith( Flux.from(body) .reduce(0, (current, buffer) -> { int next = current + buffer.readableByteCount(); DataBufferUtils.release(buffer); return next; }) .doOnNext(count -> getHeaders().setContentLength(count)) .then(Mono.empty())); }
httpResponse = new HttpHeadResponseDecorator(httpResponse);
/** * Invoke {@link #setComplete()} without writing. * <p>RFC 7302 allows HTTP HEAD response without content-length and it's not * something that can be computed on a streaming response. */ @Override public final Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body) { // Not feasible to count bytes on potentially streaming response. // RFC 7302 allows HEAD without content-length. return setComplete(); }
@Override public Mono<Void> apply(HttpServerRequest reactorRequest, HttpServerResponse reactorResponse) { NettyDataBufferFactory bufferFactory = new NettyDataBufferFactory(reactorResponse.alloc()); try { ReactorServerHttpRequest request = new ReactorServerHttpRequest(reactorRequest, bufferFactory); ServerHttpResponse response = new ReactorServerHttpResponse(reactorResponse, bufferFactory); if (request.getMethod() == HttpMethod.HEAD) { response = new HttpHeadResponseDecorator(response); } return this.httpHandler.handle(request, response) .doOnError(ex -> logger.trace(request.getLogPrefix() + "Failed to complete: " + ex.getMessage())) .doOnSuccess(aVoid -> logger.trace(request.getLogPrefix() + "Handling completed")); } catch (URISyntaxException ex) { if (logger.isDebugEnabled()) { logger.debug("Failed to get request URI: " + ex.getMessage()); } reactorResponse.status(HttpResponseStatus.BAD_REQUEST); return Mono.empty(); } }
@Override public void handleRequest(HttpServerExchange exchange) { UndertowServerHttpRequest request = null; try { request = new UndertowServerHttpRequest(exchange, getDataBufferFactory()); } catch (URISyntaxException ex) { if (logger.isWarnEnabled()) { logger.debug("Failed to get request URI: " + ex.getMessage()); } exchange.setStatusCode(400); return; } ServerHttpResponse response = new UndertowServerHttpResponse(exchange, getDataBufferFactory(), request); if (request.getMethod() == HttpMethod.HEAD) { response = new HttpHeadResponseDecorator(response); } HandlerResultSubscriber resultSubscriber = new HandlerResultSubscriber(exchange, request); this.httpHandler.handle(request, response).subscribe(resultSubscriber); }
httpResponse = new HttpHeadResponseDecorator(httpResponse);
private ServerHttpResponse prepareResponse(ServerHttpResponse response, ServerHttpRequest request) { return (request.getMethod() == HttpMethod.HEAD ? new HttpHeadResponseDecorator(response) : response); }
private ServerHttpResponse prepareResponse(ServerHttpResponse response, ServerHttpRequest request) { return (request.getMethod() == HttpMethod.HEAD ? new HttpHeadResponseDecorator(response) : response); }
@Override public Mono<Void> apply(HttpServerRequest reactorRequest, HttpServerResponse reactorResponse) { NettyDataBufferFactory bufferFactory = new NettyDataBufferFactory(reactorResponse.alloc()); try { ReactorServerHttpRequest request = new ReactorServerHttpRequest(reactorRequest, bufferFactory); ServerHttpResponse response = new ReactorServerHttpResponse(reactorResponse, bufferFactory); if (request.getMethod() == HttpMethod.HEAD) { response = new HttpHeadResponseDecorator(response); } return this.httpHandler.handle(request, response) .doOnError(ex -> logger.trace(request.getLogPrefix() + "Failed to complete: " + ex.getMessage())) .doOnSuccess(aVoid -> logger.trace(request.getLogPrefix() + "Handling completed")); } catch (URISyntaxException ex) { if (logger.isDebugEnabled()) { logger.debug("Failed to get request URI: " + ex.getMessage()); } reactorResponse.status(HttpResponseStatus.BAD_REQUEST); return Mono.empty(); } }
@Override public Mono<Void> apply(HttpServerRequest request, HttpServerResponse response) { ServerHttpRequest adaptedRequest; ServerHttpResponse adaptedResponse; try { adaptedRequest = new ReactorServerHttpRequest(request, BUFFER_FACTORY); adaptedResponse = new ReactorServerHttpResponse(response, BUFFER_FACTORY); } catch (URISyntaxException ex) { if (logger.isWarnEnabled()) { logger.warn("Invalid URL for incoming request: " + ex.getMessage()); } response.status(HttpResponseStatus.BAD_REQUEST); return Mono.empty(); } if (adaptedRequest.getMethod() == HttpMethod.HEAD) { adaptedResponse = new HttpHeadResponseDecorator(adaptedResponse); } return this.httpHandler.handle(adaptedRequest, adaptedResponse) .doOnError(ex -> logger.warn("Handling completed with error: " + ex.getMessage())) .doOnSuccess(aVoid -> logger.debug("Handling completed with success")); }
@Override public void handleRequest(HttpServerExchange exchange) { UndertowServerHttpRequest request = null; try { request = new UndertowServerHttpRequest(exchange, getDataBufferFactory()); } catch (URISyntaxException ex) { if (logger.isWarnEnabled()) { logger.debug("Failed to get request URI: " + ex.getMessage()); } exchange.setStatusCode(400); return; } ServerHttpResponse response = new UndertowServerHttpResponse(exchange, getDataBufferFactory(), request); if (request.getMethod() == HttpMethod.HEAD) { response = new HttpHeadResponseDecorator(response); } HandlerResultSubscriber resultSubscriber = new HandlerResultSubscriber(exchange, request); this.httpHandler.handle(request, response).subscribe(resultSubscriber); }