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 SummaryNested classes/interfaces inherited from interface org.forgerock.services.descriptor.DescribableDescribable.Listener
- 
Field SummaryFields inherited from class org.forgerock.services.routing.AbstractRouterapi, thisRouterUriMatcher
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected Pair<RouteMatcher<Request>,Handler> Return aDescribablehandler that returns thisAbstractRouter's internal api description from theDescribable.handleApiRequest(Context, Object)method.protected RoutergetThis()Returns thisAbstractRouterinstance, 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.AbstractRouteraddAllRoutes, addDescriptorListener, addRoute, api, buildApi, getBestApiRoute, getBestRoute, getRoutes, handleApiRequest, notifyDescriptorChange, removeAllRoutes, removeDescriptorListener, removeRoute, setDefaultRouteMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.forgerock.services.descriptor.DescribableaddDescriptorListener, api, handleApiRequest, removeDescriptorListener
- 
Constructor Details- 
Routerpublic Router()Creates a new router with no routes defined.
- 
RouterCreates 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- 
getThisDescription copied from class:AbstractRouterReturns thisAbstractRouterinstance, typed correctly.- Specified by:
- getThisin class- AbstractRouter<Router,- Request, - Handler, - io.swagger.models.Swagger> 
- Returns:
- This AbstractRouterinstance.
 
- 
uriMatcherDescription copied from class:AbstractRouterCreate a URI matcher suitable for the request type<R>.- Specified by:
- uriMatcherin class- AbstractRouter<Router,- Request, - Handler, - io.swagger.models.Swagger> 
- Parameters:
- mode- The routing mode.
- pattern- The pattern.
- Returns:
- The matcher.
 
- 
getSelfApiHandlerDescription copied from class:AbstractRouterReturn aDescribablehandler 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:
- getSelfApiHandlerin class- AbstractRouter<Router,- Request, - Handler, - io.swagger.models.Swagger> 
- Returns:
- The describable handler.
 
- 
handleDescription copied from interface:HandlerReturns aPromiserepresenting the asynchronousResponseof 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 Promisecontains 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). 
 
-