com.thetransactioncompany.jsonrpc2.server

## Class Dispatcher

- java.lang.Object
- - com.thetransactioncompany.jsonrpc2.server.Dispatcher

- All Implemented Interfaces:
    NotificationHandler, RequestHandler

      public class Dispatcher
      extends Object
      implements RequestHandler, NotificationHandler

  Dispatcher for JSON-RPC 2.0 requests and notifications. This class is tread-safe.

  Use the `register()` methods to add a request or notification handler for an RPC method.

  Use the `process()` methods to have an incoming request or notification processed by the matching handler.

  The `reportProcTime()` method enables reporting of request processing time (in microseconds) by appending a non-standard "xProcTime" attribute to the resulting JSON-RPC 2.0 response message.

  Example:

       {
         "result"    : "xyz",
         "id"        : 1,
         "jsonrpc"   : "2.0",
         "xProcTime" : "189 us"
       }

  Note: The dispatch(...) methods were deprecated in version 1.7. Use process(...) instead.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `Dispatcher()` Creates a new dispatcher with no registered handlers.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `NotificationHandler` | `getNotificationHandler(String notificationName)` Gets the handler for the specified JSON-RPC 2.0 notification name.
    `RequestHandler` | `getRequestHandler(String requestName)` Gets the handler for the specified JSON-RPC 2.0 request name.
    `String[]` | `handledNotifications()` Gets the names of the handled JSON-RPC 2.0 notification methods.
    `String[]` | `handledRequests()` Gets the names of the handled JSON-RPC 2.0 request methods.
    `void` | `process(JSONRPC2Notification notification, MessageContext notificationCtx)` Processes a JSON-RPC 2.0 notification.
    `JSONRPC2Response` | `process(JSONRPC2Request request, MessageContext requestCtx)` Processes a JSON-RPC 2.0 request.
    `void` | `register(NotificationHandler handler)` Registers a new JSON-RPC 2.0 notification handler.
    `void` | `register(RequestHandler handler)` Registers a new JSON-RPC 2.0 request handler.
    `void` | `reportProcTime(boolean enable)` Controls reporting of request processing time by appending a non-standard "xProcTime" attribute to the JSON-RPC 2.0 response.
    `boolean` | `reportsProcTime()` Returns `true` if reporting of request processing time is enabled.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### Dispatcher

          public Dispatcher()

      Creates a new dispatcher with no registered handlers.

  - ### Method Detail

    - #### getNotificationHandler

          public NotificationHandler getNotificationHandler(String notificationName)

      Gets the handler for the specified JSON-RPC 2.0 notification name.
      Parameters:
        `notificationName` - The notification name to lookup.
      Returns:
        The corresponding notification handler or `null` if none was found.

    - #### getRequestHandler

          public RequestHandler getRequestHandler(String requestName)

      Gets the handler for the specified JSON-RPC 2.0 request name.
      Parameters:
        `requestName` - The request name to lookup.
      Returns:
        The corresponding request handler or `null` if none was found.

    - #### handledNotifications

          public String[] handledNotifications()

      Description copied from interface: `NotificationHandler`
      Gets the names of the handled JSON-RPC 2.0 notification methods.
      Specified by:
        `handledNotifications` in interface `NotificationHandler`
      Returns:
        The names of the handled JSON-RPC 2.0 notification methods.

    - #### handledRequests

          public String[] handledRequests()

      Description copied from interface: `RequestHandler`
      Gets the names of the handled JSON-RPC 2.0 request methods.
      Specified by:
        `handledRequests` in interface `RequestHandler`
      Returns:
        The names of the handled JSON-RPC 2.0 request methods.

    - #### process

          public void process(JSONRPC2Notification notification,
                              MessageContext notificationCtx)

      Description copied from interface: `NotificationHandler`
      Processes a JSON-RPC 2.0 notification.

      Note that JSON-RPC 2.0 notifications don't produce a response!

      Specified by:
        `process` in interface `NotificationHandler`
      Parameters:
        `notification` - A valid JSON-RPC 2.0 notification instance. Must not be `null`.
        `notificationCtx` - Context information about the notification message, may be `null` if undefined.

    - #### process

          public JSONRPC2Response process(JSONRPC2Request request,
                                          MessageContext requestCtx)

      Description copied from interface: `RequestHandler`
      Processes a JSON-RPC 2.0 request.
      Specified by:
        `process` in interface `RequestHandler`
      Parameters:
        `request` - A valid JSON-RPC 2.0 request instance. Must not be `null`.
        `requestCtx` - Context information about the request message, may be `null` if undefined.
      Returns:
        The resulting JSON-RPC 2.0 response. It indicates success or an error, such as METHOD_NOT_FOUND.

    - #### register

          public void register(NotificationHandler handler)

      Registers a new JSON-RPC 2.0 notification handler.
      Parameters:
        `handler` - The notification handler to register. Must not be `null`.
      Throws:
        `IllegalArgumentException` - On attempting to register a handler that duplicates an existing notification name.

    - #### register

          public void register(RequestHandler handler)

      Registers a new JSON-RPC 2.0 request handler.
      Parameters:
        `handler` - The request handler to register. Must not be `null`.
      Throws:
        `IllegalArgumentException` - On attempting to register a handler that duplicates an existing request name.

    - #### reportProcTime

          public void reportProcTime(boolean enable)

      Controls reporting of request processing time by appending a non-standard "xProcTime" attribute to the JSON-RPC 2.0 response. Reporting is disabled by default.
      Parameters:
        `enable` - `true` to enable proccessing time reporting, `false` to disable it.

    - #### reportsProcTime

          public boolean reportsProcTime()

      Returns `true` if reporting of request processing time is enabled. See the `reportProcTime` description for more information.
      Returns:
        `true` if reporting of request processing time is enabled, else `false`.