APIdia Launch Partner
Top Description Inners Fields Constructors Methods
jdk.internal.net.http

pack-priv final Class Http3PushPromiseStream<T>

extends Http3Stream<T>
Class Inheritance
Imports
java.io.EOFException, .IOException, java.net.ProtocolException, java.net.http.HttpClient.Version, .HttpHeaders, .HttpResponse, .HttpResponse.BodyHandler, .HttpResponse.BodySubscriber, .HttpResponse.ResponseInfo, java.nio.ByteBuffer, java.util.Collections, .List, java.util.concurrent.CompletableFuture, .ConcurrentLinkedQueue, .Executor, java.util.concurrent.atomic.AtomicReference, java.util.concurrent.locks.ReentrantLock, jdk.internal.net.http.Http3PushManager.CancelPushReason, jdk.internal.net.http.common.HttpBodySubscriberWrapper, .HttpHeadersBuilder, .Log, .Logger, .MinimalFuture, .SequentialScheduler, .SubscriptionBase, .Utils, jdk.internal.net.http.http3.Http3Error, jdk.internal.net.http.http3.frames.FramesDecoder, .HeadersFrame, .PushPromiseFrame, jdk.internal.net.http.qpack.Decoder, jdk.internal.net.http.qpack.readers.HeaderFrameReader, jdk.internal.net.http.quic.streams.QuicReceiverStream, .QuicStreamReader

This class represents an HTTP/3 PushPromise stream.

Nested and Inner Type Summary

Modifier and TypeClass and Description
pack-priv class
private class

Field Summary

Modifier and TypeField and Description
pack-priv volatile boolean
private final Http3Connection
private String
private final Logger
private final AtomicReference<Throwable>
private final H3FrameOrderVerifier
private final FramesDecoder
private final Http3ExchangeImpl<T>
pack-priv volatile HttpResponse.BodySubscriber<T>
private final CompletableFuture<Response>
private final HttpResponse.BodyHandler<T>
private final long
private final Http3PushManager
private final Decoder
private final QuicStreamReader
private final SequentialScheduler
private final HeaderFrameReader
private final HttpHeadersBuilder
private final Http3PushPromiseStream<T>.PushRespHeadersConsumer
pack-priv volatile Response
pack-priv volatile CompletableFuture<T>
private final CompletableFuture<HttpResponse<T>>
pack-priv volatile int
pack-priv volatile boolean
pack-priv volatile HttpResponse.BodySubscriber<T>
private final ReentrantLock
pack-priv volatile boolean
private final QuicReceiverStream
pack-priv final SubscriptionBase
Inherited from jdk.internal.net.http.Http3Stream:
responseData

Constructor Summary

AccessConstructor and Description
pack-priv
Http3PushPromiseStream(Exchange<T> exchange, final Http3Connection connection, final Http3PushManager pushManager, final QuicReceiverStream stream, final CompletableFuture<HttpResponse<T>> responseCF, final HttpResponse.BodyHandler<T> pushHandler, Http3ExchangeImpl<T> parent, long pushId)

Method Summary

Modifier and TypeMethod and Description
pack-priv void
cancel()

Implements abstract jdk.internal.net.http.ExchangeImpl.cancel.

Cancels a request.

pack-priv void
cancel(IOException cause)

Implements abstract jdk.internal.net.http.ExchangeImpl.cancel.

Cancels a request with a cause.

pack-priv void
cancelImpl(Throwable e, Http3Error error)

Implements abstract jdk.internal.net.http.Http3Stream.cancelImpl.

Cancel the stream exchange on error

pack-priv void
pack-priv void
completed()

Implements abstract jdk.internal.net.http.ExchangeImpl.completed.

Called when the exchange is completed, so that cleanup actions may be performed - such as deregistering callbacks.

pack-priv void
completeResponse(Response r)

Implements abstract jdk.internal.net.http.Http3Stream.completeResponse.

Called at the end of handleResponse, to propagate the response to the multi exchange.

pack-priv void
completeResponseExceptionally(Throwable t)

same as above but for errors

pack-priv HttpQuicConnection
connection()

Implements abstract jdk.internal.net.http.ExchangeImpl.connection.

Returns the HttpConnection instance to which this exchange is assigned.

pack-priv void
connectionError(Throwable throwable, long errorCode, String errMsg)

