Class HttpContent

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, Callback, Invocable

    public class HttpContent
    extends java.lang.Object
    implements Callback, java.io.Closeable
    HttpContent is a stateful, linear representation of the request content provided by a ContentProvider that can be traversed one-way to obtain content buffers to send to an HTTP server.

    HttpContent offers the notion of a one-way cursor to traverse the content. The cursor starts in a virtual "before" position and can be advanced using advance() until it reaches a virtual "after" position where the content is fully consumed.

          +---+  +---+  +---+  +---+  +---+
          |   |  |   |  |   |  |   |  |   |
          +---+  +---+  +---+  +---+  +---+
       ^           ^                    ^    ^
       |           | --> advance()      |    |
       |           |                  last   |
       |           |                         |
     before        |                        after
                   |
                current
     
    At each valid (non-before and non-after) cursor position, HttpContent provides the following state:
    • the buffer containing the content to send, via getByteBuffer()
    • a copy of the content buffer that can be used for notifications, via getContent()
    • whether the buffer to write is the last one, via isLast()
    HttpContent may not have content, if the related ContentProvider is null, and this is reflected by hasContent().

    HttpContent may have deferred content, in which case advance() moves the cursor to a position that provides null buffer and content. When the deferred content is available, a further call to advance() will move the cursor to a position that provides non null buffer and content.

    • Method Detail

      • hasContent

        public boolean hasContent()
        Returns:
        whether there is any content at all
      • isLast

        public boolean isLast()
        Returns:
        whether the cursor points to the last content
      • getByteBuffer

        public java.nio.ByteBuffer getByteBuffer()
        Returns:
        the ByteBuffer containing the content at the cursor's position
      • getContent

        public java.nio.ByteBuffer getContent()
        Returns:
        a ByteBuffer.slice() of getByteBuffer() at the cursor's position
      • advance

        public boolean advance()
        Advances the cursor to the next block of content.

        The next block of content may be valid (which yields a non-null buffer returned by getByteBuffer()), but may also be deferred (which yields a null buffer returned by getByteBuffer()).

        If the block of content pointed by the new cursor position is valid, this method returns true.

        Returns:
        true if there is content at the new cursor's position, false otherwise.
      • isConsumed

        public boolean isConsumed()
        Returns:
        whether the cursor has been advanced past the last position.
      • failed

        public void failed​(java.lang.Throwable x)
        Description copied from interface: Callback

        Callback invoked when the operation fails.

        Specified by:
        failed in interface Callback
        Parameters:
        x - the reason for the operation failure
      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object