org.glassfish.jersey.server
Class ContainerRequest

java.lang.Object
  extended by org.glassfish.jersey.message.internal.InboundMessageContext
      extended by org.glassfish.jersey.server.ContainerRequest
All Implemented Interfaces:
ContainerRequestContext, HttpHeaders, Request

public class ContainerRequest
extends InboundMessageContext
implements ContainerRequestContext, Request, HttpHeaders

Jersey container request context. An instance of the request context is passed by the container to the ApplicationHandler for each incoming client request.

Author:
Marek Potociar (marek.potociar at oracle.com)

Field Summary
 
Fields inherited from interface javax.ws.rs.core.HttpHeaders
ACCEPT, ACCEPT_CHARSET, ACCEPT_ENCODING, ACCEPT_LANGUAGE, ALLOW, AUTHORIZATION, CACHE_CONTROL, CONTENT_DISPOSITION, CONTENT_ENCODING, CONTENT_ID, CONTENT_LANGUAGE, CONTENT_LENGTH, CONTENT_LOCATION, CONTENT_TYPE, COOKIE, DATE, ETAG, EXPIRES, HOST, IF_MATCH, IF_MODIFIED_SINCE, IF_NONE_MATCH, IF_UNMODIFIED_SINCE, LAST_MODIFIED, LINK, LOCATION, RETRY_AFTER, SET_COOKIE, USER_AGENT, VARY, WWW_AUTHENTICATE
 
Constructor Summary
ContainerRequest(URI baseUri, URI requestUri, String httpMethod, SecurityContext securityContext, PropertiesDelegate propertiesDelegate)
          Create new Jersey container request context.
 
Method Summary
 void abortWith(Response response)
          Abort the filter chain with a response.
 Response.ResponseBuilder evaluatePreconditions()
          Evaluate request preconditions for a resource that does not currently exist.
 Response.ResponseBuilder evaluatePreconditions(Date lastModified)
          Evaluate request preconditions based on the passed in value.
 Response.ResponseBuilder evaluatePreconditions(Date lastModified, EntityTag eTag)
          Evaluate request preconditions based on the passed in value.
 Response.ResponseBuilder evaluatePreconditions(EntityTag eTag)
          Evaluate request preconditions based on the passed in value.
 Response getAbortResponse()
          Get the request filter chain aborting response if set, or null otherwise.
 List<Locale> getAcceptableLanguages()
          Get a list of languages that are acceptable for the response.
 List<MediaType> getAcceptableMediaTypes()
          Get a list of media types that are acceptable for the response.
 URI getBaseUri()
          Get base request URI.
 Map<String,Cookie> getCookies()
          Get any cookies that accompanied the request.
 String getMethod()
          Get the request method.
 String getPath(boolean decode)
          Get the path of the current request relative to the application root (base) URI as a string.
 PropertiesDelegate getPropertiesDelegate()
          Get the underlying properties delegate.
 Object getProperty(String name)
          Returns the property with the given name registered in the current request/response exchange context, or null if there is no property by that name.
 Collection<String> getPropertyNames()
          Returns an immutable collection containing the property names available within the context of the current request/response exchange context.
 Request getRequest()
          Get the injectable request information.
 List<String> getRequestHeader(String name)
          Get the values of a HTTP request header.
 MultivaluedMap<String,String> getRequestHeaders()
          Get the values of HTTP request headers.
 RequestScopedInitializer getRequestScopedInitializer()
          Get a custom container extensions initializer for the current request.
 URI getRequestUri()
          Get request URI.
 ContainerResponseWriter getResponseWriter()
          Get the container response writer for the current request.
 SecurityContext getSecurityContext()
          Get the injectable security context information for the current request.
 UriInfo getUriInfo()
          Get request URI information.
 String getVaryValue()
          Get the value of HTTP Vary response header to be set in the response, or null if no value is to be set.
 void inResponseProcessing()
          Notify this request that the response created from this request is already being processed.
<T> T
readEntity(Class<T> rawType)
          Read entity from a context entity input stream.
<T> T
readEntity(Class<T> rawType, Annotation[] annotations)
          Read entity from a context entity input stream.
<T> T
readEntity(Class<T> rawType, Type type)
          Read entity from a context entity input stream.
