Class RestResponseImpl<T>
- java.lang.Object
-
- org.jboss.resteasy.reactive.RestResponse<T>
-
- org.jboss.resteasy.reactive.common.jaxrs.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 @{linkio.quarkus.rest.server.runtime.client.QuarkusRestClientResponse
.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.jboss.resteasy.reactive.RestResponse
RestResponse.ResponseBuilder<T>, RestResponse.Status, RestResponse.StatusCode
-
-
Constructor Summary
Constructors Constructor Description RestResponseImpl()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
bufferEntity()
Buffer the message entity data.protected void
checkClosed()
void
close()
Close the underlying message entity input stream (if available and open) as well as releases any other resources associated with the response (e.g.Set<String>
getAllowedMethods()
Get the allowed HTTP methods from the Allow HTTP header.Map<String,javax.ws.rs.core.NewCookie>
getCookies()
Get any new cookies set on the response message.Date
getDate()
Get message date.T
getEntity()
Get the message entity Java instance.Annotation[]
getEntityAnnotations()
InputStream
getEntityStream()
javax.ws.rs.core.EntityTag
getEntityTag()
Get the entity tag.String
getHeaderString(String name)
Get a message header as a single string value.Locale
getLanguage()
Get the language of the message entity.Date
getLastModified()
Get the last modified date.int
getLength()
Get Content-Length value.javax.ws.rs.core.Link
getLink(String relation)
Get the link for the relation.javax.ws.rs.core.Link.Builder
getLinkBuilder(String relation)
Convenience method that returns aLink.Builder
for the relation.Set<javax.ws.rs.core.Link>
getLinks()
Get the links attached to the message as headers.URI
getLocation()
Get the location.javax.ws.rs.core.MediaType
getMediaType()
Get the media type of the message entity.javax.ws.rs.core.MultivaluedMap<String,Object>
getMetadata()
int
getStatus()
Get the status code associated with the response.javax.ws.rs.core.Response.StatusType
getStatusInfo()
Get the complete status information associated with the response.javax.ws.rs.core.MultivaluedMap<String,String>
getStringHeaders()
Get view of the response headers and their string values.boolean
hasEntity()
Check if there is an entity available in the response.boolean
hasLink(String relation)
Check if link for relation exists.void
populateStringHeaders(String headerName, List<Object> values)
<OtherT> OtherT
readEntity(Class<OtherT> entityType)
Read the message entity input stream as an instance of specified Java type using aMessageBodyReader
that supports mapping the message entity stream onto the requested type.<OtherT> OtherT
readEntity(Class<OtherT> entityType, Annotation[] annotations)
Read the message entity input stream as an instance of specified Java type using aMessageBodyReader
that supports mapping the message entity stream onto the requested type.protected <T> T
readEntity(Class<T> entityType, Type genericType, Annotation[] annotations)
<OtherT> OtherT
readEntity(javax.ws.rs.core.GenericType<OtherT> entityType)
Read the message entity input stream as an instance of specified Java type using aMessageBodyReader
that supports mapping the message entity stream onto the requested type.<OtherT> OtherT
readEntity(javax.ws.rs.core.GenericType<OtherT> entityType, Annotation[] annotations)
Read the message entity input stream as an instance of specified Java type using aMessageBodyReader
that supports mapping the message entity stream onto the requested type.protected void
setEntity(T entity)
void
setEntityStream(InputStream entityStream)
void
setStatus(int status)
Internal: this is just cheaper than duplicating the response just to change the statusvoid
setStatusInfo(javax.ws.rs.core.Response.StatusType statusType)
Internal: this is just cheaper than duplicating the response just to change the statusjavax.ws.rs.core.Response
toResponse()
Turns thisRestResponse
into a JAX-RSResponse
.-
Methods inherited from class org.jboss.resteasy.reactive.RestResponse
accepted, accepted, created, fromResponse, getHeaders, noContent, notAcceptable, notFound, notModified, notModified, notModified, ok, ok, ok, ok, ok, seeOther, serverError, status, status, status, status, status, status, temporaryRedirect
-
-
-
-
Field Detail
-
entity
protected T entity
-
consumed
protected boolean consumed
-
closed
protected boolean closed
-
buffered
protected boolean buffered
-
-
Method Detail
-
toResponse
public javax.ws.rs.core.Response toResponse()
Description copied from class:RestResponse
Turns thisRestResponse
into a JAX-RSResponse
.- Specified by:
toResponse
in classRestResponse<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 classRestResponse<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 classRestResponse<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. Returnsnull
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 classRestResponse<T>
- Returns:
- the message entity or
null
if message does not contain an entity body (i.e. whenRestResponse.hasEntity()
returnsfalse
).
-
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 aMessageBodyReader
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 andIllegalStateException
in case the entity is not backed by an input stream or if the original entity input stream has already been consumed withoutbuffering
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 aninput stream
, this method automaticallycloses
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 ofreadEntity(...)
methods on this response.- Specified by:
readEntity
in classRestResponse<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 underlyingNoContentException
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 aMessageBodyReader
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 andIllegalStateException
in case the entity is not backed by an input stream or if the original entity input stream has already been consumed withoutbuffering
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 aninput stream
, this method automaticallycloses
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 ofreadEntity(...)
methods on this response.- Specified by:
readEntity
in classRestResponse<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 underlyingNoContentException
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 aMessageBodyReader
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 andIllegalStateException
in case the entity is not backed by an input stream or if the original entity input stream has already been consumed withoutbuffering
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 aninput stream
, this method automaticallycloses
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 ofreadEntity(...)
methods on this response.- Specified by:
readEntity
in classRestResponse<T>
- Type Parameters:
OtherT
- entity instance Java type.- Parameters:
entityType
- the type of entity.annotations
- annotations that will be passed to theMessageBodyReader
.- 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 underlyingNoContentException
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 aMessageBodyReader
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 andIllegalStateException
in case the entity is not backed by an input stream or if the original entity input stream has already been consumed withoutbuffering
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 aninput stream
, this method automaticallycloses
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 ofreadEntity(...)
methods on this response.- Specified by:
readEntity
in classRestResponse<T>
- Type Parameters:
OtherT
- entity instance Java type.- Parameters:
entityType
- the type of entity; may be generic.annotations
- annotations that will be passed to theMessageBodyReader
.- 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 underlyingNoContentException
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 returnstrue
if the entity is present, returnsfalse
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 thereadEntity(...)
methods will return a corresponding instance representing a zero-length entity for a given Java type or produce aProcessingException
in case no such instance is available for the Java type.- Specified by:
hasEntity
in classRestResponse<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 returnsfalse
.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 thebufferEntity()
method is consistent across all invocations of the method on the sameRestResponse
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 isclosed
, 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 anIllegalStateException
being thrown.- Specified by:
bufferEntity
in classRestResponse<T>
- Returns:
true
if the message entity input stream was available and was buffered successfully, returnsfalse
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 interfaceAutoCloseable
- Specified by:
close
in classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<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 classRestResponse<T>
- Returns:
- links, may return empty
Set
if no links are present. Does not returnnull
.
-
hasLink
public boolean hasLink(String relation)
Description copied from class:RestResponse
Check if link for relation exists.- Specified by:
hasLink
in classRestResponse<T>
- Parameters:
relation
- link relation.- Returns:
true
if the link for the relation is present in themessage 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 classRestResponse<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 aLink.Builder
for the relation. SeeRestResponse.getLink(java.lang.String)
for more information.- Specified by:
getLinkBuilder
in classRestResponse<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
SeeRestResponse.getHeaders()
. This method is considered deprecated. Users are encouraged to switch their code to use thegetHeaders()
method instead. The method may be annotated as@Deprecated
in a future release of the API.- Specified by:
getMetadata
in classRestResponse<T>
- Returns:
- response headers as a multivalued map.
-
getStringHeaders
public javax.ws.rs.core.MultivaluedMap<String,String> getStringHeaders()
Description copied from class:RestResponse
Get view of the response headers and their string values. The underlying header data may be subsequently modified by the runtime on the server side. Changes in the underlying header data are reflected in this view.- Specified by:
getStringHeaders
in classRestResponse<T>
- Returns:
- response headers as a string view of header values.
- See Also:
RestResponse.getHeaders()
,RestResponse.getHeaderString(java.lang.String)
-
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 aRuntimeDelegate.HeaderDelegate
if one is available viaRuntimeDelegate.createHeaderDelegate(java.lang.Class)
for the header value class or using itstoString
method if a header delegate is not available.- Specified by:
getHeaderString
in classRestResponse<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()
-
-