< prev index next >

src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpRequest.java

Print this page

        

*** 620,629 **** --- 620,672 ---- * implementation, as it has effectively no data to publish. */ public interface BodyPublisher extends Flow.Publisher<ByteBuffer> { /** + * Returns a request body publisher whose body is retrieved from the + * given {@code Flow.Publisher}. The returned request body publisher + * has an unknown content length. + * + * @apiNote This method can be used as an adapter between {@code + * BodyPublisher} and {@code Flow.Publisher}, where the amount of + * request body that the publisher will publish is unknown. + * + * @param publisher the publisher responsible for publishing the body + * @return a BodyPublisher + */ + static BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher) { + return new RequestPublishers.PublisherAdapter(publisher, -1L); + } + + /** + * Returns a request body publisher whose body is retrieved from the + * given {@code Flow.Publisher}. The returned request body publisher + * has the given content length. + * + * <p> The given {@code contentLength} is a positive number, that + * represents the exact amount of bytes the {@code publisher} must + * publish. + * + * @apiNote This method can be used as an adapter between {@code + * BodyPublisher} and {@code Flow.Publisher}, where the amount of + * request body that the publisher will publish is known. + * + * @param publisher the publisher responsible for publishing the body + * @param contentLength a positive number representing the exact + * amount of bytes the publisher will publish + * @throws IllegalArgumentException if the content length is + * non-positive + * @return a BodyPublisher + */ + static BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher, + long contentLength) { + if (contentLength < 1) + throw new IllegalArgumentException("non-positive contentLength: " + contentLength); + return new RequestPublishers.PublisherAdapter(publisher, contentLength); + } + + /** * Returns a request body publisher whose body is the given {@code * String}, converted using the {@link StandardCharsets#UTF_8 UTF_8} * character set. * * @param body the String containing the body
< prev index next >