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>

public abstract class AbstractListenerReadPublisher<T> extends Object implements 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

    Fields
    Modifier and Type
    Field
    Description
    protected static Log
    Special logger for debugging Reactive Streams signals.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    Create an instance with the given log prefix.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected abstract void
    Check if data is available and either call onDataAvailable() 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 via checkOnDataAvailable(), 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 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)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • AbstractListenerReadPublisher

      public AbstractListenerReadPublisher()
    • AbstractListenerReadPublisher

      public AbstractListenerReadPublisher(String logPrefix)
      Create an instance with the given log prefix.
      Since:
      5.1
  • Method Details

    • getLogPrefix

      public String getLogPrefix()
      Return the configured log message prefix.
      Since:
      5.1
    • subscribe

      public void subscribe(Subscriber<? super T> subscriber)
      Specified by:
      subscribe in interface Publisher<T>
    • onDataAvailable

      public final void onDataAvailable()
      Invoked when reading is possible, either in the same thread after a check via checkOnDataAvailable(), 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

      public final void onError(Throwable ex)
      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 call onDataAvailable() immediately or schedule a notification.
    • read

      @Nullable protected abstract T read() throws IOException
      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 via checkOnDataAvailable().

      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