<T> T
readEntity(Class<T> rawType, Type type, Annotation[] annotations)
          Read entity from a context entity input stream.
 void removeProperty(String name)
          Removes a property with the given name from the current request/response exchange context.
 Variant selectVariant(List<Variant> variants)
          Select the representation variant that best matches the request.
 void setEntityStream(InputStream input)
          Set a new entity input stream.
 void setMethod(String method)
          Set the request method.
 void setMethodWithoutException(String method)
          Like setMethod(String) but does not throw IllegalStateException if the method is invoked in other than pre-matching phase.
 void setProperty(String name, Object object)
          Binds an object to a given property name in the current request/response exchange context.
 void setRequestScopedInitializer(RequestScopedInitializer requestScopedInitializer)
          Set a custom container extensions initializer for the current request.
 void setRequestUri(URI requestUri)
          Set a new request URI using the current base URI of the application to resolve the application-specific request URI part.
 void setRequestUri(URI baseUri, URI requestUri)
          Set a new request URI using a new base URI to resolve the application-specific request URI part.
 void setSecurityContext(SecurityContext context)
          Set a new injectable security context information for the current request.
 void setUriInfo(UriInfo uriInfo)
          Set the request scoped UriInfo instance.
 void setWriter(ContainerResponseWriter responseWriter)
          Set the container response writer for the current request.
 
Methods inherited from class org.glassfish.jersey.message.internal.InboundMessageContext
bufferEntity, close, getAllowedMethods, getDate, getEntityStream, getEntityTag, getHeaders, getHeaderString, getIfMatch, getIfNoneMatch, getLanguage, getLastModified, getLength, getLink, getLinkBuilder, getLinks, getLocation, getMediaType, getQualifiedAcceptableLanguages, getQualifiedAcceptableMediaTypes, getQualifiedAcceptCharset, getQualifiedAcceptEncoding, getRequestCookies, getResponseCookies, getWorkers, hasEntity, hasLink, header, headers, headers, headers, headers, readEntity, readEntity, readEntity, readEntity, remove, setReaderInterceptors, setWorkers
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.ws.rs.container.ContainerRequestContext
getDate, getEntityStream, getHeaders, getHeaderString, getLanguage, getLength, getMediaType, hasEntity
 
Methods inherited from interface javax.ws.rs.core.HttpHeaders
getDate, getHeaderString, getLanguage, getLength, getMediaType
 

Constructor Detail

ContainerRequest

public ContainerRequest(URI baseUri,
                        URI requestUri,
                        String httpMethod,
                        SecurityContext securityContext,
                        PropertiesDelegate propertiesDelegate)
Create new Jersey container request context.

Parameters:
baseUri - base application URI.
requestUri - request URI.
httpMethod - request HTTP method name.
securityContext - security context of the current request. Must not be null. The SecurityContext.getUserPrincipal() must return null if the current request has not been authenticated by the container.
propertiesDelegate - custom properties delegate to be used by the context.
Method Detail

getRequestScopedInitializer

public RequestScopedInitializer getRequestScopedInitializer()
Get a custom container extensions initializer for the current request. The initializer is guaranteed to be run from within the request scope of the current request.

Returns:
custom container extensions initializer or null if not available.

setRequestScopedInitializer

public void setRequestScopedInitializer(RequestScopedInitializer requestScopedInitializer)
Set a custom container extensions initializer for the current request. The initializer is guaranteed to be run from within the request scope of the current request.

Parameters:
requestScopedInitializer - custom container extensions initializer.

getResponseWriter

public ContainerResponseWriter getResponseWriter()
Get the container response writer for the current request.

Returns:
container response writer.

setWriter

public void setWriter(ContainerResponseWriter responseWriter)
Set the container response writer for the current request.

Parameters:
responseWriter - container response writer. Must not be null.

readEntity

public <T> T readEntity(Class<T> rawType)
Read entity from a context entity input stream.

Type Parameters:
T - entity Java object type.
Parameters:
rawType - raw Java entity type.
Returns:
entity read from a context entity input stream.

readEntity

public <T> T readEntity(Class<T> rawType,
                        Annotation[] annotations)
Read entity from a context entity input stream.

Type Parameters:
T - entity Java object type.
Parameters:
rawType - raw Java entity type.
annotations - entity annotations.
Returns:
entity read from a context entity input stream.

readEntity

public <T> T readEntity(Class<T> rawType,
                        Type type)
Read entity from a context entity input stream.

Type Parameters:
T - entity Java object type.
Parameters:
rawType - raw Java entity type.
type - generic Java entity type.
Returns:
entity read from a context entity input stream.

readEntity

public <T> T readEntity(Class<T> rawType,
                        Type type,
                        Annotation[] annotations)
Read entity from a context entity input stream.

Type Parameters:
T - entity Java object type.
Parameters:
rawType - raw Java entity type.
type - generic Java entity type.
annotations - entity annotations.
Returns:
entity read from a context entity input stream.