Implements abstract jdk.internal.net.http.Http3Stream.connectionError.

Notify of a connection error.

pack-priv Http3PushPromiseStream<T>.Http3PushStreamResponseSubscriber<T>
pack-priv String
pack-priv Throwable
getCancelCause()

Implements abstract jdk.internal.net.http.ExchangeImpl.getCancelCause.

Returns the cause for which this exchange was canceled, if available.

pack-priv HttpResponse.BodyHandler<T>
pack-priv CompletableFuture<Response>
getResponseAsync(Executor executor)

Implements abstract jdk.internal.net.http.ExchangeImpl.getResponseAsync.

Gets the response headers.

protected void
pack-priv CompletableFuture<Void>
ignoreBody()

Implements abstract jdk.internal.net.http.ExchangeImpl.ignoreBody.

Ignore/consume the body.

pack-priv boolean
isCanceled()

Implements abstract jdk.internal.net.http.ExchangeImpl.isCanceled.

Returns true if this exchange was canceled.

pack-priv Response
newResponse(HttpHeaders responseHeaders, int responseCode)

Implements abstract jdk.internal.net.http.Http3Stream.newResponse.

Called to create a new Response object for the newly receive response headers and response status code.

pack-priv void
pack-priv void
onPollException(QuicStreamReader reader, IOException io)

Implements abstract jdk.internal.net.http.Http3Stream.onPollException.

Called when an exception is thrown by reader::poll when called from processQuicData.

pack-priv void
onProtocolError(IOException cause)

Implements abstract jdk.internal.net.http.ExchangeImpl.onProtocolError.

Invoked whenever there is a (HTTP) protocol error when dealing with the response from the server.

pack-priv void
onReaderReset()

Implements abstract jdk.internal.net.http.Http3Stream.onReaderReset.

Called when processQuicData detects that the reader has been reset.

pack-priv void
private void
pack-priv long
pack-priv void
pushResponseData(ConcurrentLinkedQueue<List<ByteBuffer>> responseData)

Implements abstract jdk.internal.net.http.Http3Stream.pushResponseData.

Push response data to the response body subscriber if allowed by the subscription state.

pack-priv CompletableFuture<T>
readBodyAsync(HttpResponse.BodyHandler<T> handler, boolean returnConnectionToPool, Executor executor)

Implements abstract jdk.internal.net.http.ExchangeImpl.readBodyAsync.

pack-priv void
receiveHeaders(HeadersFrame headers, List<ByteBuffer> payload)

Implements abstract jdk.internal.net.http.Http3Stream.receiveHeaders.

Called when new payload data is received by processQuicData for a given header frame.

pack-priv void
receivePushPromiseFrame(PushPromiseFrame ppf, List<ByteBuffer> payload)

Implements abstract jdk.internal.net.http.Http3Stream.receivePushPromiseFrame.

Called when new payload data is received by processQuicData for a given push promise frame.

pack-priv CompletableFuture<T>
private void
pack-priv void
released()

Implements abstract jdk.internal.net.http.ExchangeImpl.released.

Called when the exchange is released, so that cleanup actions may be performed - such as deregistering callbacks.

pack-priv CompletableFuture<HttpResponse<T>>
pack-priv void
private void
pack-priv CompletableFuture<ExchangeImpl<T>>
sendBodyAsync()

Implements abstract jdk.internal.net.http.ExchangeImpl.sendBodyAsync.

Sends a request body, after request headers have been sent.

pack-priv CompletableFuture<ExchangeImpl<T>>
pack-priv void
pack-priv long
streamId()

Implements abstract jdk.internal.net.http.Http3Stream.streamId.

Returns the Quic stream id for this exchange (request/response or push response).

private void
Inherited from jdk.internal.net.http.Http3Stream:
checkInterimResponseCountExceededconnectionErrorhandleResponseprocessQuicDatareadingPausedreceivedQuicBytesswitchReadingPaused

Field Detail

closedback to summary
pack-priv volatile boolean closed
connectionback to summary
private final Http3Connection connection
dbgTagback to summary
private String dbgTag
debugback to summary
private final Logger debug

Hides jdk.internal.net.http.ExchangeImpl.debug.

