001    package com.thetransactioncompany.jsonrpc2.server.examples;
002    
003    
004    import java.text.*;
005    import java.util.*;
006    
007    import com.thetransactioncompany.jsonrpc2.*;
008    import com.thetransactioncompany.jsonrpc2.server.*;
009    
010    
011    /**
012     * Demonstrates use of the JSON-RPC 2.0 Server framework. The request handlers 
013     * are implemented as static nested classes for convenience.
014     *
015     * @author Vladimir Dzhuvinov
016     */ 
017    public class Example {
018    
019    
020            // Implements a handler for an "echo" JSON-RPC method
021            public static class EchoHandler implements RequestHandler {
022            
023            
024                    // Reports the method names of the handled requests
025                    public String[] handledRequests() {
026                    
027                            return new String[]{"echo"};
028                    }
029                    
030                    
031                    // Processes the requests
032                    public JSONRPC2Response process(JSONRPC2Request req, MessageContext ctx) {
033                            
034                            if (req.getMethod().equals("echo")) {
035                                    
036                                    // Echo first parameter
037                                    
038                                    List params = (List)req.getParams();
039                            
040                                    Object input = params.get(0);
041                            
042                                    return new JSONRPC2Response(input, req.getID());
043                            }
044                            else {
045                                    // Method name not supported
046                                    
047                                    return new JSONRPC2Response(JSONRPC2Error.METHOD_NOT_FOUND, req.getID());
048                            }
049                    }
050            }
051            
052            
053            // Implements a handler for "getDate" and "getTime" JSON-RPC methods
054            // that return the current date and time
055            public static class DateTimeHandler implements RequestHandler {
056            
057            
058                    // Reports the method names of the handled requests
059                    public String[] handledRequests() {
060                    
061                            return new String[]{"getDate", "getTime"};
062                    }
063                    
064                    
065                    // Processes the requests
066                    public JSONRPC2Response process(JSONRPC2Request req, MessageContext ctx) {
067                    
068                            if (req.getMethod().equals("getDate")) {
069                            
070                                    DateFormat df = DateFormat.getDateInstance();
071                                    
072                                    String date = df.format(new Date());
073                                    
074                                    return new JSONRPC2Response(date, req.getID());
075                            }
076                            else if (req.getMethod().equals("getTime")) {
077                            
078                                    DateFormat df = DateFormat.getTimeInstance();
079                                    
080                                    String time = df.format(new Date());
081                                    
082                                    return new JSONRPC2Response(time, req.getID());
083                            }
084                            else {
085                            
086                                    // Method name not supported
087                                    
088                                    return new JSONRPC2Response(JSONRPC2Error.METHOD_NOT_FOUND, req.getID());
089                            }
090                    }
091            }
092    
093    
094            public static void main(String[] args) {
095            
096                    // Create a new JSON-RPC 2.0 request dispatcher
097                    Dispatcher dispatcher =  new Dispatcher();
098                    
099                    
100                    // Register the "echo", "getDate" and "getTime" handlers with it
101                    dispatcher.register(new EchoHandler());
102                    dispatcher.register(new DateTimeHandler());
103                    
104                    // Simulate an "echo" JSON-RPC 2.0 request
105                    List echoParam = new LinkedList();
106                    echoParam.add("Hello world!");
107                    
108                    JSONRPC2Request req = new JSONRPC2Request("echo", echoParam, "req-id-01");
109                    System.out.println("Request: \n" + req);
110                    
111                    JSONRPC2Response resp = dispatcher.process(req, null);
112                    System.out.println("Response: \n" + resp);
113                    
114                    
115                    // Simulate a "getDate" JSON-RPC 2.0 request
116                    req = new JSONRPC2Request("getDate", "req-id-02");
117                    System.out.println("Request: \n" + req);
118                    
119                    resp = dispatcher.process(req, null);
120                    System.out.println("Response: \n" + resp);
121                    
122                    
123                    // Simulate a "getTime" JSON-RPC 2.0 request
124                    req = new JSONRPC2Request("getTime", "req-id-03");
125                    System.out.println("Request: \n" + req);
126                    
127                    resp = dispatcher.process(req, null);
128                    System.out.println("Response: \n" + resp);
129            }
130    }