getProperty

public Object getProperty(String name)
Description copied from interface: ContainerRequestContext
Returns the property with the given name registered in the current request/response exchange context, or null if there is no property by that name.

A property allows a JAX-RS filters and interceptors to exchange additional custom information not already provided by this interface.

A list of supported properties can be retrieved using ContainerRequestContext.getPropertyNames(). Custom property names should follow the same convention as package names.

In a Servlet container, the properties are synchronized with the ServletRequest and expose all the attributes available in the ServletRequest. Any modifications of the properties are also reflected in the set of properties of the associated ServletRequest.

Specified by:
getProperty in interface ContainerRequestContext
Parameters:
name - a String specifying the name of the property.
Returns:
an Object containing the value of the property, or null if no property exists matching the given name.
See Also:
ContainerRequestContext.getPropertyNames()

getPropertyNames

public Collection<String> getPropertyNames()
Description copied from interface: ContainerRequestContext
Returns an immutable collection containing the property names available within the context of the current request/response exchange context.

Use the ContainerRequestContext.getProperty(java.lang.String) method with a property name to get the value of a property.

In a Servlet container, the properties are synchronized with the ServletRequest and expose all the attributes available in the ServletRequest. Any modifications of the properties are also reflected in the set of properties of the associated ServletRequest.

Specified by:
getPropertyNames in interface ContainerRequestContext
Returns:
an immutable collection of property names.
See Also:
ContainerRequestContext.getProperty(java.lang.String)

setProperty

public void setProperty(String name,
                        Object object)
Description copied from interface: ContainerRequestContext
Binds an object to a given property name in the current request/response exchange context. If the name specified is already used for a property, this method will replace the value of the property with the new value.

A property allows a JAX-RS filters and interceptors to exchange additional custom information not already provided by this interface.

A list of supported properties can be retrieved using ContainerRequestContext.getPropertyNames(). Custom property names should follow the same convention as package names.

If a null value is passed, the effect is the same as calling the ContainerRequestContext.removeProperty(String) method.

In a Servlet container, the properties are synchronized with the ServletRequest and expose all the attributes available in the ServletRequest. Any modifications of the properties are also reflected in the set of properties of the associated ServletRequest.

Specified by:
setProperty in interface ContainerRequestContext
Parameters:
name - a String specifying the name of the property.
object - an Object representing the property to be bound.

removeProperty

public void removeProperty(String name)
Description copied from interface: ContainerRequestContext
Removes a property with the given name from the current request/response exchange context. After removal, subsequent calls to ContainerRequestContext.getProperty(java.lang.String) to retrieve the property value will return null.

In a Servlet container, the properties are synchronized with the ServletRequest and expose all the attributes available in the ServletRequest. Any modifications of the properties are also reflected in the set of properties of the associated ServletRequest.

Specified by:
removeProperty in interface ContainerRequestContext
Parameters:
name - a String specifying the name of the property to be removed.

getPropertiesDelegate

public PropertiesDelegate getPropertiesDelegate()
Get the underlying properties delegate.

Returns:
underlying properties delegate.

getUriInfo

public UriInfo getUriInfo()
Description copied from interface: ContainerRequestContext
Get request URI information. The returned object contains "live" view of the request URI information in a sense that any changes made to the request URI using one of the setRequestUri(...) methods will be reflected in the previously returned UriInfo instance.

Specified by:
getUriInfo in interface ContainerRequestContext
Returns:
request URI information.

setUriInfo

public void setUriInfo(UriInfo uriInfo)
Set the request scoped UriInfo instance.

Parameters:
uriInfo - request scoped UriInfo instance.

getBaseUri

public URI getBaseUri()
Get base request URI.

Returns:
base request URI.

getRequestUri

public URI getRequestUri()
Get request URI.

Returns:
request URI.

setRequestUri

public void setRequestUri(URI requestUri)
                   throws IllegalStateException
Description copied from interface: ContainerRequestContext
Set a new request URI using the current base URI of the application to resolve the application-specific request URI part.

Note that the method is usable only in pre-matching filters, prior to the resource matching occurs. Trying to invoke the method in a filter bound to a resource method results in an IllegalStateException being thrown.

Specified by:
setRequestUri in interface ContainerRequestContext
Parameters:
requestUri - new URI of the request.
Throws:
IllegalStateException - in case the method is not invoked from a pre-matching request filter.
See Also:
ContainerRequestContext.setRequestUri(java.net.URI, java.net.URI)

setRequestUri

