Class ChunkedInput<T>

  • Type Parameters:
    T - chunk type.
    All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class ChunkedInput<T>
    extends javax.ws.rs.core.GenericType<T>
    implements java.io.Closeable
    Response entity type used for receiving messages in "typed" chunks.

    This data type is useful for consuming partial responses from large or continuous data input streams.

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected ChunkedInput​(java.lang.reflect.Type chunkType, java.io.InputStream inputStream, java.lang.annotation.Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<java.lang.String,​java.lang.String> headers, MessageBodyWorkers messageBodyWorkers, PropertiesDelegate propertiesDelegate)
      Package-private constructor used by the ChunkedInputReader.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()  
      static ChunkParser createMultiParser​(java.lang.String... boundaries)
      Create a new chunk multi-parser that will split the response entity input stream based on multiple fixed boundary strings.
      static ChunkParser createParser​(byte[] boundary)
      Create new chunk parser that will split the response entity input stream based on a fixed boundary sequence of bytes.
      static ChunkParser createParser​(java.lang.String boundary)
      Create new chunk parser that will split the response entity input stream based on a fixed boundary string.
      javax.ws.rs.core.MediaType getChunkType()
      Get chunk data media type.
      ChunkParser getParser()
      Get the underlying chunk parser.
      boolean isClosed()
      Check if the chunked input has been closed.
      T read()
      Read next chunk from the response stream and convert it to a Java instance using the chunk media type.
      void setChunkType​(java.lang.String mediaType)
      Set custom chunk data media type from a string value.
      void setChunkType​(javax.ws.rs.core.MediaType mediaType)
      Set custom chunk data media type.
      void setParser​(ChunkParser parser)
      Set new chunk parser.
      • Methods inherited from class javax.ws.rs.core.GenericType

        equals, forInstance, getRawType, getType, hashCode, toString
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • LOGGER

        private static final java.util.logging.Logger LOGGER
      • closed

        private final java.util.concurrent.atomic.AtomicBoolean closed
      • mediaType

        private javax.ws.rs.core.MediaType mediaType
      • inputStream

        private final java.io.InputStream inputStream
      • annotations

        private final java.lang.annotation.Annotation[] annotations
      • headers

        private final javax.ws.rs.core.MultivaluedMap<java.lang.String,​java.lang.String> headers
    • Constructor Detail

      • ChunkedInput

        protected ChunkedInput​(java.lang.reflect.Type chunkType,
                               java.io.InputStream inputStream,
                               java.lang.annotation.Annotation[] annotations,
                               javax.ws.rs.core.MediaType mediaType,
                               javax.ws.rs.core.MultivaluedMap<java.lang.String,​java.lang.String> headers,
                               MessageBodyWorkers messageBodyWorkers,
                               PropertiesDelegate propertiesDelegate)
        Package-private constructor used by the ChunkedInputReader.
        Parameters:
        chunkType - chunk type.
        inputStream - response input stream.
        annotations - annotations associated with response entity.
        mediaType - response entity media type.
        headers - response headers.
        messageBodyWorkers - message body workers.
        propertiesDelegate - properties delegate for this request/response.
    • Method Detail

      • createParser

        public static ChunkParser createParser​(java.lang.String boundary)
        Create new chunk parser that will split the response entity input stream based on a fixed boundary string.
        Parameters:
        boundary - chunk boundary.
        Returns:
        new fixed boundary string-based chunk parser.
      • createParser

        public static ChunkParser createParser​(byte[] boundary)
        Create new chunk parser that will split the response entity input stream based on a fixed boundary sequence of bytes.
        Parameters:
        boundary - chunk boundary.
        Returns:
        new fixed boundary sequence-based chunk parser.
      • createMultiParser

        public static ChunkParser createMultiParser​(java.lang.String... boundaries)
        Create a new chunk multi-parser that will split the response entity input stream based on multiple fixed boundary strings.
        Parameters:
        boundaries - chunk boundaries.
        Returns:
        new fixed boundary string-based chunk parser.
      • getParser

        public ChunkParser getParser()
        Get the underlying chunk parser.

        Note: Access to internal chunk parser is not a thread-safe operation and has to be explicitly synchronized in case the chunked input is used from multiple threads.

        Returns:
        underlying chunk parser.
      • setParser

        public void setParser​(ChunkParser parser)
        Set new chunk parser.

        Note: Access to internal chunk parser is not a thread-safe operation and has to be explicitly synchronized in case the chunked input is used from multiple threads.

        Parameters:
        parser - new chunk parser.
      • getChunkType

        public javax.ws.rs.core.MediaType getChunkType()
        Get chunk data media type.

        Default chunk data media type is derived from the value of the response "Content-Type" header field. This default value may be manually overridden by setting a custom non-null chunk media type value.

        Note: Access to internal chunk media type is not a thread-safe operation and has to be explicitly synchronized in case the chunked input is used from multiple threads.

        Returns:
        media type specific to each chunk of data.
      • setChunkType

        public void setChunkType​(javax.ws.rs.core.MediaType mediaType)
                          throws java.lang.IllegalArgumentException
        Set custom chunk data media type.

        By default, chunk data media type is derived from the value of the response "Content-Type" header field. Using this methods will override the default chunk media type value and set it to a custom non-null chunk media type. Once this method is invoked, all subsequent chunk reads will use the newly set chunk media type when selecting the proper MessageBodyReader for chunk de-serialization.

        Note: Access to internal chunk media type is not a thread-safe operation and has to be explicitly synchronized in case the chunked input is used from multiple threads.

        Parameters:
        mediaType - custom chunk data media type. Must not be null.
        Throws:
        java.lang.IllegalArgumentException - in case the mediaType is null.
      • setChunkType

        public void setChunkType​(java.lang.String mediaType)
                          throws java.lang.IllegalArgumentException
        Set custom chunk data media type from a string value.

        Note: Access to internal chunk media type is not a thread-safe operation and has to be explicitly synchronized in case the chunked input is used from multiple threads.

        Parameters:
        mediaType - custom chunk data media type. Must not be null.
        Throws:
        java.lang.IllegalArgumentException - in case the mediaType cannot be parsed into a valid MediaType instance or is null.
        See Also:
        setChunkType(javax.ws.rs.core.MediaType)
      • close

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

        public boolean isClosed()
        Check if the chunked input has been closed.
        Returns:
        true if this chunked input has been closed, false otherwise.
      • read

        public T read()
               throws java.lang.IllegalStateException
        Read next chunk from the response stream and convert it to a Java instance using the chunk media type. The method returns null if the underlying entity input stream has been closed (either implicitly or explicitly by calling the close() method).

        Note: Access to internal chunk parser is not a thread-safe operation and has to be explicitly synchronized in case the chunked input is used from multiple threads.

        Returns:
        next streamed chunk or null if the underlying entity input stream has been closed while reading next chunk data.
        Throws:
        java.lang.IllegalStateException - in case this chunked input has been closed.