errorRefback to summary
private final AtomicReference<Throwable> errorRef
frameOrderVerifierback to summary
private final H3FrameOrderVerifier frameOrderVerifier
framesDecoderback to summary
private final FramesDecoder framesDecoder
parentback to summary
private final Http3ExchangeImpl<T> parent
pendingResponseSubscriberback to summary
pack-priv volatile HttpResponse.BodySubscriber<T> pendingResponseSubscriber
pushCFback to summary
private final CompletableFuture<Response> pushCF
pushHandlerback to summary
private final HttpResponse.BodyHandler<T> pushHandler
pushIdback to summary
private final long pushId
pushManagerback to summary
private final Http3PushManager pushManager
qpackDecoderback to summary
private final Decoder qpackDecoder
readerback to summary
private final QuicStreamReader reader
readSchedulerback to summary
private final SequentialScheduler readScheduler
respHeaderFrameReaderback to summary
private final HeaderFrameReader respHeaderFrameReader
respHeadersBuilderback to summary
private final HttpHeadersBuilder respHeadersBuilder
respHeadersConsumerback to summary
private final Http3PushPromiseStream<T>.PushRespHeadersConsumer respHeadersConsumer
responseback to summary
pack-priv volatile Response response
responseBodyCFback to summary
pack-priv volatile CompletableFuture<T> responseBodyCF
responseCFback to summary
private final CompletableFuture<HttpResponse<T>> responseCF
responseCodeback to summary
pack-priv volatile int responseCode
responseReceivedback to summary
pack-priv volatile boolean responseReceived
responseSubscriberback to summary
pack-priv volatile HttpResponse.BodySubscriber<T> responseSubscriber
stateLockback to summary
private final ReentrantLock stateLock
stopRequestedback to summary
pack-priv volatile boolean stopRequested
streamback to summary
private final QuicReceiverStream stream
userSubscriptionback to summary
pack-priv final SubscriptionBase userSubscription

Constructor Detail

Http3PushPromiseStreamback to summary
pack-priv Http3PushPromiseStream(Exchange<T> exchange, final Http3Connection connection, final Http3PushManager pushManager, final QuicReceiverStream stream, final CompletableFuture<HttpResponse<T>> responseCF, final HttpResponse.BodyHandler<T> pushHandler, Http3ExchangeImpl<T> parent, long pushId)

Method Detail

cancelback to summary
pack-priv void cancel()

Implements abstract jdk.internal.net.http.ExchangeImpl.cancel.

Doc from jdk.internal.net.http.ExchangeImpl.cancel.

Cancels a request. Not currently exposed through API.

Annotations
@Override
cancelback to summary
pack-priv void cancel(IOException cause)

Implements abstract jdk.internal.net.http.ExchangeImpl.cancel.

Doc from jdk.internal.net.http.ExchangeImpl.cancel.

Cancels a request with a cause. Not currently exposed through API.

Annotations
@Override
cancelImplback to summary
pack-priv void cancelImpl(Throwable e, Http3Error error)

Implements abstract jdk.internal.net.http.Http3Stream.cancelImpl.

Doc from jdk.internal.net.http.Http3Stream.cancelImpl.

Cancel the stream exchange on error

Annotations
@Override
closeback to summary
pack-priv void close()
completedback to summary
pack-priv void completed()

Implements abstract jdk.internal.net.http.ExchangeImpl.completed.

Doc from jdk.internal.net.http.ExchangeImpl.completed.

Called when the exchange is completed, so that cleanup actions may be performed - such as deregistering callbacks. Typically, completed is called at the end of the exchange, when the final response body has been received (or an error has caused the completion of the exchange).

Annotations
@Override
completeResponseback to summary
pack-priv void completeResponse(Response r)

Implements abstract jdk.internal.net.http.Http3Stream.completeResponse.

Doc from jdk.internal.net.http.Http3Stream.completeResponse.

Called at the end of handleResponse, to propagate the response to the multi exchange.

completeResponseExceptionallyback to summary
pack-priv void completeResponseExceptionally(Throwable t)

same as above but for errors

connectionback to summary
pack-priv HttpQuicConnection connection()

Implements abstract jdk.internal.net.http.ExchangeImpl.connection.

Doc from jdk.internal.net.http.ExchangeImpl.connection.

Returns the HttpConnection instance to which this exchange is assigned.

