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:
  • Constructor Details

    • 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 Details

    • getThis

      protected Router getThis()
      Description copied from class: AbstractRouter
      Returns this AbstractRouter instance, typed correctly.
      Specified by:
      getThis in class AbstractRouter<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 class AbstractRouter<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 a Describable handler that returns this AbstractRouter's internal api description from the Describable.handleApiRequest(Context, Object) method. All other methods should throw an UnsupportedOperationException, as they should never be used.
      Specified by:
      getSelfApiHandler in class AbstractRouter<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 a Promise representing the asynchronous Response of the given request. If any (asynchronous) processing goes wrong, the promise still contains a Response (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).

      Specified by:
      handle in interface Handler
      Parameters:
      context - The request context.
      request - The request.
      Returns:
      A Promise representing the response to be returned to the caller.