Package org.forgerock.http.routing
Class Router
java.lang.Object
org.forgerock.services.routing.AbstractRouter<Router,Request,Handler,io.swagger.models.Swagger>
org.forgerock.http.routing.Router
- All Implemented Interfaces:
Handler
,DescribableHandler
,Describable<io.swagger.models.Swagger,
,Request> Describable.Listener
public final class Router
extends AbstractRouter<Router,Request,Handler,io.swagger.models.Swagger>
implements DescribableHandler
A router which routes requests based on route matchers. Each route is
comprised of a
route matcher
and a corresponding
handler, when routing a request the router will call
RouteMatcher.evaluate(Context, Object)
for each
registered route and use the returned RouteMatch
to determine
which route best matches the request.
Routes may be added and removed from a router as follows:
Handler users = ...; Router router = new Router(); RouteMatcher routeOne = RouteMatchers.requestUriMatcher(EQUALS, "users"); RouteMatcher routeTwo = RouteMatcher.requestUriMatcher(EQUALS, "users/{userId}"); router.addRoute(routeOne, users); router.addRoute(routeTwo, users); // Deregister a route. router.removeRoute(routeOne, routeTwo);
- See Also:
-
AbstractRouter
UriRouteMatcher
RouteMatchers
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.forgerock.services.descriptor.Describable
Describable.Listener
-
Field Summary
Fields inherited from class org.forgerock.services.routing.AbstractRouter
api, thisRouterUriMatcher
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected Pair<RouteMatcher<Request>,
Handler> Return aDescribable
handler that returns thisAbstractRouter
's internal api description from theDescribable.handleApiRequest(Context, Object)
method.protected Router
getThis()
Returns thisAbstractRouter
instance, typed correctly.protected RouteMatcher<Request>
uriMatcher
(RoutingMode mode, String pattern) Create a URI matcher suitable for the request type<R>
.Methods inherited from class org.forgerock.services.routing.AbstractRouter
addAllRoutes, addDescriptorListener, addRoute, api, buildApi, getBestApiRoute, getBestRoute, getRoutes, handleApiRequest, notifyDescriptorChange, removeAllRoutes, removeDescriptorListener, removeRoute, setDefaultRoute
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.forgerock.services.descriptor.Describable
addDescriptorListener, api, handleApiRequest, removeDescriptorListener
-
Constructor Details
-
Router
public Router()Creates a new router with no routes defined. -
Router
Creates a new router containing the same routes and default route as the provided router. Changes to the returned router's routing table will not impact the provided router.- Parameters:
router
- The router to be copied.
-
-
Method Details
-
getThis
Description copied from class:AbstractRouter
Returns thisAbstractRouter
instance, typed correctly.- Specified by:
getThis
in classAbstractRouter<Router,
Request, Handler, io.swagger.models.Swagger> - Returns:
- This
AbstractRouter
instance.
-
uriMatcher
Description copied from class:AbstractRouter
Create a URI matcher suitable for the request type<R>
.- Specified by:
uriMatcher
in classAbstractRouter<Router,
Request, Handler, io.swagger.models.Swagger> - Parameters:
mode
- The routing mode.pattern
- The pattern.- Returns:
- The matcher.
-
getSelfApiHandler
Description copied from class:AbstractRouter
Return aDescribable
handler that returns thisAbstractRouter
's internal api description from theDescribable.handleApiRequest(Context, Object)
method. All other methods should throw anUnsupportedOperationException
, as they should never be used.- Specified by:
getSelfApiHandler
in classAbstractRouter<Router,
Request, Handler, io.swagger.models.Swagger> - Returns:
- The describable handler.
-
handle
Description copied from interface:Handler
Returns aPromise
representing the asynchronousResponse
of the givenrequest
. If any (asynchronous) processing goes wrong, the promise still contains aResponse
(probably from the 4xx or 5xx status code family).A handler that doesn't hand-off the processing to another downstream handler is responsible for creating the response.
The returned
Promise
contains the response returned from the server as-is. This is responsibility of the handler to produce the appropriate error response (404, 500, ...) in case of processing error.Note: As of Promise 2.0 implementation, it is not permitted to throw any runtime exception here. Doing so produce unexpected behaviour (most likely a server-side hang of the processing thread).
-