JSON-RPCを触ってみた。

http://oss.metaparadigm.com/jsonrpc/
から、ダウンロード。

JSON-RPCは、JavaScriptからサーバサイドのJavaオブジェクトをリモート呼び出しするライブラリ。

サーバサイドのJavaオブジェクトを以下のようなJavaScriptのコードから呼び出せる。

var jsonrpc = new JSONRpcClient("/jsonrpc/JSON-RPC");
var result = jsonrpc.hello.sayHello("Hoge");

上記コードでは、サーバのセッションに"hello"という名前で設定されているオブジェクト*1sayHelloメソッドを呼び出している。


上記コードを呼び出すための準備は以下のようになる。


まずは、web.xmlで、JSONRPCServletを、/JSON-RPCマッピングする。

  <servlet>
    <servlet-name>JSONRPCServlet</servlet-name>
    <servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>JSONRPCServlet</servlet-name>
    <url-pattern>/JSON-RPC</url-pattern>
  </servlet-mapping>

次に、実際に呼び出されるJavaのクラスを用意。

package hoge;
public class Hello {
    public String sayHello(String who) {
        return "Hello " + who;
    }
}

最後に、上記コードを含んだJSP(hello.jsp)を用意。

<jsp:useBean id="JSONRPCBridge" scope="session"
     class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<% JSONRPCBridge.registerObject("hello", new hoge.Hello()); %>
<html>
  <head>
    <script type="text/javascript" src="jsonrpc.js"></script>
  </head>
  <body>
    <script type="text/javascript">
	  jsonrpc = new JSONRpcClient("/jsonrpc/JSON-RPC");
	  var result = jsonrpc.hello.sayHello("Hoge");
	  document.write(result);
    </script>
  </body>
</html>

このJSPの要点は以下の3つ。

  • JSONRPCBridge"JSONRPCBridge"という名前でセッションに設定。
  • JSONRPCBridgeオブジェクトのregisterObject()hoge.Helloオブジェクトを登録。
  • JSON-RPCで用意されているjsonrpc.jsを読込。

こいつらを以下の構成でWebアプリとしてまとめて、

 /
  +--jsonroc.js
  +--hello.jsp
  +--WEB-INF/
     +--web.xml
     +--lib/
        +--jsonrpc.jar

適当にサーバにデプロイして、hello.jspを呼びせば、画面に"Hello Hoge" と表示される。


割と簡単にサーバサイドと連携できる。


このときのサーバとのやり取りを覗くと、リクエストでは

{"method": "hello.sayHello", "params": ["Hoge"]}

がリクエストボディに設定され、レスポンスボディには以下のテキストが設定されて返されている。

{"result":"Hello Hoge"}

*1:実際はセッションに設定されているJSONRPCBridgeにhelloオブジェクトを登録する。