public void setRequestUri(URI baseUri,
                          URI requestUri)
                   throws IllegalStateException
Description copied from interface: ContainerRequestContext
Set a new request URI using a new base URI to resolve the application-specific request URI part.

Note that the method is usable only in pre-matching filters, prior to the resource matching occurs. Trying to invoke the method in a filter bound to a resource method results in an IllegalStateException being thrown.

Specified by:
setRequestUri in interface ContainerRequestContext
Parameters:
baseUri - base URI that will be used to resolve the application-specific part of the request URI.
requestUri - new URI of the request.
Throws:
IllegalStateException - in case the method is not invoked from a pre-matching request filter.
See Also:
ContainerRequestContext.setRequestUri(java.net.URI)

getPath

public String getPath(boolean decode)
Get the path of the current request relative to the application root (base) URI as a string.

Parameters:
decode - controls whether sequences of escaped octets are decoded (true) or not (false).
Returns:
relative request path.

getMethod

public String getMethod()
Description copied from interface: ContainerRequestContext
Get the request method.

Specified by:
getMethod in interface ContainerRequestContext
Specified by:
getMethod in interface Request
Returns:
the request method.
See Also:
HttpMethod

setMethod

public void setMethod(String method)
               throws IllegalStateException
Description copied from interface: ContainerRequestContext
Set the request method.

Note that the method is usable only in pre-matching filters, prior to the resource matching occurs. Trying to invoke the method in a filter bound to a resource method results in an IllegalStateException being thrown.

Specified by:
setMethod in interface ContainerRequestContext
Parameters:
method - new request method.
Throws:
IllegalStateException - in case the method is not invoked from a pre-matching request filter.
See Also:
HttpMethod

setMethodWithoutException

public void setMethodWithoutException(String method)
Like setMethod(String) but does not throw IllegalStateException if the method is invoked in other than pre-matching phase.

Parameters:
method - HTTP method.

getSecurityContext

public SecurityContext getSecurityContext()
Description copied from interface: ContainerRequestContext
Get the injectable security context information for the current request. The SecurityContext.getUserPrincipal() must return null if the current request has not been authenticated.

Specified by:
getSecurityContext in interface ContainerRequestContext
Returns:
injectable request security context information.

setSecurityContext

public void setSecurityContext(SecurityContext context)
Description copied from interface: ContainerRequestContext
Set a new injectable security context information for the current request. The SecurityContext.getUserPrincipal() must return null if the current request has not been authenticated.

Specified by:
setSecurityContext in interface ContainerRequestContext
Parameters:
context - new injectable request security context information.

setEntityStream

public void setEntityStream(InputStream input)
Description copied from class: InboundMessageContext
Set a new entity input stream.

Specified by:
setEntityStream in interface ContainerRequestContext
Overrides:
setEntityStream in class InboundMessageContext
Parameters:
input - new entity input stream.

getRequest

public Request getRequest()
Description copied from interface: ContainerRequestContext
Get the injectable request information.

Specified by:
getRequest in interface ContainerRequestContext
Returns:
injectable request information.

abortWith

public void abortWith(Response response)
Description copied from interface: ContainerRequestContext
Abort the filter chain with a response. This method breaks the filter chain processing and returns the provided response back to the client. The provided response goes through the chain of applicable response filters.

Specified by:
abortWith in interface ContainerRequestContext
Parameters:
response - response to be sent back to the client.

inResponseProcessing

public void inResponseProcessing()
Notify this request that the response created from this request is already being processed. This means that the request processing phase has finished and this request can be used only in the request processing phase (for example in ContainerResponseFilter).

The request can be used for processing of more than one response (in async cases). Then this method should be called when the first response is created from this request. Multiple calls to this method has the same effect as calling the method only once.


getAbortResponse

public Response getAbortResponse()
Get the request filter chain aborting response if set, or null otherwise.

Returns:
request filter chain aborting response if set, or null otherwise.

getCookies

public Map<String,Cookie> getCookies()
Description copied from interface: ContainerRequestContext
Get any cookies that accompanied the request.

Specified by:
getCookies in interface ContainerRequestContext
Specified by:
getCookies in interface HttpHeaders
Returns:
a read-only map of cookie name (String) to Cookie.

getAcceptableMediaTypes

public List<MediaType> getAcceptableMediaTypes()
Description copied from interface: ContainerRequestContext
Get a list of media types that are acceptable for the response.

Specified by:
getAcceptableMediaTypes in interface ContainerRequestContext
Specified by:
getAcceptableMediaTypes in interface HttpHeaders
Returns:
a read-only list of requested response media types sorted according to their q-value, with highest preference first.

