Class RestResponseImpl<T>

  • All Implemented Interfaces:
    AutoCloseable

    public class RestResponseImpl<T>
    extends RestResponse<T>
    This is the Response class for user-created responses. The client response object has more deserialising powers in @{link io.quarkus.rest.server.runtime.client.QuarkusRestClientResponse.
    • Field Detail

      • entity

        protected T entity
      • consumed

        protected boolean consumed
      • closed

        protected boolean closed
      • buffered

        protected boolean buffered
    • Constructor Detail

      • RestResponseImpl

        public RestResponseImpl()
    • Method Detail

      • toResponse

        public javax.ws.rs.core.Response toResponse()
        Description copied from class: RestResponse
        Turns this RestResponse into a JAX-RS Response.
        Specified by:
        toResponse in class RestResponse<T>
        Returns:
        a JAX-RS Response representing this response.
      • getStatus

        public int getStatus()
        Description copied from class: RestResponse
        Get the status code associated with the response.
        Specified by:
        getStatus in class RestResponse<T>
        Returns:
        the response status code.
      • setStatus

        public void setStatus​(int status)
        Internal: this is just cheaper than duplicating the response just to change the status
      • getStatusInfo

        public javax.ws.rs.core.Response.StatusType getStatusInfo()
        Description copied from class: RestResponse
        Get the complete status information associated with the response.
        Specified by:
        getStatusInfo in class RestResponse<T>
        Returns:
        the response status information. The returned value is never null.
      • setStatusInfo

        public void setStatusInfo​(javax.ws.rs.core.Response.StatusType statusType)
        Internal: this is just cheaper than duplicating the response just to change the status
      • getEntity

        public T getEntity()
        Description copied from class: RestResponse
        Get the message entity Java instance. Returns null if the message does not contain an entity body.

        If the entity is represented by an un-consumed input stream the method will return the input stream.

        Specified by:
        getEntity in class RestResponse<T>
        Returns:
        the message entity or null if message does not contain an entity body (i.e. when RestResponse.hasEntity() returns false).
      • setEntity

        protected void setEntity​(T entity)
      • getEntityStream

        public InputStream getEntityStream()
      • setEntityStream

        public void setEntityStream​(InputStream entityStream)
      • readEntity

        protected <T> T readEntity​(Class<T> entityType,
                                   Type genericType,
                                   Annotation[] annotations)
      • readEntity

        public <OtherT> OtherT readEntity​(Class<OtherT> entityType)
        Description copied from class: RestResponse
        Read the message entity input stream as an instance of specified Java type using a MessageBodyReader that supports mapping the message entity stream onto the requested type.

        Method throws an ProcessingException if the content of the message cannot be mapped to an entity of the requested type and IllegalStateException in case the entity is not backed by an input stream or if the original entity input stream has already been consumed without buffering the entity data prior consuming.

        A message instance returned from this method will be cached for subsequent retrievals via RestResponse.getEntity(). Unless the supplied entity type is an input stream, this method automatically closes the an unconsumed original response entity data stream if open. In case the entity data has been buffered, the buffer will be reset prior consuming the buffered data to enable subsequent invocations of readEntity(...) methods on this response.

        Specified by:
        readEntity in class RestResponse<T>
        Type Parameters:
        OtherT - entity instance Java type.
        Parameters:
        entityType - the type of entity.
        Returns:
        the message entity; for a zero-length response entities returns a corresponding Java object that represents zero-length data. In case no zero-length representation is defined for the Java type, a ProcessingException wrapping the underlying NoContentException is thrown.
        See Also:
        MessageBodyReader
      • readEntity

        public <OtherT> OtherT readEntity​(javax.ws.rs.core.GenericType<OtherT> entityType)
        Description copied from class: RestResponse
        Read the message entity input stream as an instance of specified Java type using a MessageBodyReader that supports mapping the message entity stream onto the requested type.

        Method throws an ProcessingException if the content of the message cannot be mapped to an entity of the requested type and IllegalStateException in case the entity is not backed by an input stream or if the original entity input stream has already been consumed without buffering the entity data prior consuming.

        A message instance returned from this method will be cached for subsequent retrievals via RestResponse.getEntity(). Unless the supplied entity type is an input stream, this method automatically closes the an unconsumed original response entity data stream if open. In case the entity data has been buffered, the buffer will be reset prior consuming the buffered data to enable subsequent invocations of readEntity(...) methods on this response.

        Specified by:
        readEntity in class RestResponse<T>
        Type Parameters:
        OtherT - entity instance Java type.
        Parameters:
        entityType - the type of entity; may be generic.
        Returns:
        the message entity; for a zero-length response entities returns a corresponding Java object that represents zero-length data. In case no zero-length representation is defined for the Java type, a ProcessingException wrapping the underlying NoContentException is thrown.
        See Also:
        MessageBodyReader
      • readEntity

        public <OtherT> OtherT readEntity​(Class<OtherT> entityType,
                                          Annotation[] annotations)
        Description copied from class: RestResponse
        Read the message entity input stream as an instance of specified Java type using a MessageBodyReader that supports mapping the message entity stream onto the requested type.

        Method throws an ProcessingException if the content of the message cannot be mapped to an entity of the requested type and IllegalStateException in case the entity is not backed by an input stream or if the original entity input stream has already been consumed without buffering the entity data prior consuming.

        A message instance returned from this method will be cached for subsequent retrievals via RestResponse.getEntity(). Unless the supplied entity type is an input stream, this method automatically closes the an unconsumed original response entity data stream if open. In case the entity data has been buffered, the buffer will be reset prior consuming the buffered data to enable subsequent invocations of readEntity(...) methods on this response.

        Specified by:
        readEntity in class RestResponse<T>
        Type Parameters:
        OtherT - entity instance Java type.
        Parameters:
        entityType - the type of entity.
        annotations - annotations that will be passed to the MessageBodyReader.
        Returns:
        the message entity; for a zero-length response entities returns a corresponding Java object that represents zero-length data. In case no zero-length representation is defined for the Java type, a ProcessingException wrapping the underlying NoContentException is thrown.
        See Also:
        MessageBodyReader
      • readEntity

        public <OtherT> OtherT readEntity​(javax.ws.rs.core.GenericType<OtherT> entityType,
                                          Annotation[] annotations)
        Description copied from class: RestResponse
        Read the message entity input stream as an instance of specified Java type using a MessageBodyReader that supports mapping the message entity stream onto the requested type.

        Method throws an ProcessingException if the content of the message cannot be mapped to an entity of the requested type and IllegalStateException in case the entity is not backed by an input stream or if the original entity input stream has already been consumed without buffering the entity data prior consuming.

        A message instance returned from this method will be cached for subsequent retrievals via RestResponse.getEntity(). Unless the supplied entity type is an input stream, this method automatically closes the an unconsumed original response entity data stream if open. In case the entity data has been buffered, the buffer will be reset prior consuming the buffered data to enable subsequent invocations of readEntity(...) methods on this response.

        Specified by:
        readEntity in class RestResponse<T>
        Type Parameters:
        OtherT - entity instance Java type.
        Parameters:
        entityType - the type of entity; may be generic.
        annotations - annotations that will be passed to the MessageBodyReader.
        Returns:
        the message entity; for a zero-length response entities returns a corresponding Java object that represents zero-length data. In case no zero-length representation is defined for the Java type, a ProcessingException wrapping the underlying NoContentException is thrown.
        See Also:
        MessageBodyReader
      • hasEntity

        public boolean hasEntity()
        Description copied from class: RestResponse
        Check if there is an entity available in the response. The method returns true if the entity is present, returns false otherwise.

        Note that the method may return true also for response messages with a zero-length content, in case the "Content-Length" and "Content-Type" headers are specified in the message. In such case, an attempt to read the entity using one of the readEntity(...) methods will return a corresponding instance representing a zero-length entity for a given Java type or produce a ProcessingException in case no such instance is available for the Java type.

        Specified by:
        hasEntity in class RestResponse<T>
        Returns:
        true if there is an entity present in the message, false otherwise.
      • bufferEntity

        public boolean bufferEntity()
        Description copied from class: RestResponse
        Buffer the message entity data.

        In case the message entity is backed by an unconsumed entity input stream, all the bytes of the original entity input stream are read and stored in a local buffer. The original entity input stream is consumed and automatically closed as part of the operation and the method returns true.

        In case the response entity instance is not backed by an unconsumed input stream an invocation of bufferEntity method is ignored and the method returns false.

        This operation is idempotent, i.e. it can be invoked multiple times with the same effect which also means that calling the bufferEntity() method on an already buffered (and thus closed) message instance is legal and has no further effect. Also, the result returned by the bufferEntity() method is consistent across all invocations of the method on the same RestResponse instance.

        Buffering the message entity data allows for multiple invocations of readEntity(...) methods on the response instance. Note however, that once the response instance itself is closed, the implementations are expected to release the buffered message entity data too. Therefore any subsequent attempts to read a message entity stream on such closed response will result in an IllegalStateException being thrown.

        Specified by:
        bufferEntity in class RestResponse<T>
        Returns:
        true if the message entity input stream was available and was buffered successfully, returns false if the entity stream was not available.
      • checkClosed

        protected void checkClosed()
      • close

        public void close()
        Description copied from class: RestResponse
        Close the underlying message entity input stream (if available and open) as well as releases any other resources associated with the response (e.g. buffered message entity data).

        This operation is idempotent, i.e. it can be invoked multiple times with the same effect which also means that calling the close() method on an already closed message instance is legal and has no further effect.

        The close() method should be invoked on all instances that contain an un-consumed entity input stream to ensure the resources associated with the instance are properly cleaned-up and prevent potential memory leaks. This is typical for client-side scenarios where application layer code processes only the response headers and ignores the response entity.

        Any attempts to manipulate (read, get, buffer) a message entity on a closed response will result in an IllegalStateException being thrown.

        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in class RestResponse<T>
      • getMediaType

        public javax.ws.rs.core.MediaType getMediaType()
        Description copied from class: RestResponse
        Get the media type of the message entity.
        Specified by:
        getMediaType in class RestResponse<T>
        Returns:
        the media type or null if there is no response entity.
      • getLanguage

        public Locale getLanguage()
        Description copied from class: RestResponse
        Get the language of the message entity.
        Specified by:
        getLanguage in class RestResponse<T>
        Returns:
        the language of the entity or null if not specified.
      • getLength

        public int getLength()
        Description copied from class: RestResponse
        Get Content-Length value.
        Specified by:
        getLength in class RestResponse<T>
        Returns:
        Content-Length as integer if present and valid number. In other cases returns -1.
      • getAllowedMethods

        public Set<String> getAllowedMethods()
        Description copied from class: RestResponse
        Get the allowed HTTP methods from the Allow HTTP header.
        Specified by:
        getAllowedMethods in class RestResponse<T>
        Returns:
        the allowed HTTP methods, all methods will returned as upper case strings.
      • getCookies

        public Map<String,​javax.ws.rs.core.NewCookie> getCookies()
        Description copied from class: RestResponse
        Get any new cookies set on the response message.
        Specified by:
        getCookies in class RestResponse<T>
        Returns:
        a read-only map of cookie name (String) to Cookie.
      • getEntityTag

        public javax.ws.rs.core.EntityTag getEntityTag()
        Description copied from class: RestResponse
        Get the entity tag.
        Specified by:
        getEntityTag in class RestResponse<T>
        Returns:
        the entity tag, otherwise null if not present.
      • getDate

        public Date getDate()
        Description copied from class: RestResponse
        Get message date.
        Specified by:
        getDate in class RestResponse<T>
        Returns:
        the message date, otherwise null if not present.
      • getLastModified

        public Date getLastModified()
        Description copied from class: RestResponse
        Get the last modified date.
        Specified by:
        getLastModified in class RestResponse<T>
        Returns:
        the last modified date, otherwise null if not present.
      • getLocation

        public URI getLocation()
        Description copied from class: RestResponse
        Get the location.
        Specified by:
        getLocation in class RestResponse<T>
        Returns:
        the location URI, otherwise null if not present.
      • getLinks

        public Set<javax.ws.rs.core.Link> getLinks()
        Description copied from class: RestResponse
        Get the links attached to the message as headers. Any links in the message that are relative must be resolved with respect to the actual request URI that produced this response. Note that request URIs may be updated by filters, so the actual request URI may differ from that in the original invocation.
        Specified by:
        getLinks in class RestResponse<T>
        Returns:
        links, may return empty Set if no links are present. Does not return null.
      • hasLink

        public boolean hasLink​(String relation)
        Description copied from class: RestResponse
        Check if link for relation exists.
        Specified by:
        hasLink in class RestResponse<T>
        Parameters:
        relation - link relation.
        Returns:
        true if the link for the relation is present in the message headers, false otherwise.
      • getLink

        public javax.ws.rs.core.Link getLink​(String relation)
        Description copied from class: RestResponse
        Get the link for the relation. A relative link is resolved with respect to the actual request URI that produced this response. Note that request URIs may be updated by filters, so the actual request URI may differ from that in the original invocation.
        Specified by:
        getLink in class RestResponse<T>
        Parameters:
        relation - link relation.
        Returns:
        the link for the relation, otherwise null if not present.
      • getLinkBuilder

        public javax.ws.rs.core.Link.Builder getLinkBuilder​(String relation)
        Description copied from class: RestResponse
        Convenience method that returns a Link.Builder for the relation. See RestResponse.getLink(java.lang.String) for more information.
        Specified by:
        getLinkBuilder in class RestResponse<T>
        Parameters:
        relation - link relation.
        Returns:
        the link builder for the relation, otherwise null if not present.
      • getMetadata

        public javax.ws.rs.core.MultivaluedMap<String,​Object> getMetadata()
        Description copied from class: RestResponse
        See RestResponse.getHeaders(). This method is considered deprecated. Users are encouraged to switch their code to use the getHeaders() method instead. The method may be annotated as @Deprecated in a future release of the API.
        Specified by:
        getMetadata in class RestResponse<T>
        Returns:
        response headers as a multivalued map.
      • populateStringHeaders

        public void populateStringHeaders​(String headerName,
                                          List<Object> values)
      • getHeaderString

        public String getHeaderString​(String name)
        Description copied from class: RestResponse
        Get a message header as a single string value. Each single header value is converted to String using a RuntimeDelegate.HeaderDelegate if one is available via RuntimeDelegate.createHeaderDelegate(java.lang.Class) for the header value class or using its toString method if a header delegate is not available.
        Specified by:
        getHeaderString in class RestResponse<T>
        Parameters:
        name - the message header.
        Returns:
        the message header value. If the message header is not present then null is returned. If the message header is present but has no value then the empty string is returned. If the message header is present more than once then the values of joined together and separated by a ',' character.
        See Also:
        RestResponse.getHeaders(), RestResponse.getStringHeaders()
      • getEntityAnnotations

        public Annotation[] getEntityAnnotations()