001 package org.apache.turbine.services.jsonrpc;
002
003 import java.io.CharArrayWriter;
004 import java.text.ParseException;
005
006 import javax.servlet.http.HttpServletRequest;
007
008 import org.apache.commons.logging.Log;
009 import org.apache.commons.logging.LogFactory;
010 import org.json.JSONArray;
011 import org.json.JSONObject;
012
013 import com.metaparadigm.jsonrpc.JSONRPCBridge;
014 import com.metaparadigm.jsonrpc.JSONRPCResult;
015
016 public class JSONProcessor
017 {
018 /** Log. */
019 private static Log log = LogFactory.getLog(JSONProcessor.class);
020
021 public static Object processCall(CharArrayWriter cdata, JSONRPCBridge json_bridge, HttpServletRequest request)
022 {
023 // Process the request
024 JSONObject json_req = null;
025 Object json_res = null;
026 try
027 {
028 json_req = new JSONObject(cdata.toString());
029 if (log.isDebugEnabled())
030 {
031 String methodName = json_req.getString("method");
032 JSONArray arguments = json_req.getJSONArray("params");
033
034 // If this a CallableReference it will have a non-zero objectID
035 int object_id = json_req.optInt("objectID");
036 StringBuffer sb = new StringBuffer(".doprocessCall(): call ");
037 if (object_id != 0)
038 {
039 sb.append("objectID=").append(object_id).append(" ");
040 }
041 sb.append(methodName).append("(").append(arguments).append(")");
042 log.debug(sb.toString());
043 }
044 //json_res = json_bridge.call(new Object[] {request}, object_id, methodName, arguments);
045 json_res = json_bridge.call(new Object[] {request}, json_req);
046 }
047 catch (ParseException e)
048 {
049 log.error(".processCall(): can't parse call: " + cdata, e);
050 json_res = JSONRPCResult.MSG_ERR_PARSE;
051 }
052 // Write the response
053 if (log.isDebugEnabled())
054 {
055 log.debug(".processCall(): returns " + json_res.toString());
056 }
057 return json_res;
058 }
059
060 }