Class 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.

    Author:
    Vladimir Dzhuvinov
    • Constructor Detail

      • Dispatcher

        public Dispatcher()
        Creates a new dispatcher with no registered handlers.
    • Method Detail

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