Annotations
@Override
connectionErrorback to summary
pack-priv void connectionError(Throwable throwable, long errorCode, String errMsg)

Implements abstract jdk.internal.net.http.Http3Stream.connectionError.

Doc from jdk.internal.net.http.Http3Stream.connectionError.

Notify of a connection error. The implementation of this method is supposed to close all exchanges, cancel all push promises, and close the connection.

createResponseSubscriberback to summary
pack-priv Http3PushPromiseStream<T>.Http3PushStreamResponseSubscriber<T> createResponseSubscriber(HttpResponse.BodyHandler<T> handler, HttpResponse.ResponseInfo response)

Overrides jdk.internal.net.http.ExchangeImpl.createResponseSubscriber.

Doc from jdk.internal.net.http.ExchangeImpl.createResponseSubscriber.

Creates and wraps an HttpResponse.BodySubscriber from a HttpResponse.BodyHandler for the given ResponseInfo. An HttpBodySubscriberWrapper wraps a response body subscriber and makes sure its completed/onError methods are called only once, and that its onSusbscribe is called before onError. This is useful when errors occur asynchronously, and most typically when the error occurs before the BodySubscriber has subscribed.

dbgTagback to summary
pack-priv String dbgTag()
getCancelCauseback to summary
pack-priv Throwable getCancelCause()

Implements abstract jdk.internal.net.http.ExchangeImpl.getCancelCause.

Doc from jdk.internal.net.http.ExchangeImpl.getCancelCause.

Returns the cause for which this exchange was canceled, if available.

Annotations
@Override
getPushHandlerback to summary
pack-priv HttpResponse.BodyHandler<T> getPushHandler()
getResponseAsyncback to summary
pack-priv CompletableFuture<Response> getResponseAsync(Executor executor)

Implements abstract jdk.internal.net.http.ExchangeImpl.getResponseAsync.

Doc from jdk.internal.net.http.ExchangeImpl.getResponseAsync.

Gets the response headers. Completes before body is read.

Annotations
@Override
handleResponseback to summary
protected void handleResponse()
ignoreBodyback to summary
pack-priv CompletableFuture<Void> ignoreBody()

Implements abstract jdk.internal.net.http.ExchangeImpl.ignoreBody.

Doc from jdk.internal.net.http.ExchangeImpl.ignoreBody.

Ignore/consume the body.

Annotations
@Override
isCanceledback to summary
pack-priv boolean isCanceled()

Implements abstract jdk.internal.net.http.ExchangeImpl.isCanceled.

Doc from jdk.internal.net.http.ExchangeImpl.isCanceled.

Returns true if this exchange was canceled.

Annotations
@Override
newResponseback to summary
pack-priv Response newResponse(HttpHeaders responseHeaders, int responseCode)

Implements abstract jdk.internal.net.http.Http3Stream.newResponse.

Doc from jdk.internal.net.http.Http3Stream.newResponse.

Called to create a new Response object for the newly receive response headers and response status code. This method is called from handleResponse, after the status code and headers have been validated.

Annotations
@Override
nullBodyback to summary
pack-priv void nullBody(HttpResponse<T> resp, Throwable t)

Overrides jdk.internal.net.http.ExchangeImpl.nullBody.

onPollExceptionback to summary
pack-priv void onPollException(QuicStreamReader reader, IOException io)

Implements abstract jdk.internal.net.http.Http3Stream.onPollException.

Doc from jdk.internal.net.http.Http3Stream.onPollException.

Called when an exception is thrown by reader::poll when called from processQuicData. This is typically only used for logging purposes.

Annotations
@Override
onProtocolErrorback to summary
pack-priv void onProtocolError(IOException cause)

Implements abstract jdk.internal.net.http.ExchangeImpl.onProtocolError.

Doc from jdk.internal.net.http.ExchangeImpl.onProtocolError.

Invoked whenever there is a (HTTP) protocol error when dealing with the response from the server. The implementations of ExchangeImpl are then expected to take necessary action that is expected by the corresponding specifications whenever a protocol error happens. For example, in HTTP/1.1, such protocol error would result in the connection being closed.

Annotations
@Override
onReaderResetback to summary
pack-priv void onReaderReset()

Implements abstract jdk.internal.net.http.Http3Stream.onReaderReset.

