Clover coverage report - CRISPY - 1.1.1
Coverage timestamp: Mi Nov 15 2006 13:09:46 CET
file stats: LOC: 169   Methods: 8
NCLOC: 119   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
RestServlet.java 100% 89% 100% 90,8%
coverage coverage
 1    package net.sf.crispy.impl.rest;
 2   
 3    import java.io.IOException;
 4    import java.io.PrintWriter;
 5    import java.lang.reflect.Method;
 6    import java.util.Hashtable;
 7    import java.util.Map;
 8    import java.util.Vector;
 9   
 10    import javax.servlet.ServletException;
 11    import javax.servlet.http.HttpServletRequest;
 12    import javax.servlet.http.HttpServletResponse;
 13   
 14    import net.sf.crispy.impl.http.Constant;
 15    import net.sf.crispy.impl.http.HttpServlet;
 16    import net.sf.crispy.util.Converter;
 17    import net.sf.crispy.util.Invoker;
 18   
 19    /**
 20    *
 21    *
 22    * @author Linke
 23    *
 24    */
 25    public class RestServlet extends HttpServlet implements Constant {
 26   
 27    private static final long serialVersionUID = 89089242427878787L;
 28   
 29  15 public RestServlet () {
 30  15 super();
 31    }
 32   
 33   
 34    /**
 35    * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 36    */
 37  47 protected void doPost(HttpServletRequest pvRequest, HttpServletResponse pvResponse) throws ServletException, IOException {
 38    // Object lvResult = call(pvRequest.getParameterMap(), pvRequest.getParameter(PARAM_CLASS), pvRequest.getParameter(PARAM_METHOD));
 39  47 Object lvResult = null;
 40  47 String lvServiceClassName = "NoServiceClass-available";
 41  47 String lvMethodName = "NoMethod-available";
 42   
 43  47 try {
 44  47 Object lvService = getService(pvRequest, pvResponse);
 45  47 String lvServiceAndMethodName[] = getServiceAndMethodName(pvRequest.getParameter(PARAM_CLASS), pvRequest.getParameter(PARAM_METHOD));
 46  47 lvServiceClassName = lvServiceAndMethodName[0];
 47  47 lvMethodName = lvServiceAndMethodName[1];
 48   
 49  47 Method lvMethod = getMethod(lvService, pvRequest.getParameterMap(), pvRequest.getParameter(PARAM_CLASS), pvRequest.getParameter(PARAM_METHOD));
 50  47 Object lvArgs[] = getArgs(pvRequest.getParameterMap(), lvMethod);
 51  47 lvResult = doInvoke(lvService, lvMethod, lvArgs, createNewInterceptorHandlerInstance());
 52    } catch (Exception e) {
 53    // e.printStackTrace();
 54  0 lvResult = createResponseFail(lvServiceClassName, lvMethodName, e);
 55    }
 56   
 57    if (log.isDebugEnabled()) { log.debug("Result from method " + pvRequest.getParameter(PARAM_METHOD) + " is: " + lvResult); }
 58  47 String output = makeXmlStream(lvResult);
 59   
 60  47 PrintWriter pw = pvResponse.getWriter();
 61  47 pw.print(output);
 62  47 pw.flush();
 63  47 pw.close();
 64    }
 65   
 66    /** Convert the result value to xml representation. */
 67  53 public String makeXmlStream (Object pvResult) {
 68  53 String xmlStr = null;
 69  53 try {
 70  53 xmlStr = Serializer.serialize(pvResult);
 71    } catch (Exception e) {
 72  0 ResponseFail lvFail = new ResponseFail ();
 73  0 lvFail.setMessage(e.getMessage());
 74  0 lvFail.setException(e.getClass().getName());
 75  0 try {
 76  0 xmlStr = Serializer.serialize(pvResult);
 77    } catch (Exception e2) {
 78  0 log.debug("Error by Serializer: " + pvResult, e);
 79    }
 80  0 e.printStackTrace();
 81    }
 82    if (log.isDebugEnabled()) { log.debug(xmlStr); }
 83  53 return xmlStr;
 84    }
 85   
 86  56 protected Object[] getArgs(Map pvParameterMap, Method pvMethod) throws Exception {
 87  56 Object lvParameters = new ParameterDeserializer().deserialize(prepareParameter(pvParameterMap));
 88   
 89  56 Vector lvParamVector = null;
 90  56 if (lvParameters instanceof Vector) {
 91  29 lvParamVector = (Vector) lvParameters;
 92    } else {
 93  27 lvParamVector = new Vector ();
 94  27 lvParamVector.add(lvParameters);
 95    }
 96  56 Object lvParams[] = Converter.convertStringParams2MethodParams(pvMethod, lvParamVector);
 97  55 return lvParams;
 98    }
 99   
 100  59 public Method getMethod (Object pvService, Map pvParameterMap, String pvServiceClassName, String pvMethodName) throws Exception {
 101   
 102  59 String lvServiceAndMethodName[] = getServiceAndMethodName(pvServiceClassName, pvMethodName);
 103    // String lvServiceClassName = lvServiceAndMethodName[0];
 104  59 String lvMethodName = lvServiceAndMethodName[1];
 105   
 106  59 String lvParamTypes[] = (String[]) pvParameterMap.get(PARAM_TYPES);
 107  59 Vector findParamVector = convertInParameterTypes(lvParamTypes);
 108   
 109   
 110  59 Object lvParameters = new ParameterDeserializer().deserialize(prepareParameter(pvParameterMap));
 111   
 112  59 Vector lvParamVector = null;
 113  59 if (lvParameters instanceof Vector) {
 114  32 lvParamVector = (Vector) lvParameters;
 115    } else {
 116  27 lvParamVector = new Vector ();
 117  27 lvParamVector.add(lvParameters);
 118    }
 119   
 120  15 if (findParamVector == null) { findParamVector = lvParamVector; }
 121   
 122   
 123   
 124  59 Method lvMethod = Invoker.findMethod (pvService.getClass(), lvMethodName, findParamVector);
 125  56 return lvMethod;
 126    }
 127   
 128  6 private ResponseFail createResponseFail(String pvServiceClassName, String pvMethodName, Throwable pvThrowable) {
 129  6 ResponseFail lvFail = new ResponseFail ();
 130  6 lvFail.setService(pvServiceClassName);
 131  6 lvFail.setMethod(pvMethodName);
 132  6 lvFail.setMessage(pvThrowable.getMessage());
 133  6 lvFail.setException(pvThrowable.getClass().getName());
 134  6 return lvFail;
 135    }
 136   
 137  14 public Object call (Map pvParameterMap, String pvServiceClassName, String pvMethodName) {
 138  14 String lvServiceClassName = "NoServiceClass-available";
 139  14 String lvMethodName = "NoMethod-available";
 140  14 try {
 141  14 String lvServiceAndMethodName[] = getServiceAndMethodName(pvServiceClassName, pvMethodName);
 142  12 lvServiceClassName = lvServiceAndMethodName[0];
 143  12 lvMethodName = lvServiceAndMethodName[1];
 144   
 145  12 Object lvService = getService(lvServiceClassName);
 146   
 147  12 Method lvMethod = getMethod(lvService, pvParameterMap, pvServiceClassName, pvMethodName);
 148  9 Object lvArgs[] = getArgs(pvParameterMap, lvMethod);
 149   
 150  8 Object lvResult = doInvoke(lvService, lvMethod, lvArgs, createNewInterceptorHandlerInstance());
 151  8 return lvResult;
 152    } catch (Exception e) {
 153    // e.printStackTrace();
 154  6 return createResponseFail(lvServiceClassName, lvMethodName, e);
 155    }
 156    }
 157   
 158   
 159  115 protected Map prepareParameter(Map pvParameterMap) {
 160    // Parameter bereinigen, d.h. Methode und Klasse entfernen
 161  115 Map lvParameterMap = new Hashtable(pvParameterMap);
 162  115 lvParameterMap.remove(Constant.PARAM_METHOD);
 163  115 lvParameterMap.remove(Constant.PARAM_CLASS);
 164  115 return lvParameterMap;
 165    }
 166   
 167   
 168   
 169    }