Class AbstractListenerReadPublisher<T>
java.lang.Object
org.springframework.http.server.reactive.AbstractListenerReadPublisher<T>
- Type Parameters:
T
- the type of element signaled
- All Implemented Interfaces:
Publisher<T>
Abstract base class for
Publisher
implementations that bridge between
event-listener read APIs and Reactive Streams.
Specifically a base class for reading from the HTTP request body with Servlet non-blocking I/O and Undertow XNIO as well as handling incoming WebSocket messages with standard Jakarta WebSocket (JSR-356), Jetty, and Undertow.
- Since:
- 5.0
- Author:
- Arjen Poutsma, Violeta Georgieva, Rossen Stoyanchev
-
Field Summary
Modifier and TypeFieldDescriptionprotected static Log
Special logger for debugging Reactive Streams signals. -
Constructor Summary
ConstructorDescriptionAbstractListenerReadPublisher
(String logPrefix) Create an instance with the given log prefix. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract void
Check if data is available and either callonDataAvailable()
immediately or schedule a notification.protected abstract void
Invoked after an I/O read error from the underlying server or after a cancellation signal from the downstream consumer to allow subclasses to discard any current cached data they might have.Return the configured log message prefix.void
Subclasses can call this method to signal onComplete, delegating a notification from the container when all data has been read.final void
Invoked when reading is possible, either in the same thread after a check viacheckOnDataAvailable()
, or as a callback from the underlying container.final void
Subclasses can call this to signal onError, delegating a notification from the container for an error.protected abstract T
read()
Read once from the input, if possible.protected abstract void
Invoked when reading is paused due to a lack of demand.void
subscribe
(Subscriber<? super T> subscriber)
-
Field Details
-
rsReadLogger
Special logger for debugging Reactive Streams signals.- See Also:
-
LogDelegateFactory.getHiddenLog(Class)
AbstractListenerWriteProcessor.rsWriteLogger
AbstractListenerWriteFlushProcessor.rsWriteFlushLogger
WriteResultPublisher.rsWriteResultLogger
-
-
Constructor Details
-
AbstractListenerReadPublisher
public AbstractListenerReadPublisher() -
AbstractListenerReadPublisher
Create an instance with the given log prefix.- Since:
- 5.1
-
-
Method Details
-
getLogPrefix
Return the configured log message prefix.- Since:
- 5.1
-
subscribe
-
onDataAvailable
public final void onDataAvailable()Invoked when reading is possible, either in the same thread after a check viacheckOnDataAvailable()
, or as a callback from the underlying container. -
onAllDataRead
public void onAllDataRead()Subclasses can call this method to signal onComplete, delegating a notification from the container when all data has been read. -
onError
Subclasses can call this to signal onError, delegating a notification from the container for an error. -
checkOnDataAvailable
protected abstract void checkOnDataAvailable()Check if data is available and either callonDataAvailable()
immediately or schedule a notification. -
read
Read once from the input, if possible.- Returns:
- the item that was read; or
null
- Throws:
IOException
-
readingPaused
protected abstract void readingPaused()Invoked when reading is paused due to a lack of demand.Note: This method is guaranteed not to compete with
checkOnDataAvailable()
so it can be used to safely suspend reading, if the underlying API supports it, i.e. without competing with an implicit call to resume viacheckOnDataAvailable()
.- Since:
- 5.0.2
-
discardData
protected abstract void discardData()Invoked after an I/O read error from the underlying server or after a cancellation signal from the downstream consumer to allow subclasses to discard any current cached data they might have.- Since:
- 5.0.11
-