Doc from jdk.internal.net.http.Http3Stream.onReaderReset.

Called when processQuicData detects that the reader has been reset. This method should do the appropriate garbage collection, possibly closing the exchange or the connection if needed, and closing the read scheduler.

Annotations
@Override
onSubscriptionErrorback to summary
pack-priv void onSubscriptionError(Throwable t)
processQuicDataback to summary
private void processQuicData()
pushIdback to summary
pack-priv long pushId()
pushResponseDataback to summary
pack-priv void pushResponseData(ConcurrentLinkedQueue<List<ByteBuffer>> responseData)

Implements abstract jdk.internal.net.http.Http3Stream.pushResponseData.

Doc from jdk.internal.net.http.Http3Stream.pushResponseData.

Push response data to the response body subscriber if allowed by the subscription state.

readBodyAsyncback to summary
pack-priv CompletableFuture<T> readBodyAsync(HttpResponse.BodyHandler<T> handler, boolean returnConnectionToPool, Executor executor)

Implements abstract jdk.internal.net.http.ExchangeImpl.readBodyAsync.

Annotations
@Override
receiveHeadersback to summary
pack-priv void receiveHeaders(HeadersFrame headers, List<ByteBuffer> payload) throws IOException

Implements abstract jdk.internal.net.http.Http3Stream.receiveHeaders.

Doc from jdk.internal.net.http.Http3Stream.receiveHeaders.

Called when new payload data is received by processQuicData for a given header frame.

Any exception thrown here will be rethrown by processQuicData

Exceptions
IOException:
if an error is detected
receivePushPromiseFrameback to summary
pack-priv void receivePushPromiseFrame(PushPromiseFrame ppf, List<ByteBuffer> payload) throws IOException

Implements abstract jdk.internal.net.http.Http3Stream.receivePushPromiseFrame.

Doc from jdk.internal.net.http.Http3Stream.receivePushPromiseFrame.

Called when new payload data is received by processQuicData for a given push promise frame.

Any exception thrown here will be rethrown by processQuicData

Annotations
@Override
Exceptions
IOException:
if an error is detected
receiveResponseBodyback to summary
pack-priv CompletableFuture<T> receiveResponseBody(HttpResponse.BodySubscriber<T> bodySubscriber, Executor executor)
registerResponseSubscriberback to summary
private void registerResponseSubscriber(Http3PushPromiseStream<T>.Http3PushStreamResponseSubscriber<?> subscriber)
releasedback to summary
pack-priv void released()

Implements abstract jdk.internal.net.http.ExchangeImpl.released.

Doc from jdk.internal.net.http.ExchangeImpl.released.

Called when the exchange is released, so that cleanup actions may be performed - such as deregistering callbacks. Typically released is called during upgrade, when an HTTP/2 stream takes over from an Http1Exchange, or when a new exchange is created during a multi exchange before the final response body was received.

Annotations
@Override
responseCFback to summary
pack-priv CompletableFuture<HttpResponse<T>> responseCF()
responseReceivedback to summary
pack-priv void responseReceived()
responseReceived0back to summary
private void responseReceived0()
sendBodyAsyncback to summary
pack-priv CompletableFuture<ExchangeImpl<T>> sendBodyAsync()

Implements abstract jdk.internal.net.http.ExchangeImpl.sendBodyAsync.

Doc from jdk.internal.net.http.ExchangeImpl.sendBodyAsync.

Sends a request body, after request headers have been sent.

Annotations
@Override
sendHeadersAsyncback to summary
pack-priv CompletableFuture<ExchangeImpl<T>> sendHeadersAsync()

Implements abstract jdk.internal.net.http.ExchangeImpl.sendHeadersAsync.

Annotations
@Override
startback to summary
pack-priv void start()
streamIdback to summary
pack-priv long streamId()

Implements abstract jdk.internal.net.http.Http3Stream.streamId.

Doc from jdk.internal.net.http.Http3Stream.streamId.

Returns the Quic stream id for this exchange (request/response or push response).

Annotations
@Override
unregisterResponseSubscriberback to summary
private void unregisterResponseSubscriber(Http3PushPromiseStream<T>.Http3PushStreamResponseSubscriber<?> subscriber)
jdk.internal.net.http back to summary

