Class UriRoutingContext
- java.lang.Object
-
- org.glassfish.jersey.server.internal.routing.UriRoutingContext
-
- All Implemented Interfaces:
ResourceInfo,UriInfo,ExtendedUriInfo,RoutingContext
public class UriRoutingContext extends Object implements RoutingContext
Default implementation of the routing context as well as URI information provider.- Author:
- Marek Potociar
-
-
Constructor Summary
Constructors Constructor Description UriRoutingContext(ContainerRequest requestContext)Injection constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description URIgetAbsolutePath()Get the absolute path of the request.UriBuildergetAbsolutePathBuilder()Get the absolute path of the request in the form of a UriBuilder.URIgetBaseUri()Get the base URI of the application.UriBuildergetBaseUriBuilder()Get the base URI of the application in the form of a UriBuilder.EndpointgetEndpoint()Get the matched server-side endpoint if present, ornullotherwise.StringgetFinalMatchingGroup()Get the final matching group of the last successful request URI routing patternmatch result.List<Resource>getLocatorSubResources()Get the list of sub resources returned from resource locators during matching.ThrowablegetMappedThrowable()Get the throwable that was mapped to a response.ResourcegetMatchedModelResource()Get matchedmodel resourcefrom whichthe matchedresource method was invoked.List<ResourceMethod>getMatchedResourceLocators()Get resource locators matched since beginning of a matching.ResourceMethodgetMatchedResourceMethod()Get matchedresource methodthat is invoked.List<Object>getMatchedResources()Get a read-only list of the currently matched resource class instances.LinkedList<MatchResult>getMatchedResults()Get a read-only list ofMatchResultfor matched resources.List<RuntimeResource>getMatchedRuntimeResources()Return all matchedruntime resourcesincluding runtime resources based on child resources.List<UriTemplate>getMatchedTemplates()Get a read-only list ofUriTemplatefor matched resources.List<String>getMatchedURIs()Get a read-only list of URIs for matched resources.List<String>getMatchedURIs(boolean decode)Get a read-only list of URIs for matched resources.StringgetPath()Get the path of the current request relative to the base URI as a string.StringgetPath(boolean decode)Get the path of the current request relative to the base URI as a string.MultivaluedMap<String,String>getPathParameters()Get the values of any embedded URI template parameters.MultivaluedMap<String,String>getPathParameters(boolean decode)Get the values of any embedded URI template parameters.List<PathSegment>getPathSegments()Get the path of the current request relative to the base URI as a list ofPathSegment.List<PathSegment>getPathSegments(boolean decode)Get the path of the current request relative to the base URI as a list ofPathSegment.List<PathSegment>getPathSegments(String name)Get the path segments that contain a template variable.List<PathSegment>getPathSegments(String name, boolean decode)Get the path segments that contain a template variable.MultivaluedMap<String,String>getQueryParameters()Get the URI query parameters of the current request.MultivaluedMap<String,String>getQueryParameters(boolean decode)Get the URI query parameters of the current request.URIgetRequestUri()Get the absolute request URI including any query parameters.UriBuildergetRequestUriBuilder()Get the absolute request URI in the form of a UriBuilder.Class<?>getResourceClass()Get the resource class that is the target of a request, ornullif this information is not available.MethodgetResourceMethod()Get the resource method that is the target of a request, ornullif this information is not available.voidinvalidateUriComponentViews()Invalidate internal URI component cache views.ObjectpeekMatchedResource()Peek the last resource object that successfully matched the request URI.voidpushLeftHandPath()Add currently matched left-hand side part of request path to the list of matched paths returned byUriInfo.getMatchedURIs().voidpushLocatorSubResource(Resource subResourceFromLocator)Pushsub resourcereturned from a sub resource locator method.voidpushMatchedLocator(ResourceMethod resourceLocator)Push the matchedsub resource locator method.voidpushMatchedResource(Object resource)Push the resource that matched the request URI.voidpushMatchedRuntimeResource(RuntimeResource runtimeResource)Push a matchedruntime resourcethat was visited during matching phase.voidpushMatchResult(MatchResult matchResult)Push the result of the successful request URI routing pattern match.voidpushTemplates(UriTemplate resourceTemplate, UriTemplate methodTemplate)Push matched request URI routing patterntemplatesfor a single matched method.URIrelativize(URI uri)Relativize a URI with respect to the current request URI.URIresolve(URI uri)Resolve a relative URI with respect to the base URI of the application.voidsetEndpoint(Endpoint endpoint)Set the matched server-side endpoint.voidsetMappedThrowable(Throwable mappedThrowable)Set the throwable that was mapped to a response.voidsetMatchedResourceMethod(ResourceMethod resourceMethod)Set the matchedresource method.
-
-
-
Constructor Detail
-
UriRoutingContext
public UriRoutingContext(ContainerRequest requestContext)
Injection constructor.- Parameters:
requestContext- request reference.
-
-
Method Detail
-
pushMatchResult
public void pushMatchResult(MatchResult matchResult)
Description copied from interface:RoutingContextPush the result of the successful request URI routing pattern match.- Specified by:
pushMatchResultin interfaceRoutingContext- Parameters:
matchResult- successful request URI routing patternmatch result.
-
pushMatchedResource
public void pushMatchedResource(Object resource)
Description copied from interface:RoutingContextPush the resource that matched the request URI.- Specified by:
pushMatchedResourcein interfaceRoutingContext- Parameters:
resource- instance of the resource that matched the request URI.
-
peekMatchedResource
public Object peekMatchedResource()
Description copied from interface:RoutingContextPeek the last resource object that successfully matched the request URI.- Specified by:
peekMatchedResourcein interfaceRoutingContext- Returns:
- last resource matched as previously set by
RoutingContext.pushMatchedResource(java.lang.Object)
-
pushMatchedLocator
public void pushMatchedLocator(ResourceMethod resourceLocator)
Description copied from interface:RoutingContextPush the matchedsub resource locator method.- Specified by:
pushMatchedLocatorin interfaceRoutingContext- Parameters:
resourceLocator- Sub resource locator method.
-
pushLeftHandPath
public void pushLeftHandPath()
Description copied from interface:RoutingContextAdd 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 groupof the last successful request URI routing pattern.- Specified by:
pushLeftHandPathin interfaceRoutingContext
-
pushTemplates
public void pushTemplates(UriTemplate resourceTemplate, UriTemplate methodTemplate)
Description copied from interface:RoutingContextPush matched request URI routing patterntemplatesfor 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:
pushTemplatesin interfaceRoutingContext- Parameters:
resourceTemplate- resource URI template that should be pushed.methodTemplate- (sub-resource) method or locator URI template that should be pushed.
-
getFinalMatchingGroup
public String getFinalMatchingGroup()
Description copied from interface:RoutingContextGet 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:
getFinalMatchingGroupin interfaceRoutingContext- Returns:
- final matching group of the last successful request URI routing pattern match result.
-
getMatchedResults
public LinkedList<MatchResult> getMatchedResults()
Description copied from interface:ExtendedUriInfoGet a read-only list ofMatchResultfor matched resources. Entries are ordered in reverse request URI matching order, with the root resource match result last.- Specified by:
getMatchedResultsin interfaceExtendedUriInfo- Returns:
- a read-only list of match results for matched resources.
-
setEndpoint
public void setEndpoint(Endpoint endpoint)
Description copied from interface:RoutingContextSet 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:
setEndpointin interfaceRoutingContext- Parameters:
endpoint- matched server-side endpoint.
-
getEndpoint
public Endpoint getEndpoint()
Description copied from interface:RoutingContextGet the matched server-side endpoint if present, ornullotherwise.- Specified by:
getEndpointin interfaceRoutingContext- Returns:
- matched server-side endpoint, or
nullif not available.
-
setMatchedResourceMethod
public void setMatchedResourceMethod(ResourceMethod resourceMethod)
Description copied from interface:RoutingContextSet 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:
setMatchedResourceMethodin interfaceRoutingContext- Parameters:
resourceMethod- Resource method that was matched.
-
pushMatchedRuntimeResource
public void pushMatchedRuntimeResource(RuntimeResource runtimeResource)
Description copied from interface:RoutingContextPush a matchedruntime resourcethat was visited during matching phase. This method must be called for any matched runtime resource.- Specified by:
pushMatchedRuntimeResourcein interfaceRoutingContext- Parameters:
runtimeResource- Runtime resource that was matched during matching.
-
pushLocatorSubResource
public void pushLocatorSubResource(Resource subResourceFromLocator)
Description copied from interface:RoutingContextPushsub resourcereturned from a sub resource locator method. The pushedsubResourceFromLocatoris the final model of a sub resource which is already enhanced bymodel processorsand validated.- Specified by:
pushLocatorSubResourcein interfaceRoutingContext- Parameters:
subResourceFromLocator- Resource constructed from result of sub resource locator method.
-
getAbsolutePath
public URI getAbsolutePath()
Description copied from interface:UriInfoGet the absolute path of the request. This includes everything preceding the path (host, port etc) but excludes query parameters. This is a shortcut foruriInfo.getBaseUri().resolve(uriInfo.getPath(false)).- Specified by:
getAbsolutePathin interfaceUriInfo- Returns:
- the absolute path of the request.
-
getAbsolutePathBuilder
public UriBuilder getAbsolutePathBuilder()
Description copied from interface:UriInfoGet the absolute path of the request in the form of a UriBuilder. This includes everything preceding the path (host, port etc) but excludes query parameters.- Specified by:
getAbsolutePathBuilderin interfaceUriInfo- Returns:
- a UriBuilder initialized with the absolute path of the request.
-
getBaseUri
public URI getBaseUri()
Description copied from interface:UriInfoGet the base URI of the application. URIs of root resource classes are all relative to this base URI.- Specified by:
getBaseUriin interfaceUriInfo- Returns:
- the base URI of the application.
-
getBaseUriBuilder
public UriBuilder getBaseUriBuilder()
Description copied from interface:UriInfoGet the base URI of the application in the form of a UriBuilder.- Specified by:
getBaseUriBuilderin interfaceUriInfo- Returns:
- a UriBuilder initialized with the base URI of the application.
-
getMatchedResources
public List<Object> getMatchedResources()
Description copied from interface:UriInfoGet a read-only list of the currently matched resource class instances. Each entry is a resource class instance that matched the request URI either directly or via a sub-resource method or a sub-resource locator. Entries are ordered according to reverse request URI matching order, with the current resource first. E.g. given the following resource classes:@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:
In case the method is invoked prior to the request matching (e.g. from a pre-matching filter), the method returns an empty list.Matched resources from requests Request Called from Value(s) GET /foo FooResource.getFoo FooResource GET /foo/bar FooResource.getBarResource FooResource GET /foo/bar BarResource.getBar BarResource, FooResource - Specified by:
getMatchedResourcesin interfaceUriInfo- Returns:
- a read-only list of matched resource class instances.
-
getMatchedURIs
public List<String> getMatchedURIs()
Description copied from interface:UriInfoGet a read-only list of URIs for matched resources. Each entry is a relative URI that matched a resource class, a sub-resource method or a sub-resource locator. All sequences of escaped octets are decoded, equivalent togetMatchedURIs(true). Entries do not include query parameters but do include matrix parameters if present in the request URI. Entries are ordered in reverse request URI matching order, with the current resource URI first. E.g. given the following resource classes:@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:
In case the method is invoked prior to the request matching (e.g. from a pre-matching filter), the method returns an empty list.Matched URIs from requests Request Called from Value(s) GET /foo FooResource.getFoo foo GET /foo/bar FooResource.getBarResource foo/bar, foo GET /foo/bar BarResource.getBar foo/bar, foo - Specified by:
getMatchedURIsin interfaceUriInfo- Returns:
- a read-only list of URI paths for matched resources.
-
getMatchedURIs
public List<String> getMatchedURIs(boolean decode)
Description copied from interface:UriInfoGet a read-only list of URIs for matched resources. Each entry is a relative URI that matched a resource class, a sub-resource method or a sub-resource locator. Entries do not include query parameters but do include matrix parameters if present in the request URI. Entries are ordered in reverse request URI matching order, with the current resource URI first. SeeUriInfo.getMatchedURIs()for an example. In case the method is invoked prior to the request matching (e.g. from a pre-matching filter), the method returns an empty list.- Specified by:
getMatchedURIsin interfaceUriInfo- Parameters:
decode- controls whether sequences of escaped octets are decoded (true) or not (false).- Returns:
- a read-only list of URI paths for matched resources.
-
getPath
public String getPath()
Description copied from interface:UriInfoGet the path of the current request relative to the base URI as a string. All sequences of escaped octets are decoded, equivalent togetPath(true).
-
getPath
public String getPath(boolean decode)
Description copied from interface:UriInfoGet the path of the current request relative to the base URI as a string.
-
getPathParameters
public MultivaluedMap<String,String> getPathParameters()
Description copied from interface:UriInfoGet the values of any embedded URI template parameters. All sequences of escaped octets are decoded, equivalent togetPathParameters(true).- Specified by:
getPathParametersin interfaceUriInfo- Returns:
- an unmodifiable map of parameter names and values.
- See Also:
Path,PathParam
-
getPathParameters
public MultivaluedMap<String,String> getPathParameters(boolean decode)
Description copied from interface:UriInfoGet the values of any embedded URI template parameters.- Specified by:
getPathParametersin interfaceUriInfo- Parameters:
decode- controls whether sequences of escaped octets are decoded (true) or not (false).- Returns:
- an unmodifiable map of parameter names and values
- See Also:
Path,PathParam
-
getPathSegments
public List<PathSegment> getPathSegments()
Description copied from interface:UriInfoGet the path of the current request relative to the base URI as a list ofPathSegment. This method is useful when the path needs to be parsed, particularly when matrix parameters may be present in the path. All sequences of escaped octets in path segments and matrix parameter values are decoded, equivalent togetPathSegments(true).- Specified by:
getPathSegmentsin interfaceUriInfo- Returns:
- an unmodifiable list of
PathSegment. The matrix parameter map of each path segment is also unmodifiable. - See Also:
PathSegment, Matrix URIs
-
getPathSegments
public List<PathSegment> getPathSegments(boolean decode)
Description copied from interface:UriInfoGet the path of the current request relative to the base URI as a list ofPathSegment. This method is useful when the path needs to be parsed, particularly when matrix parameters may be present in the path.- Specified by:
getPathSegmentsin interfaceUriInfo- Parameters:
decode- controls whether sequences of escaped octets in path segments and matrix parameter values are decoded (true) or not (false).- Returns:
- an unmodifiable list of
PathSegment. The matrix parameter map of each path segment is also unmodifiable. - See Also:
PathSegment, Matrix URIs
-
getQueryParameters
public MultivaluedMap<String,String> getQueryParameters()
Description copied from interface:UriInfoGet the URI query parameters of the current request. The map keys are the names of the query parameters with any escaped characters decoded. All sequences of escaped octets in parameter names and values are decoded, equivalent togetQueryParameters(true).- Specified by:
getQueryParametersin interfaceUriInfo- Returns:
- an unmodifiable map of query parameter names and values.
-
getQueryParameters
public MultivaluedMap<String,String> getQueryParameters(boolean decode)
Description copied from interface:UriInfoGet the URI query parameters of the current request. The map keys are the names of the query parameters with any escaped characters decoded.- Specified by:
getQueryParametersin interfaceUriInfo- Parameters:
decode- controls whether sequences of escaped octets in parameter names and values are decoded (true) or not (false).- Returns:
- an unmodifiable map of query parameter names and values.
-
invalidateUriComponentViews
public void invalidateUriComponentViews()
Invalidate internal URI component cache views.This method needs to be called if request URI information changes.
-
getRequestUri
public URI getRequestUri()
Description copied from interface:UriInfoGet the absolute request URI including any query parameters.- Specified by:
getRequestUriin interfaceUriInfo- Returns:
- the absolute request URI
-
getRequestUriBuilder
public UriBuilder getRequestUriBuilder()
Description copied from interface:UriInfoGet the absolute request URI in the form of a UriBuilder.- Specified by:
getRequestUriBuilderin interfaceUriInfo- Returns:
- a UriBuilder initialized with the absolute request URI.
-
getMappedThrowable
public Throwable getMappedThrowable()
Description copied from interface:ExtendedUriInfoGet 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:
getMappedThrowablein interfaceExtendedUriInfo- Returns:
- the throwable that was mapped to a response, otherwise null if no throwable was mapped to a response.
-
setMappedThrowable
public void setMappedThrowable(Throwable mappedThrowable)
Description copied from interface:RoutingContextSet the throwable that was mapped to a response.- Specified by:
setMappedThrowablein interfaceRoutingContext- Parameters:
mappedThrowable- throwable that was mapped to a response.- See Also:
ExtendedUriInfo.getMappedThrowable()
-
getMatchedTemplates
public List<UriTemplate> getMatchedTemplates()
Description copied from interface:ExtendedUriInfoGet a read-only list ofUriTemplatefor matched resources. Each entry is a URI template that is the value of thePaththat 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:
getMatchedTemplatesin interfaceExtendedUriInfo- Returns:
- a read-only list of URI templates for matched resources.
-
getPathSegments
public List<PathSegment> getPathSegments(String name)
Description copied from interface:ExtendedUriInfoGet the path segments that contain a template variable. All sequences of escaped octets are decoded, equivalent togetPathSegments(true).- Specified by:
getPathSegmentsin 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 List<PathSegment> getPathSegments(String name, boolean decode)
Description copied from interface:ExtendedUriInfoGet the path segments that contain a template variable.- Specified by:
getPathSegmentsin 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
-
getResourceMethod
public Method getResourceMethod()
Description copied from interface:ResourceInfoGet the resource method that is the target of a request, ornullif this information is not available.- Specified by:
getResourceMethodin interfaceResourceInfo- Returns:
- resource method instance or null
- See Also:
ResourceInfo.getResourceClass()
-
getResourceClass
public Class<?> getResourceClass()
Description copied from interface:ResourceInfoGet the resource class that is the target of a request, ornullif this information is not available.- Specified by:
getResourceClassin interfaceResourceInfo- Returns:
- resource class instance or null
- See Also:
ResourceInfo.getResourceMethod()
-
getMatchedRuntimeResources
public List<RuntimeResource> getMatchedRuntimeResources()
Description copied from interface:ExtendedUriInfoReturn all matchedruntime resourcesincluding runtime resources based on child resources. The list is ordered so that theruntime resourcecurrently 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:
getMatchedRuntimeResourcesin interfaceExtendedUriInfo- Returns:
- List of resources and child resources that were processed during request matching.
-
getMatchedResourceMethod
public ResourceMethod getMatchedResourceMethod()
Description copied from interface:ExtendedUriInfoGet matchedresource methodthat 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:
getMatchedResourceMethodin interfaceExtendedUriInfo- Returns:
- The matched resource method that was invoked or null if no resource method was invoked.
-
getMatchedResourceLocators
public List<ResourceMethod> getMatchedResourceLocators()
Description copied from interface:ExtendedUriInfoGet 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 methodwhich is annotated by the@Pathand returns a sub resource.- Specified by:
getMatchedResourceLocatorsin interfaceExtendedUriInfo- Returns:
- List of matched resource locators.
-
getLocatorSubResources
public List<Resource> getLocatorSubResources()
Description copied from interface:ExtendedUriInfoGet 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:
getLocatorSubResourcesin interfaceExtendedUriInfo- Returns:
- Locator sub resource.
-
getMatchedModelResource
public Resource getMatchedModelResource()
Description copied from interface:ExtendedUriInfoGet matchedmodel resourcefrom whichthe matchedresource 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 methodand not intermediary processed resources (parent resources or resources containing sub resource locators).- Specified by:
getMatchedModelResourcein interfaceExtendedUriInfo- Returns:
- The matched model resource or null if no resource was matched.
-
resolve
public URI resolve(URI uri)
Description copied from interface:UriInfoResolve a relative URI with respect to the base URI of the application. The resolved URI returned by this method is normalized. If the supplied URI is already resolved, it is just returned.
-
relativize
public URI relativize(URI uri)
Description copied from interface:UriInfoRelativize a URI with respect to the current request URI. Relativization works as follows:- If the URI to relativize is already relative, it is first resolved using
UriInfo.resolve(java.net.URI). - The resulting URI is relativized with respect to the current request URI. If the two URIs do not share a prefix, the URI computed in step 1 is returned.
Examples (for base URI
http://example.com:8080/app/root/):
Request URI:http://example.com:8080/app/root/a/b/c/resource.html
Supplied URI:a/b/c/d/file.txt
Returned URI:d/file.txt
Request URI:http://example.com:8080/app/root/a/b/c/resource.html
Supplied URI:http://example2.com:9090/app2/root2/a/d/file.txt
Returned URI:http://example2.com:9090/app2/root2/a/d/file.txtIn the second example, the supplied URI is returned given that it is absolute and there is no common prefix between it and the request URI.
- Specified by:
relativizein interfaceUriInfo- Parameters:
uri- URI to relativize against the request URI.- Returns:
- newly relativized URI.
- If the URI to relativize is already relative, it is first resolved using
-
-