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 aroute matcher
and a corresponding handler, when routing a request the router will callRouteMatcher.evaluate(Context, Object)
for each registered route and use the returnedRouteMatch
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
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Pair<RouteMatcher<Request>,Handler>
getSelfApiHandler()
Return aDescribable
handler that returns thisAbstractRouter
's internal api description from theDescribable.handleApiRequest(Context, Object)
method.protected Router
getThis()
Returns thisAbstractRouter
instance, typed correctly.Promise<Response,NeverThrowsException>
handle(Context context, Request request)
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 Detail
-
Router
public Router()
Creates a new router with no routes defined.
-
Router
public Router(Router 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 Detail
-
getThis
protected Router 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
protected RouteMatcher<Request> uriMatcher(RoutingMode mode, String pattern)
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
protected Pair<RouteMatcher<Request>,Handler> 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
public Promise<Response,NeverThrowsException> handle(Context context, Request request)
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).
-
-