@Override public Optional<NettyMutableHttpResponse> convert(FullNettyClientHttpResponse object, Class<NettyMutableHttpResponse> targetType, ConversionContext context) { return Optional.of(new NettyMutableHttpResponse(object.getNativeResponse(), conversionService).body(object.getBody())); } }
@SuppressWarnings("unchecked") @Override public <T1> Optional<T1> getBody(Class<T1> type) { return getBody(Argument.of(type)); }
private FullHttpResponse notModified() { NettyMutableHttpResponse response = (NettyMutableHttpResponse) HttpResponse.notModified(); setDateHeader(response); return response.getNativeResponse(); }
@Override public <T> MutableHttpResponse<T> ok(T body) { MutableHttpResponse<T> ok = new NettyMutableHttpResponse<>(ConversionService.SHARED); return body != null ? ok.body(body) : ok; }
private void writeFinalNettyResponse(MutableHttpResponse<?> message, AtomicReference<HttpRequest<?>> requestReference, ChannelHandlerContext context) { NettyMutableHttpResponse nettyHttpResponse = (NettyMutableHttpResponse) message; FullHttpResponse nettyResponse = nettyHttpResponse.getNativeResponse(); HttpRequest<?> httpRequest = requestReference.get(); io.netty.handler.codec.http.HttpHeaders nettyHeaders = nettyResponse.headers(); // default Connection header if not set explicitly if (!nettyHeaders.contains(HttpHeaderNames.CONNECTION)) { boolean expectKeepAlive = nettyResponse.protocolVersion().isKeepAliveDefault() || httpRequest.getHeaders().isKeepAlive(); HttpStatus status = nettyHttpResponse.status(); if (!expectKeepAlive || status.getCode() > 299) { nettyHeaders.add(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); } else { nettyHeaders.add(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); } } // default to Transfer-Encoding: chunked if Content-Length not set or not already set if (!nettyHeaders.contains(HttpHeaderNames.CONTENT_LENGTH) && !nettyHeaders.contains(HttpHeaderNames.TRANSFER_ENCODING)) { nettyHeaders.add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); } final Object body = message.body(); if (body instanceof NettyCustomizableResponseTypeHandlerInvoker) { NettyCustomizableResponseTypeHandlerInvoker handler = (NettyCustomizableResponseTypeHandlerInvoker) body; handler.invoke(httpRequest, nettyHttpResponse, context); } else { // close handled by HttpServerKeepAliveHandler context.writeAndFlush(nettyResponse); context.read(); } }
if (!response.getHeaders().contains(HttpHeaders.CONTENT_TYPE)) { response.header(HttpHeaders.CONTENT_TYPE, type.getMediaType().toString());
@Override public String toString() { HttpStatus status = getStatus(); return status.getCode() + " " + status.getReason(); }
@Override public <T> MutableHttpResponse<T> status(HttpStatus status, T body) { MutableHttpResponse<T> ok = new NettyMutableHttpResponse<>(ConversionService.SHARED); ok.status(status); return body != null ? ok.body(body) : ok; }
@Override public Optional<NettyMutableHttpResponse> convert(FullNettyClientHttpResponse object, Class<NettyMutableHttpResponse> targetType, ConversionContext context) { return Optional.of(new NettyMutableHttpResponse(object.getNativeResponse(), conversionService).body(object.getBody())); } }
@Override public MutableHttpResponse status(HttpStatus status, String reason) { HttpResponseStatus nettyStatus; if (reason == null) { nettyStatus = HttpResponseStatus.valueOf(status.getCode()); } else { nettyStatus = new HttpResponseStatus(status.getCode(), reason); } DefaultFullHttpResponse fullHttpResponse = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, nettyStatus); return new NettyMutableHttpResponse(fullHttpResponse, ConversionService.SHARED); }
@Override public void write(HttpRequest<?> request, MutableHttpResponse<?> response, ChannelHandlerContext context) { if (response instanceof NettyMutableHttpResponse) { FullHttpResponse nettyResponse = ((NettyMutableHttpResponse) response).getNativeResponse(); // Write the request data context.write(new DefaultHttpResponse(nettyResponse.protocolVersion(), nettyResponse.status(), nettyResponse.headers()), context.voidPromise()); context.writeAndFlush(new HttpChunkedInput(new ChunkedStream(getInputStream()))); } else { throw new IllegalArgumentException("Unsupported response type. Not a Netty response: " + response); } } }
@Override public Optional<MediaType> getContentType() { Optional<MediaType> contentType = MutableHttpResponse.super.getContentType(); if (contentType.isPresent()) { return contentType; } else { Optional<B> body = getBody(); if (body.isPresent()) { return MediaType.fromType(body.get().getClass()); } } return Optional.empty(); }
@Override public Optional<NettyMutableHttpResponse> convert(FullNettyClientHttpResponse object, Class<NettyMutableHttpResponse> targetType, ConversionContext context) { return Optional.of(new NettyMutableHttpResponse(object.getNativeResponse(), conversionService).body(object.getBody())); } }
FullHttpResponse nettyResponse = ((NettyMutableHttpResponse) response).getNativeResponse();
@SuppressWarnings("unchecked") @Override public <T> Optional<T> getBody(Argument<T> type) { return convertedBodies.computeIfAbsent(type.getType(), aClass -> getBody().flatMap(b -> { ArgumentConversionContext<T> context = ConversionContext.of(type); if (b instanceof ByteBuffer) { return conversionService.convert(((ByteBuffer) b).asNativeBuffer(), context); } return conversionService.convert(b, context); })); }
out.add(((NettyMutableHttpResponse) response).getNativeResponse()); } else { io.netty.handler.codec.http.HttpHeaders nettyHeaders = new DefaultHttpHeaders();