@Override public Optional<EagerBodyReader> getBody() { Optional<? extends BodyReader> body = super.getBody(); return body.map(b -> (EagerBodyReader) b); }
@Override public Optional<EagerBodyReader> getBody() { Optional<? extends BodyReader> body = super.getBody(); return body.map(b -> (EagerBodyReader) b); }
/** * Create a copy of this HTTP request, replacing its requestLine with the provided one. * * @param requestLine to replace * @return copy of this HTTP message with the provided requestLine */ public RawHttpRequest withRequestLine(RequestLine requestLine) { return new RawHttpRequest(requestLine, getHeaders(), getBody().orElse(null), getSenderAddress().orElse(null)); }
/** * Create a copy of this HTTP request, replacing its requestLine with the provided one. * * @param requestLine to replace * @return copy of this HTTP message with the provided requestLine */ public RawHttpRequest withRequestLine(RequestLine requestLine) { return new RawHttpRequest(requestLine, getHeaders(), getBody().orElse(null), getSenderAddress().orElse(null)); }
/** * Accept a request from a client to establish duplex communications as a server. * * @param request request sent by the client. * <p> * The request body is assumed to consist of an * infinite stream of chunks, each representing a message from the client. * @param createHandler callback that takes a message sender that can be used to send out messages, and returns a * message handler receives messages from the remote. * @return response to be sent to the client to initiate duplex communication. */ public RawHttpResponse<Void> accept(RawHttpRequest request, Function<MessageSender, MessageHandler> createHandler) { final Iterator<Chunk> receivedChunkStream = request.getBody() .flatMap((b) -> { try { return b.asChunkStream(); } catch (IOException e) { throw new RuntimeException(e); } }) .orElseThrow(() -> new IllegalStateException("Client did not send chunked body")); return accept(receivedChunkStream, createHandler); }
@Override public RawHttpRequest withHeaders(RawHttpHeaders headers, boolean append) { return new RawHttpRequest(requestLine, append ? getHeaders().and(headers) : headers.and(getHeaders()), getBody().orElse(null), getSenderAddress().orElse(null)); }
@Override public RawHttpRequest withHeaders(RawHttpHeaders headers, boolean append) { return new RawHttpRequest(requestLine, append ? getHeaders().and(headers) : headers.and(getHeaders()), getBody().orElse(null), getSenderAddress().orElse(null)); }
public RawHttpResponse<CloseableHttpResponse> send(RawHttpRequest request) throws IOException { RequestBuilder builder = RequestBuilder.create(request.getMethod()); builder.setUri(request.getUri()); builder.setVersion(toProtocolVersion(request.getStartLine().getHttpVersion())); request.getHeaders().getHeaderNames().forEach((name) -> request.getHeaders().get(name).forEach(value -> builder.addHeader(new BasicHeader(name, value)))); request.getBody().ifPresent(b -> builder.setEntity(new InputStreamEntity(b.asRawStream()))); CloseableHttpResponse response = httpClient.execute(builder.build()); RawHttpHeaders headers = readHeaders(response); StatusLine statusLine = adaptStatus(response.getStatusLine()); @Nullable LazyBodyReader body; if (response.getEntity() != null) { FramedBody framedBody = http.getFramedBody(statusLine, headers); body = new LazyBodyReader(framedBody, response.getEntity().getContent()); } else { body = null; } return new RawHttpResponse<>(response, request, statusLine, headers, body); }