org.springframework.http.server.reactive

Class AbstractListenerReadPublisher<T>

  • java.lang.Object
    • org.springframework.http.server.reactive.AbstractListenerReadPublisher<T>
  • Type Parameters:
    T - the type of element signaled
    All Implemented Interfaces:
    org.reactivestreams.Publisher<T>


    public abstract class AbstractListenerReadPublisher<T>
    extends java.lang.Object
    implements org.reactivestreams.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 3.1 non-blocking I/O and Undertow XNIO as well as handling incoming WebSocket messages with standard Java WebSocket (JSR-356), Jetty, and Undertow.

    Since:
    5.0
    Author:
    Arjen Poutsma, Violeta Georgieva, Rossen Stoyanchev
    • Field Summary

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

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method and Description
      protected abstract void checkOnDataAvailable()
      Check if data is available and either call onDataAvailable() immediately or schedule a notification.
      java.lang.String getLogPrefix()
      Return the configured log message prefix.
      void onAllDataRead()
      Sub-classes can call this method to delegate a contain notification when all data has been read.
      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.
      void onError(java.lang.Throwable ex)
      Sub-classes can call this to delegate container error notifications.
      protected abstract T read()
      Read once from the input, if possible.
      protected abstract void readingPaused()
      Invoked when reading is paused due to a lack of demand.
      void subscribe(org.reactivestreams.Subscriber<? super T> subscriber) 
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractListenerReadPublisher

        public AbstractListenerReadPublisher()
      • AbstractListenerReadPublisher

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

      • getLogPrefix

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

        public void subscribe(org.reactivestreams.Subscriber<? super T> subscriber)
        Specified by:
        subscribe in interface org.reactivestreams.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()
        Sub-classes can call this method to delegate a contain notification when all data has been read.
      • onError

        public final void onError(java.lang.Throwable ex)
        Sub-classes can call this to delegate container error notifications.
      • 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 java.io.IOException
        Read once from the input, if possible.
        Returns:
        the item that was read; or null
        Throws:
        java.io.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