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    }