ResponseT
- POJO response type.ResultT
- Type this response handler produces. I.E. the type you are transforming the response into.public interface AsyncResponseTransformer<ResponseT,ResultT>
All operations, including those called on the Subscriber
of the stream are guaranteed to be
synchronized externally; i.e. no two methods on this interface or on the Subscriber
will be
invoked concurrently. It is not guaranteed that the methods will being invoked by the same thread.
The methods are called in the following order:
prepare()
: This method is always called first. Implementations should use this to setup or perform any
cleanup necessary. Note that this will be called upon each request attempt. If the CompletableFuture
returned from the previous invocation has already been completed, the implementation should return a new instance.
onResponse(ResponseT)
: If the response was received successfully, this method is called next.
onStream(SdkPublisher)
: Called after onResponse
. This is always invoked, even if the service
operation response does not contain a body. If the response does not have a body, then the SdkPublisher
will
complete the subscription without signaling any elements.
exceptionOccurred(Throwable)
: If there is an error sending the request. This method is called before Subscriber.onError(Throwable)
.
Subscriber.onError(Throwable)
: If an error is encountered while the Publisher
is
publishing to a Subscriber
.
The transformer has the ability to trigger retries at any time by completing the CompletableFuture
with an
exception that is deemed retryable by the configured RetryPolicy
.
Modifier and Type | Method and Description |
---|---|
void |
exceptionOccurred(Throwable error)
Called when an error is encountered while making the request or receiving the response.
|
void |
onResponse(ResponseT response)
Called when the unmarshalled response object is ready.
|
void |
onStream(SdkPublisher<ByteBuffer> publisher)
Called when the response stream is ready.
|
CompletableFuture<ResultT> |
prepare()
Initial call to enable any setup required before the response is handled.
|
static <ResponseT> |
toBytes()
Creates an
AsyncResponseTransformer that writes all content to a byte array. |
static <ResponseT> |
toFile(File file)
Creates an
AsyncResponseTransformer that writes all the content to the given file. |
static <ResponseT> |
toFile(Path path)
Creates an
AsyncResponseTransformer that writes all the content to the given file. |
CompletableFuture<ResultT> prepare()
Note that this will be called for each request attempt, up to the number of retries allowed by the configured RetryPolicy
.
This method is guaranteed to be called before the request is executed, and before onResponse(Object)
is
signaled.
void onResponse(ResponseT response)
response
- The unmarshalled response.void onStream(SdkPublisher<ByteBuffer> publisher)
publisher
- The publisher.void exceptionOccurred(Throwable error)
error
- Error that occurred.static <ResponseT> AsyncResponseTransformer<ResponseT,ResponseT> toFile(Path path)
AsyncResponseTransformer
that writes all the content to the given file. In the event of an error,
the SDK will attempt to delete the file (whatever has been written to it so far). If the file already exists, an
exception will be thrown.ResponseT
- Pojo Response type.path
- Path to file to write to.static <ResponseT> AsyncResponseTransformer<ResponseT,ResponseT> toFile(File file)
AsyncResponseTransformer
that writes all the content to the given file. In the event of an error,
the SDK will attempt to delete the file (whatever has been written to it so far). If the file already exists, an
exception will be thrown.ResponseT
- Pojo Response type.file
- File to write to.static <ResponseT> AsyncResponseTransformer<ResponseT,ResponseBytes<ResponseT>> toBytes()
AsyncResponseTransformer
that writes all content to a byte array.ResponseT
- Pojo response type.Copyright © 2021. All rights reserved.