Class ChunkedInput<T>

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

    public class ChunkedInput<T>
    extends GenericType<T>
    implements 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.

    Author:
    Marek Potociar
    • Constructor Detail

      • ChunkedInput

        protected ChunkedInput​(Type chunkType,
                               InputStream inputStream,
                               Annotation[] annotations,
                               MediaType mediaType,
                               MultivaluedMap<String,​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​(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​(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 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​(MediaType mediaType)
                          throws 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:
        IllegalArgumentException - in case the mediaType is null.
      • setChunkType

        public void setChunkType​(String mediaType)
                          throws 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:
        IllegalArgumentException - in case the mediaType cannot be parsed into a valid MediaType instance or is null.
        See Also:
        setChunkType(jakarta.ws.rs.core.MediaType)
      • 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 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:
        IllegalStateException - in case this chunked input has been closed.