Class UriRoutingContext
- java.lang.Object
-
- org.glassfish.jersey.server.internal.routing.UriRoutingContext
-
- All Implemented Interfaces:
javax.ws.rs.container.ResourceInfo
,javax.ws.rs.core.UriInfo
,ExtendedUriInfo
,RoutingContext
public class UriRoutingContext extends java.lang.Object implements RoutingContext
Default implementation of the routing context as well as URI information provider.
-
-
Field Summary
Fields Modifier and Type Field Description private ImmutableMultivaluedMap<java.lang.String,java.lang.String>
decodedQueryParamsView
private javax.ws.rs.core.MultivaluedHashMap<java.lang.String,java.lang.String>
decodedTemplateValues
private ImmutableMultivaluedMap<java.lang.String,java.lang.String>
decodedTemplateValuesView
private ImmutableMultivaluedMap<java.lang.String,java.lang.String>
encodedQueryParamsView
private javax.ws.rs.core.MultivaluedHashMap<java.lang.String,java.lang.String>
encodedTemplateValues
private ImmutableMultivaluedMap<java.lang.String,java.lang.String>
encodedTemplateValuesView
private Endpoint
endpoint
private java.util.LinkedList<Resource>
locatorSubResources
private java.lang.Throwable
mappedThrowable
private java.util.LinkedList<ResourceMethod>
matchedLocators
private ResourceMethod
matchedResourceMethod
private java.util.LinkedList<java.lang.Object>
matchedResources
private java.util.LinkedList<RuntimeResource>
matchedRuntimeResources
private java.util.LinkedList<java.util.regex.MatchResult>
matchResults
private static java.util.function.Function<java.lang.String,java.lang.String>
PATH_DECODER
private java.util.LinkedList<java.lang.String>
paths
private ContainerRequest
requestContext
private java.util.LinkedList<UriTemplate>
templates
private TracingLogger
tracingLogger
-
Constructor Summary
Constructors Constructor Description UriRoutingContext(ContainerRequest requestContext)
Injection constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.net.URI
getAbsolutePath()
javax.ws.rs.core.UriBuilder
getAbsolutePathBuilder()
java.net.URI
getBaseUri()
javax.ws.rs.core.UriBuilder
getBaseUriBuilder()
Endpoint
getEndpoint()
Get the matched server-side endpoint if present, ornull
otherwise.java.lang.String
getFinalMatchingGroup()
Get the final matching group of the last successful request URI routing patternmatch result
.private int
getLastPathParameterIndex(java.lang.String name, UriTemplate t)
java.util.List<Resource>
getLocatorSubResources()
Get the list of sub resources returned from resource locators during matching.java.lang.Throwable
getMappedThrowable()
Get the throwable that was mapped to a response.Resource
getMatchedModelResource()
Get matchedmodel resource
from whichthe matched
resource method was invoked.java.util.List<ResourceMethod>
getMatchedResourceLocators()
Get resource locators matched since beginning of a matching.ResourceMethod
getMatchedResourceMethod()
Get matchedresource method
that is invoked.java.util.List<java.lang.Object>
getMatchedResources()
java.util.LinkedList<java.util.regex.MatchResult>
getMatchedResults()
Get a read-only list ofMatchResult
for matched resources.java.util.List<RuntimeResource>
getMatchedRuntimeResources()
Return all matchedruntime resources
including runtime resources based on child resources.java.util.List<UriTemplate>
getMatchedTemplates()
Get a read-only list ofUriTemplate
for matched resources.java.util.List<java.lang.String>
getMatchedURIs()
java.util.List<java.lang.String>
getMatchedURIs(boolean decode)
java.lang.String
getPath()
java.lang.String
getPath(boolean decode)
private int[]
getPathParameterBounds(java.lang.String name)
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>
getPathParameters()
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>
getPathParameters(boolean decode)
java.util.List<javax.ws.rs.core.PathSegment>
getPathSegments()
java.util.List<javax.ws.rs.core.PathSegment>
getPathSegments(boolean decode)
java.util.List<javax.ws.rs.core.PathSegment>
getPathSegments(java.lang.String name)
Get the path segments that contain a template variable.java.util.List<javax.ws.rs.core.PathSegment>
getPathSegments(java.lang.String name, boolean decode)
Get the path segments that contain a template variable.javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>
getQueryParameters()
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String>
getQueryParameters(boolean decode)
java.net.URI
getRequestUri()
javax.ws.rs.core.UriBuilder
getRequestUriBuilder()
java.lang.Class<?>
getResourceClass()
java.lang.reflect.Method
getResourceMethod()
void
invalidateUriComponentViews()
Invalidate internal URI component cache views.java.lang.Object
peekMatchedResource()
Peek the last resource object that successfully matched the request URI.void
pushLeftHandPath()
Add currently matched left-hand side part of request path to the list of matched paths returned byUriInfo.getMatchedURIs()
.void
pushLocatorSubResource(Resource subResourceFromLocator)
Pushsub resource
returned from a sub resource locator method.void
pushMatchedLocator(ResourceMethod resourceLocator)
Push the matchedsub resource locator method
.void
pushMatchedResource(java.lang.Object resource)
Push the resource that matched the request URI.void
pushMatchedRuntimeResource(RuntimeResource runtimeResource)
Push a matchedruntime resource
that was visited during matching phase.private void
pushMatchedTemplateValues(UriTemplate template, java.util.regex.MatchResult matchResult)
void
pushMatchResult(java.util.regex.MatchResult matchResult)
Push the result of the successful request URI routing pattern match.void
pushTemplates(UriTemplate resourceTemplate, UriTemplate methodTemplate)
Push matched request URI routing patterntemplates
for a single matched method.java.net.URI
relativize(java.net.URI uri)
java.net.URI
resolve(java.net.URI uri)
void
setEndpoint(Endpoint endpoint)
Set the matched server-side endpoint.void
setMappedThrowable(java.lang.Throwable mappedThrowable)
Set the throwable that was mapped to a response.void
setMatchedResourceMethod(ResourceMethod resourceMethod)
Set the matchedresource method
.
-
-
-
Field Detail
-
matchResults
private final java.util.LinkedList<java.util.regex.MatchResult> matchResults
-
matchedResources
private final java.util.LinkedList<java.lang.Object> matchedResources
-
templates
private final java.util.LinkedList<UriTemplate> templates
-
encodedTemplateValues
private final javax.ws.rs.core.MultivaluedHashMap<java.lang.String,java.lang.String> encodedTemplateValues
-
encodedTemplateValuesView
private final ImmutableMultivaluedMap<java.lang.String,java.lang.String> encodedTemplateValuesView
-
paths
private final java.util.LinkedList<java.lang.String> paths
-
matchedRuntimeResources
private final java.util.LinkedList<RuntimeResource> matchedRuntimeResources
-
matchedLocators
private final java.util.LinkedList<ResourceMethod> matchedLocators
-
locatorSubResources
private final java.util.LinkedList<Resource> locatorSubResources
-
tracingLogger
private final TracingLogger tracingLogger
-
matchedResourceMethod
private volatile ResourceMethod matchedResourceMethod
-
mappedThrowable
private volatile java.lang.Throwable mappedThrowable
-
endpoint
private Endpoint endpoint
-
decodedTemplateValues
private javax.ws.rs.core.MultivaluedHashMap<java.lang.String,java.lang.String> decodedTemplateValues
-
decodedTemplateValuesView
private ImmutableMultivaluedMap<java.lang.String,java.lang.String> decodedTemplateValuesView
-
encodedQueryParamsView
private ImmutableMultivaluedMap<java.lang.String,java.lang.String> encodedQueryParamsView
-
decodedQueryParamsView
private ImmutableMultivaluedMap<java.lang.String,java.lang.String> decodedQueryParamsView
-
requestContext
private final ContainerRequest requestContext
-
PATH_DECODER
private static final java.util.function.Function<java.lang.String,java.lang.String> PATH_DECODER
-
-
Constructor Detail
-
UriRoutingContext
public UriRoutingContext(ContainerRequest requestContext)
Injection constructor.- Parameters:
requestContext
- request reference.
-
-
Method Detail
-
pushMatchResult
public void pushMatchResult(java.util.regex.MatchResult matchResult)
Description copied from interface:RoutingContext
Push the result of the successful request URI routing pattern match.- Specified by:
pushMatchResult
in interfaceRoutingContext
- Parameters:
matchResult
- successful request URI routing patternmatch result
.
-
pushMatchedResource
public void pushMatchedResource(java.lang.Object resource)
Description copied from interface:RoutingContext
Push the resource that matched the request URI.- Specified by:
pushMatchedResource
in interfaceRoutingContext
- Parameters:
resource
- instance of the resource that matched the request URI.
-
peekMatchedResource
public java.lang.Object peekMatchedResource()
Description copied from interface:RoutingContext
Peek the last resource object that successfully matched the request URI.- Specified by:
peekMatchedResource
in interfaceRoutingContext
- Returns:
- last resource matched as previously set by
RoutingContext.pushMatchedResource(java.lang.Object)
-
pushMatchedLocator
public void pushMatchedLocator(ResourceMethod resourceLocator)
Description copied from interface:RoutingContext
Push the matchedsub resource locator method
.- Specified by:
pushMatchedLocator
in interfaceRoutingContext
- Parameters:
resourceLocator
- Sub resource locator method.
-
pushLeftHandPath
public void pushLeftHandPath()
Description copied from interface:RoutingContext
Add currently matched left-hand side part of request path to the list of matched paths returned byUriInfo.getMatchedURIs()
. Left-hand side request path is the request path excluding the suffix part of the path matched by thefinal matching group
of the last successful request URI routing pattern.- Specified by:
pushLeftHandPath
in interfaceRoutingContext
-
pushTemplates
public void pushTemplates(UriTemplate resourceTemplate, UriTemplate methodTemplate)
Description copied from interface:RoutingContext
Push matched request URI routing patterntemplates
for a single matched method.In case only a single path matching has been performed on the resource (in case of resource methods, only the resource path is matched), the method template should be passed as
null
. In case a path matching has been performed on both a resource and method paths (in case of sub-resource methods and locators), both templates (resource and method) must be specified.- Specified by:
pushTemplates
in interfaceRoutingContext
- Parameters:
resourceTemplate
- resource URI template that should be pushed.methodTemplate
- (sub-resource) method or locator URI template that should be pushed.
-
pushMatchedTemplateValues
private void pushMatchedTemplateValues(UriTemplate template, java.util.regex.MatchResult matchResult)
-
getFinalMatchingGroup
public java.lang.String getFinalMatchingGroup()
Description copied from interface:RoutingContext
Get the final matching group of the last successful request URI routing patternmatch result
. Also known as right-hand path.May be empty but is never
null
.- Specified by:
getFinalMatchingGroup
in interfaceRoutingContext
- Returns:
- final matching group of the last successful request URI routing pattern match result.
-
getMatchedResults
public java.util.LinkedList<java.util.regex.MatchResult> getMatchedResults()
Description copied from interface:ExtendedUriInfo
Get a read-only list ofMatchResult
for matched resources. Entries are ordered in reverse request URI matching order, with the root resource match result last.- Specified by:
getMatchedResults
in interfaceExtendedUriInfo
- Returns:
- a read-only list of match results for matched resources.
-
setEndpoint
public void setEndpoint(Endpoint endpoint)
Description copied from interface:RoutingContext
Set the matched server-side endpoint. This method can be used in a non-terminal stage to set the server-side endpoint that can be retrieved and processed by a subsequent stage.- Specified by:
setEndpoint
in interfaceRoutingContext
- Parameters:
endpoint
- matched server-side endpoint.
-
getEndpoint
public Endpoint getEndpoint()
Description copied from interface:RoutingContext
Get the matched server-side endpoint if present, ornull
otherwise.- Specified by:
getEndpoint
in interfaceRoutingContext
- Returns:
- matched server-side endpoint, or
null
if not available.
-
setMatchedResourceMethod
public void setMatchedResourceMethod(ResourceMethod resourceMethod)
Description copied from interface:RoutingContext
Set the matchedresource method
. This method needs to be called only if the method was matched. This method should be called only for setting the final resource method and not for setting sub resource locators invoked during matching.- Specified by:
setMatchedResourceMethod
in interfaceRoutingContext
- Parameters:
resourceMethod
- Resource method that was matched.
-
pushMatchedRuntimeResource
public void pushMatchedRuntimeResource(RuntimeResource runtimeResource)
Description copied from interface:RoutingContext
Push a matchedruntime resource
that was visited during matching phase. This method must be called for any matched runtime resource.- Specified by:
pushMatchedRuntimeResource
in interfaceRoutingContext
- Parameters:
runtimeResource
- Runtime resource that was matched during matching.
-
pushLocatorSubResource
public void pushLocatorSubResource(Resource subResourceFromLocator)
Description copied from interface:RoutingContext
Pushsub resource
returned from a sub resource locator method. The pushedsubResourceFromLocator
is the final model of a sub resource which is already enhanced bymodel processors
and validated.- Specified by:
pushLocatorSubResource
in interfaceRoutingContext
- Parameters:
subResourceFromLocator
- Resource constructed from result of sub resource locator method.
-
getAbsolutePath
public java.net.URI getAbsolutePath()
- Specified by:
getAbsolutePath
in interfacejavax.ws.rs.core.UriInfo
-
getAbsolutePathBuilder
public javax.ws.rs.core.UriBuilder getAbsolutePathBuilder()
- Specified by:
getAbsolutePathBuilder
in interfacejavax.ws.rs.core.UriInfo
-
getBaseUri
public java.net.URI getBaseUri()
- Specified by:
getBaseUri
in interfacejavax.ws.rs.core.UriInfo
-
getBaseUriBuilder
public javax.ws.rs.core.UriBuilder getBaseUriBuilder()
- Specified by:
getBaseUriBuilder
in interfacejavax.ws.rs.core.UriInfo
-
getMatchedResources
public java.util.List<java.lang.Object> getMatchedResources()
- Specified by:
getMatchedResources
in interfacejavax.ws.rs.core.UriInfo
-
getMatchedURIs
public java.util.List<java.lang.String> getMatchedURIs()
- Specified by:
getMatchedURIs
in interfacejavax.ws.rs.core.UriInfo
-
getMatchedURIs
public java.util.List<java.lang.String> getMatchedURIs(boolean decode)
- Specified by:
getMatchedURIs
in interfacejavax.ws.rs.core.UriInfo
-
getPath
public java.lang.String getPath()
- Specified by:
getPath
in interfacejavax.ws.rs.core.UriInfo
-
getPath
public java.lang.String getPath(boolean decode)
- Specified by:
getPath
in interfacejavax.ws.rs.core.UriInfo
-
getPathParameters
public javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getPathParameters()
- Specified by:
getPathParameters
in interfacejavax.ws.rs.core.UriInfo
-
getPathParameters
public javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getPathParameters(boolean decode)
- Specified by:
getPathParameters
in interfacejavax.ws.rs.core.UriInfo
-
getPathSegments
public java.util.List<javax.ws.rs.core.PathSegment> getPathSegments()
- Specified by:
getPathSegments
in interfacejavax.ws.rs.core.UriInfo
-
getPathSegments
public java.util.List<javax.ws.rs.core.PathSegment> getPathSegments(boolean decode)
- Specified by:
getPathSegments
in interfacejavax.ws.rs.core.UriInfo
-
getQueryParameters
public javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getQueryParameters()
- Specified by:
getQueryParameters
in interfacejavax.ws.rs.core.UriInfo
-
getQueryParameters
public javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> getQueryParameters(boolean decode)
- Specified by:
getQueryParameters
in interfacejavax.ws.rs.core.UriInfo
-
invalidateUriComponentViews
public void invalidateUriComponentViews()
Invalidate internal URI component cache views.This method needs to be called if request URI information changes.
-
getRequestUri
public java.net.URI getRequestUri()
- Specified by:
getRequestUri
in interfacejavax.ws.rs.core.UriInfo
-
getRequestUriBuilder
public javax.ws.rs.core.UriBuilder getRequestUriBuilder()
- Specified by:
getRequestUriBuilder
in interfacejavax.ws.rs.core.UriInfo
-
getMappedThrowable
public java.lang.Throwable getMappedThrowable()
Description copied from interface:ExtendedUriInfo
Get the throwable that was mapped to a response.A response filter or a message body writer may utilize this method to determine if a resource method was invoked but did not return a response because an exception was thrown from the resource method, or the resource method returned but a response filter threw an exception.
- Specified by:
getMappedThrowable
in interfaceExtendedUriInfo
- Returns:
- the throwable that was mapped to a response, otherwise null if no throwable was mapped to a response.
-
setMappedThrowable
public void setMappedThrowable(java.lang.Throwable mappedThrowable)
Description copied from interface:RoutingContext
Set the throwable that was mapped to a response.- Specified by:
setMappedThrowable
in interfaceRoutingContext
- Parameters:
mappedThrowable
- throwable that was mapped to a response.- See Also:
ExtendedUriInfo.getMappedThrowable()
-
getMatchedTemplates
public java.util.List<UriTemplate> getMatchedTemplates()
Description copied from interface:ExtendedUriInfo
Get a read-only list ofUriTemplate
for matched resources. Each entry is a URI template that is the value of thePath
that is a partial path that matched a resource class, a sub-resource method or a sub-resource locator. Entries are ordered in reverse request URI matching order, with the root resource URI template last.- Specified by:
getMatchedTemplates
in interfaceExtendedUriInfo
- Returns:
- a read-only list of URI templates for matched resources.
-
getPathSegments
public java.util.List<javax.ws.rs.core.PathSegment> getPathSegments(java.lang.String name)
Description copied from interface:ExtendedUriInfo
Get the path segments that contain a template variable. All sequences of escaped octets are decoded, equivalent togetPathSegments(true)
.- Specified by:
getPathSegments
in interfaceExtendedUriInfo
- Parameters:
name
- the template variable name- Returns:
- the path segments, the list will be empty the matching path does not contain the template
-
getPathSegments
public java.util.List<javax.ws.rs.core.PathSegment> getPathSegments(java.lang.String name, boolean decode)
Description copied from interface:ExtendedUriInfo
Get the path segments that contain a template variable.- Specified by:
getPathSegments
in interfaceExtendedUriInfo
- Parameters:
name
- the template variable namedecode
- controls whether sequences of escaped octets are decoded (true) or not (false).- Returns:
- the path segments, the list will be empty the matching path does not contain the template
-
getPathParameterBounds
private int[] getPathParameterBounds(java.lang.String name)
-
getLastPathParameterIndex
private int getLastPathParameterIndex(java.lang.String name, UriTemplate t)
-
getResourceMethod
public java.lang.reflect.Method getResourceMethod()
- Specified by:
getResourceMethod
in interfacejavax.ws.rs.container.ResourceInfo
-
getResourceClass
public java.lang.Class<?> getResourceClass()
- Specified by:
getResourceClass
in interfacejavax.ws.rs.container.ResourceInfo
-
getMatchedRuntimeResources
public java.util.List<RuntimeResource> getMatchedRuntimeResources()
Description copied from interface:ExtendedUriInfo
Return all matchedruntime resources
including runtime resources based on child resources. The list is ordered so that theruntime resource
currently being processed is the first element in the list. The following example@Path("foo") public class FooResource { @GET public String getFoo() {...} @Path("bar") public BarResource getBarResource() {...} } public class BarResource { @GET public String getBar() {...} }
The values returned by this method based on request uri and where the method is called from are:
Request Called from Value(s) GET /foo FooResource.getFoo RuntimeResource["/foo"] GET /foo/bar FooResource.getBarResource RuntimeResource["foo/bar"], Resource["foo"] GET /foo/bar BarResource.getBar RuntimeResource[no path; based on BarResource.class], RuntimeResource["foo/bar"], RuntimeResource["foo"] - Specified by:
getMatchedRuntimeResources
in interfaceExtendedUriInfo
- Returns:
- List of resources and child resources that were processed during request matching.
-
getMatchedResourceMethod
public ResourceMethod getMatchedResourceMethod()
Description copied from interface:ExtendedUriInfo
Get matchedresource method
that is invoked. Note that sub resource locator is not not considered as a matched resource method and calling the method from sub resource locator will therefore return null.- Specified by:
getMatchedResourceMethod
in interfaceExtendedUriInfo
- Returns:
- The matched resource method that was invoked or null if no resource method was invoked.
-
getMatchedResourceLocators
public java.util.List<ResourceMethod> getMatchedResourceLocators()
Description copied from interface:ExtendedUriInfo
Get resource locators matched since beginning of a matching. The list contains resource locators sorted in the order that the first element of the list is the last locator executed (LIFO ordering). The method can be invoked from request scoped code. When method is invoked from the resource locator itself such a locator will be already in the returned list as a first element.The resource locator is a
resource method
which is annotated by the@Path
and returns a sub resource.- Specified by:
getMatchedResourceLocators
in interfaceExtendedUriInfo
- Returns:
- List of matched resource locators.
-
getLocatorSubResources
public java.util.List<Resource> getLocatorSubResources()
Description copied from interface:ExtendedUriInfo
Get the list of sub resources returned from resource locators during matching. The sub resources are sorted in the order, so that the first element of the list is a sub resource that was lastly returned from the resource locator (LIFO ordering). Sub resource is a resource that is returned from invoked resource locator method and that will be used for further resource matching.- Specified by:
getLocatorSubResources
in interfaceExtendedUriInfo
- Returns:
- Locator sub resource.
-
getMatchedModelResource
public Resource getMatchedModelResource()
Description copied from interface:ExtendedUriInfo
Get matchedmodel resource
from whichthe matched
resource method was invoked. The resource can also be a child if the matched method is a sub resource method. Note that method return only resource containing finally matchedresource method
and not intermediary processed resources (parent resources or resources containing sub resource locators).- Specified by:
getMatchedModelResource
in interfaceExtendedUriInfo
- Returns:
- The matched model resource or null if no resource was matched.
-
resolve
public java.net.URI resolve(java.net.URI uri)
- Specified by:
resolve
in interfacejavax.ws.rs.core.UriInfo
-
relativize
public java.net.URI relativize(java.net.URI uri)
- Specified by:
relativize
in interfacejavax.ws.rs.core.UriInfo
-
-