JSONRPCServlet改めWebServiceServlet
必要な人がいるのかまったくもって不明なのだが、今月末あたりにリリース予定のJSONIC 0.9.6では、JSONRPCServletの機能強化版としてWebServiceServletが導入されます(JSONRPCServletは廃止)。実装はもう終わっているので今回は確実に出ると思われ。
まず、設定方法はこんな感じ。
<servlet> <description>JSON-WebService</description> <servlet-name>json-ws</servlet-name> <servlet-class>net.arnx.jsonic.web.WebServiceServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value> debug: true encoding: 'UTF-8' mappings: { '/[package]/[class].[ext]': 'sample.web.${package}.service.${class}Service' '/[class].[ext]': 'sample.service.${class}Service' } </param-value> </init-param> </servlet>
"["と"]"で囲まれた部分が変数になっていて、対応するクラスの${ほげ}にマッピングされる。この時[class]の値が"rpc"だったらRPCモードになってJSON-RPCのmethodにクラス名.メソッド名を書くと対象クラスのメソッドが呼び出しできる。一方で[class]の値が"rpc"以外の時はRESTモードになり、GET/POST/PUT/DELETEでそれぞれfind/create/update/deleteメソッドが呼び出される。なお、クラス名に使われなかった変数は、引数のobjectに上書きする形で値がセットされるので、RailsみたいにURLからidを取得したいみたいな要望にも対応できる*1。
前回予告した通り、Seasar2対応の機能も標準添付されるので、次のような記載をするだけでSeasar上で管理されているコンポーネントをJSON-RPC or Restfullにできます。
<init-param> <param-name>config</param-name> <param-value> container: 'net.arnx.jsonic.web.S2Container' ... </param-value> </init-param>