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 matcherand a corresponding handler, when routing a request the router will callRouteMatcher.evaluate(Context, Object)for each registered route and use the returnedRouteMatchto 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 aDescribablehandler that returns thisAbstractRouter's internal api description from theDescribable.handleApiRequest(Context, Object)method.protected RoutergetThis()Returns thisAbstractRouterinstance, 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:AbstractRouterReturns thisAbstractRouterinstance, typed correctly.- Specified by:
getThisin classAbstractRouter<Router,Request,Handler,io.swagger.models.Swagger>- Returns:
- This
AbstractRouterinstance.
-
uriMatcher
protected RouteMatcher<Request> uriMatcher(RoutingMode mode, String pattern)
Description copied from class:AbstractRouterCreate a URI matcher suitable for the request type<R>.- Specified by:
uriMatcherin 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: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 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: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).
-
-