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:
-
AbstractRouterUriRouteMatcherRouteMatchers
-
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
Constructors -
Method Summary
Modifier 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.AbstractRouter
addAllRoutes, addDescriptorListener, addRoute, api, buildApi, getBestApiRoute, getBestRoute, getRoutes, handleApiRequest, notifyDescriptorChange, removeAllRoutes, removeDescriptorListener, removeRoute, setDefaultRouteMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods 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:AbstractRouterReturns thisAbstractRouterinstance, typed correctly.- Specified by:
getThisin classAbstractRouter<Router,Request, Handler, io.swagger.models.Swagger> - Returns:
- This
AbstractRouterinstance.
-
uriMatcher
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
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
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).
-