getAcceptableLanguages

public List<Locale> getAcceptableLanguages()
Description copied from interface: ContainerRequestContext
Get a list of languages that are acceptable for the response.

Specified by:
getAcceptableLanguages in interface ContainerRequestContext
Specified by:
getAcceptableLanguages in interface HttpHeaders
Returns:
a read-only list of acceptable languages sorted according to their q-value, with highest preference first.

selectVariant

public Variant selectVariant(List<Variant> variants)
                      throws IllegalArgumentException
Description copied from interface: Request
Select the representation variant that best matches the request. Returns null in case there is no matching variant in the list.

More explicit variants are chosen ahead of less explicit ones. A vary header is computed from the supplied list and automatically added to the response.

Specified by:
selectVariant in interface Request
Parameters:
variants - a list of Variant that describe all of the available representation variants.
Returns:
the variant that best matches the request or null if there's no match.
Throws:
IllegalArgumentException - if variants is empty or null.
See Also:
Variant.VariantListBuilder

getVaryValue

public String getVaryValue()
Get the value of HTTP Vary response header to be set in the response, or null if no value is to be set.

Returns:
value of HTTP Vary response header to be set in the response if available, null otherwise.

evaluatePreconditions

public Response.ResponseBuilder evaluatePreconditions(EntityTag eTag)
Description copied from interface: Request
Evaluate request preconditions based on the passed in value.

Specified by:
evaluatePreconditions in interface Request
Parameters:
eTag - an ETag for the current state of the resource
Returns:
null if the preconditions are met or a ResponseBuilder set with the appropriate status if the preconditions are not met. A returned ResponseBuilder will include an ETag header set with the value of eTag, provided none of the precondition evaluation has failed, in which case the ETag header would not be included and the status code of the returned ResponseBuilder would be set to Response.Status.PRECONDITION_FAILED.

evaluatePreconditions

public Response.ResponseBuilder evaluatePreconditions(Date lastModified)
Description copied from interface: Request
Evaluate request preconditions based on the passed in value.

Specified by:
evaluatePreconditions in interface Request
Parameters:
lastModified - a date that specifies the modification date of the resource
Returns:
null if the preconditions are met or a ResponseBuilder set with the appropriate status if the preconditions are not met.

evaluatePreconditions

public Response.ResponseBuilder evaluatePreconditions(Date lastModified,
                                                      EntityTag eTag)
Description copied from interface: Request
Evaluate request preconditions based on the passed in value.

Specified by:
evaluatePreconditions in interface Request
Parameters:
lastModified - a date that specifies the modification date of the resource
eTag - an ETag for the current state of the resource
Returns:
null if the preconditions are met or a ResponseBuilder set with the appropriate status if the preconditions are not met. A returned ResponseBuilder will include an ETag header set with the value of eTag, provided none of the precondition evaluation has failed, in which case the ETag header would not be included and the status code of the returned ResponseBuilder would be set to Response.Status.PRECONDITION_FAILED.

evaluatePreconditions

public Response.ResponseBuilder evaluatePreconditions()
Description copied from interface: Request
Evaluate request preconditions for a resource that does not currently exist. The primary use of this method is to support the If-Match: * and If-None-Match: * preconditions.

Note that both preconditions If-None-Match: * and If-None-Match: something will always be considered to have been met and it is the applications responsibility to enforce any additional method-specific semantics. E.g. a PUT on a resource that does not exist might succeed whereas a GET on a resource that does not exist would likely result in a 404 response. It would be the responsibility of the application to generate the 404 response.

Specified by:
evaluatePreconditions in interface Request
Returns:
null if the preconditions are met or a ResponseBuilder set with the appropriate status if the preconditions are not met.

getRequestHeader

public List<String> getRequestHeader(String name)
Get the values of a HTTP request header. The returned List is read-only. This is a shortcut for getRequestHeaders().get(name).

Specified by:
getRequestHeader in interface HttpHeaders
Parameters:
name - the header name, case insensitive.
Returns:
a read-only list of header values.
Throws:
IllegalStateException - if called outside the scope of a request.

getRequestHeaders

public MultivaluedMap<String,String> getRequestHeaders()
Get the values of HTTP request headers. The returned Map is case-insensitive wrt. keys and is read-only. The method never returns null.

Specified by:
getRequestHeaders in interface HttpHeaders
Returns:
a read-only map of header names and values.
Throws:
IllegalStateException - if called outside the scope of a request.


Copyright © 2007-2014, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.