Class AbstractListenerWriteFlushProcessor<T>
- java.lang.Object
- org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor<T>
- Type Parameters:
T
- the type of element signaled to theSubscriber
- All Implemented Interfaces:
org.reactivestreams.Processor<org.reactivestreams.Publisher<? extends T>,Void>
,org.reactivestreams.Publisher<Void>
,org.reactivestreams.Subscriber<org.reactivestreams.Publisher<? extends T>>
public abstract class AbstractListenerWriteFlushProcessor<T> extends Object implements org.reactivestreams.Processor<org.reactivestreams.Publisher<? extends T>,Void>
An alternative toAbstractListenerWriteProcessor
but instead writing aPublisher<Publisher<T>>
with flush boundaries enforces after the completion of each nested Publisher.- Since:
- 5.0
- Author:
- Arjen Poutsma, Violeta Georgieva, Rossen Stoyanchev
Field Summary
Fields Modifier and Type Field Description protected static Log
rsWriteFlushLogger
Special logger for debugging Reactive Streams signals.
Constructor Summary
Constructors Constructor Description AbstractListenerWriteFlushProcessor()
AbstractListenerWriteFlushProcessor(String logPrefix)
Create an instance with the given log prefix.
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
cancel()
Invoked during an error or completion callback from the underlying container to cancel the upstream subscription.protected abstract org.reactivestreams.Processor<? super T,Void>
createWriteProcessor()
Create a new processor for the current flush boundary.protected abstract void
flush()
Flush the output if ready, or otherwiseisFlushPending()
should return true after.protected void
flushingFailed(Throwable t)
Invoked when an error happens while flushing.String
getLogPrefix()
Create an instance with the given log prefix.protected abstract boolean
isFlushPending()
Whether flushing is pending.protected abstract boolean
isWritePossible()
Whether writing/flushing is possible.void
onComplete()
Completion signal from the upstream, write Publisher.void
onError(Throwable ex)
Error signal from the upstream, write Publisher.protected void
onFlushPossible()
Invoked when flushing is possible, either in the same thread after a check viaisWritePossible()
, or as a callback from the underlying container.void
onNext(org.reactivestreams.Publisher<? extends T> publisher)
void
onSubscribe(org.reactivestreams.Subscription subscription)
void
subscribe(org.reactivestreams.Subscriber<? super Void> subscriber)
Field Detail
rsWriteFlushLogger
protected static final Log rsWriteFlushLogger
Special logger for debugging Reactive Streams signals.- See Also:
LogDelegateFactory.getHiddenLog(Class)
,AbstractListenerReadPublisher.rsReadLogger
,AbstractListenerWriteProcessor.rsWriteLogger
,WriteResultPublisher.rsWriteResultLogger
Constructor Detail
AbstractListenerWriteFlushProcessor
public AbstractListenerWriteFlushProcessor()
AbstractListenerWriteFlushProcessor
public AbstractListenerWriteFlushProcessor(String logPrefix)
Create an instance with the given log prefix.- Since:
- 5.1
Method Detail
getLogPrefix
public String getLogPrefix()
Create an instance with the given log prefix.- Since:
- 5.1
onSubscribe
public final void onSubscribe(org.reactivestreams.Subscription subscription)
- Specified by:
onSubscribe
in interfaceorg.reactivestreams.Subscriber<T>
onNext
public final void onNext(org.reactivestreams.Publisher<? extends T> publisher)
- Specified by:
onNext
in interfaceorg.reactivestreams.Subscriber<T>
onError
public final void onError(Throwable ex)
Error signal from the upstream, write Publisher. This is also used by sub-classes to delegate error notifications from the container.- Specified by:
onError
in interfaceorg.reactivestreams.Subscriber<T>
onComplete
public final void onComplete()
Completion signal from the upstream, write Publisher. This is also used by sub-classes to delegate completion notifications from the container.- Specified by:
onComplete
in interfaceorg.reactivestreams.Subscriber<T>
onFlushPossible
protected final void onFlushPossible()
Invoked when flushing is possible, either in the same thread after a check viaisWritePossible()
, or as a callback from the underlying container.
cancel
protected void cancel()
Invoked during an error or completion callback from the underlying container to cancel the upstream subscription.
subscribe
public final void subscribe(org.reactivestreams.Subscriber<? super Void> subscriber)
- Specified by:
subscribe
in interfaceorg.reactivestreams.Publisher<T>
createWriteProcessor
protected abstract org.reactivestreams.Processor<? super T,Void> createWriteProcessor()
Create a new processor for the current flush boundary.
isWritePossible
protected abstract boolean isWritePossible()
Whether writing/flushing is possible.
flush
protected abstract void flush() throws IOException
Flush the output if ready, or otherwiseisFlushPending()
should return true after.This is primarily for the Servlet non-blocking I/O API where flush cannot be called without a readyToWrite check.
- Throws:
IOException
isFlushPending
protected abstract boolean isFlushPending()
Whether flushing is pending.This is primarily for the Servlet non-blocking I/O API where flush cannot be called without a readyToWrite check.
flushingFailed
protected void flushingFailed(Throwable t)
Invoked when an error happens while flushing. Sub-classes may choose to ignore this if they know the underlying API will provide an error notification in a container thread.Defaults to no-op.