pack-priv final Class Http3PushPromiseStream.Http3PushStreamResponseSubscriber<U>

extends HttpBodySubscriberWrapper<U>
Class Inheritance

Field Summary

Inherited from jdk.internal.net.http.common.HttpBodySubscriberWrapper:
COMPARE_BY_IDNOP

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
protected void
register()

Overrides jdk.internal.net.http.common.HttpBodySubscriberWrapper.register.

This method can be implemented by subclasses to perform registration actions.

protected void
unregister()

Overrides jdk.internal.net.http.common.HttpBodySubscriberWrapper.unregister.

This method can be implemented by subclasses to perform unregistration actions.

Inherited from jdk.internal.net.http.common.HttpBodySubscriberWrapper:
cancelledcompletecompletedgetBodylogCompleteneedsExecutoronCancelonCompleteonErroronNextonSubscribeonTerminationregisteredsubscribedtryRegistertryUnregisterunregistered

Constructor Detail

Http3PushStreamResponseSubscriberback to summary
pack-priv Http3PushStreamResponseSubscriber(HttpResponse.BodySubscriber<U> subscriber)

Method Detail

registerback to summary
protected void register()

Overrides jdk.internal.net.http.common.HttpBodySubscriberWrapper.register.

Doc from jdk.internal.net.http.common.HttpBodySubscriberWrapper.register.

This method can be implemented by subclasses to perform registration actions. It will not be called if already registered or unregistered.

Annotations
@Override
unregisterback to summary
protected void unregister()

Overrides jdk.internal.net.http.common.HttpBodySubscriberWrapper.unregister.

Doc from jdk.internal.net.http.common.HttpBodySubscriberWrapper.unregister.

This method can be implemented by subclasses to perform unregistration actions. It will not be called if not already registered, or already unregistered.

Annotations
@Override
jdk.internal.net.http back to summary

private final Class Http3PushPromiseStream.PushRespHeadersConsumer

extends Http3Stream<T>.StreamHeadersConsumer
Class Inheritance

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected String
pack-priv String
pack-priv HeaderFrameReader
pack-priv HttpHeadersBuilder
pack-priv void
pack-priv Decoder
pack-priv void
public long
streamId()

Implements jdk.internal.net.http.qpack.DecodingCallback.streamId.

Returns request/response stream id or push stream id associated with a decoding callback.

Inherited from jdk.internal.net.http.Http3Stream.StreamHeadersConsumer:
hasErroronCompleteonConnectionErroronDecodedonStreamErrorreset

Constructor Detail

PushRespHeadersConsumerback to summary
public PushRespHeadersConsumer()

Method Detail

formatMessageback to summary
protected String formatMessage(String message, String header)

Overrides jdk.internal.net.http.common.ValidatingHeadersConsumer.formatMessage.

Annotations
@Override
headerFieldTypeback to summary
pack-priv String headerFieldType()

Overrides jdk.internal.net.http.Http3Stream.StreamHeadersConsumer.headerFieldType.

Annotations
@Override
headerFrameReaderback to summary
pack-priv HeaderFrameReader headerFrameReader()

Implements abstract jdk.internal.net.http.Http3Stream.StreamHeadersConsumer.headerFrameReader.

Annotations
@Override
headersBuilderback to summary
pack-priv HttpHeadersBuilder headersBuilder()

Implements abstract jdk.internal.net.http.Http3Stream.StreamHeadersConsumer.headersBuilder.

Annotations
@Override
headersCompletedback to summary
pack-priv void headersCompleted()

Implements abstract jdk.internal.net.http.Http3Stream.StreamHeadersConsumer.headersCompleted.

Annotations
@Override
qpackDecoderback to summary
pack-priv Decoder qpackDecoder()

Implements abstract jdk.internal.net.http.Http3Stream.StreamHeadersConsumer.qpackDecoder.

Annotations
@Override
resetDoneback to summary
pack-priv void resetDone()

Implements abstract jdk.internal.net.http.Http3Stream.StreamHeadersConsumer.resetDone.

streamIdback to summary
public long streamId()

Implements jdk.internal.net.http.qpack.DecodingCallback.streamId.

Doc from jdk.internal.net.http.qpack.DecodingCallback.streamId.

Returns request/response stream id or push stream id associated with a decoding callback.

Annotations
@Override