public class OutputStreamContentProvider extends Object implements AsyncContentProvider, Callback, Closeable
ContentProvider
that provides content asynchronously through an OutputStream
similar to DeferredContentProvider
.
OutputStreamContentProvider
can only be used in conjunction with
Request.send(Response.CompleteListener)
(and not with its blocking counterpart Request.send()
)
because it provides content asynchronously.
The deferred content is provided once by writing to the output stream
and then fully consumed.
Invocations to the iterator()
method after the first will return an "empty" iterator
because the stream has been consumed on the first invocation.
However, it is possible for subclasses to support multiple invocations of iterator()
by overriding write(ByteBuffer)
and close()
, copying the bytes and making them
available for subsequent invocations.
Content must be provided by writing to the output stream
, that must be
closed
when all content has been provided.
Example usage:
HttpClient httpClient = ...; // Use try-with-resources to autoclose the output stream OutputStreamContentProvider content = new OutputStreamContentProvider(); try (OutputStream output = content.getOutputStream()) { httpClient.newRequest("localhost", 8080) .content(content) .send(new Response.CompleteListener() { @Override public void onComplete(Result result) { // Your logic here } }); // At a later time... output.write("some content".getBytes()); }
AsyncContentProvider.Listener
ContentProvider.Typed
Callback.Completable, Callback.Completing, Callback.InvocableCallback, Callback.Nested
Invocable.InvocationType
__nonBlocking
Constructor and Description |
---|
OutputStreamContentProvider() |
Modifier and Type | Method and Description |
---|---|
void |
close() |
void |
failed(Throwable failure)
Callback invoked when the operation fails.
|
Invocable.InvocationType |
getInvocationType() |
long |
getLength() |
OutputStream |
getOutputStream() |
Iterator<ByteBuffer> |
iterator() |
void |
setListener(AsyncContentProvider.Listener listener) |
void |
succeeded()
Callback invoked when the operation completes.
|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
isReproducible
forEach, spliterator
combine, from, from, from, from, from, from
combine, getInvocationType, invokeNonBlocking, isNonBlockingInvocation
public Invocable.InvocationType getInvocationType()
getInvocationType
in interface Invocable
public long getLength()
getLength
in interface ContentProvider
public Iterator<ByteBuffer> iterator()
iterator
in interface Iterable<ByteBuffer>
public void setListener(AsyncContentProvider.Listener listener)
setListener
in interface AsyncContentProvider
listener
- the listener to be notified of content availabilitypublic OutputStream getOutputStream()
public void close()
close
in interface Closeable
close
in interface AutoCloseable
public void succeeded()
Callback
Callback invoked when the operation completes.
succeeded
in interface Callback
Callback.failed(Throwable)
Copyright © 2010 - 2020 Adobe. All Rights Reserved