- circumvented the JDBC ?-bug
[mir.git] / source / mir / servlet / ServletModuleDispatch.java
index 944defe..51ebbdf 100755 (executable)
@@ -35,81 +35,87 @@ import  java.lang.reflect.*;
 import  javax.servlet.http.*;
 import  mir.servlet.ServletModuleException;
 import  mir.misc.*;
+import  mir.log.*;
 
 
 /**
  * Dispatcher, calls the method passed to ServletModule Class, through the "do"
  * Parameter (via POST or GET)
  *
- * @version $Id: ServletModuleDispatch.java,v 1.7 2002/09/01 22:05:52 mh Exp $
+ * @version $Id: ServletModuleDispatch.java,v 1.11 2002/12/01 15:05:51 zapata Exp $
  *
  * @Author rk
  *
  */
 public final class ServletModuleDispatch {
 
-       private static Logfile theLog;
-       private static final    Class[] SIGNATURE =
-                                                                                                               { HttpServletRequest.class, HttpServletResponse.class };
+  private static LoggerWrapper logger = new LoggerWrapper("ServletModule.Dispatch");
+  private static final Class[] SIGNATURE = { HttpServletRequest.class, HttpServletResponse.class };
 
+ /**
+  * private constructor to prevent unwanted instantiation;
+  */
 
-       static {
-               theLog = Logfile.getInstance("/tmp/smod.dispatch");
-       }
+  private ServletModuleDispatch () {
+  }
 
-       /**
-        * privater Konstruktor, um versehentliche Instantiierung zu verhindern
-        */
-       private ServletModuleDispatch () {
-       }
+        /**
+         *  Die Dispatch-Routine ruft das von dem Hauptservlet kommende ServletModule
+         *  mit dem per HttpServletRequest angegebenen Paramter <code>do</code> auf.
+         *  Ist kein Parameter angegeben, so wird versucht, in die <code>defaultAction</code>
+         *  des ServletModules zu springen.
+         *
+         * @param req Http-Request, das vom Dispatcher an die Methode des
+         *    ServletModules durchgereicht wird
+         * @param res Http-Response, die vom Dispatcher an die Methode des
+         *    ServletModules durchgereicht wird
+         * @param sMod ServletModule, an das dispatched wird.
+         * @param mod Name des Modules als String (für Logfile)
+         */
 
-       /**
-        *  Die Dispatch-Routine ruft das von dem Hauptservlet kommende ServletModule
-        *  mit dem per HttpServletRequest angegebenen Paramter <code>do</code> auf.
-        *  Ist kein Parameter angegeben, so wird versucht, in die <code>defaultAction</code>
-        *  des ServletModules zu springen.
-        *
-        * @param req Http-Request, das vom Dispatcher an die Methode des
-        *    ServletModules durchgereicht wird
-        * @param res Http-Response, die vom Dispatcher an die Methode des
-        *    ServletModules durchgereicht wird
-        * @param sMod ServletModule, an das dispatched wird.
-        * @param mod Name des Modules als String (für Logfile)
-        */
+  public static void dispatch(ServletModule sMod, HttpServletRequest req,
+                              HttpServletResponse res) throws ServletModuleException, ServletModuleUserException
+  {
+    //sMod.predeliver(req,res);
 
-       public static void dispatch(ServletModule sMod, HttpServletRequest req,
-               HttpServletResponse res) throws ServletModuleException, ServletModuleUserException
-       {
-                       //sMod.predeliver(req,res);
+    String doParam = req.getParameter("do");
+    logger.info("ServletModuleDispatch: " + sMod.toString() + " with method " + doParam);
+    if (doParam == null) {
+      if (sMod.defaultAction() != null)
+        doParam = sMod.defaultAction();
+      else
+        throw new ServletModuleException("no parameter do supplied!");
+    }
 
-                       String doParam = req.getParameter("do");
-                       theLog.printInfo("SerletModuleDispatch: " + sMod.toString() + " with method " + doParam);
-                       if (doParam == null) {
-                               if (sMod.defaultAction() != null) doParam = sMod.defaultAction();
-                               else throw new ServletModuleException("no parameter do supplied!");
-                       }
+    try {
+      Method method = sMod.getClass().getMethod(doParam,SIGNATURE);
+      if (method != null) {
+        method.invoke(sMod,new Object[] {req,res} );
+        return;
+      }
+      else logger.debug("method lookup unsuccesful");
+    }
+    catch ( NoSuchMethodException e) {
+      throw new ServletModuleException("no such method '"+doParam+"' (" + e.getMessage() + ")");
+    }
+    catch ( SecurityException e) {
+      throw new ServletModuleException("method not allowed!" + e.getMessage());
+    }
+    catch ( InvocationTargetException e) {
+      logger.debug( "invocation target exception: " + e.getMessage());
+      if (e.getTargetException() instanceof ServletModuleUserException) {
+        throw new ServletModuleUserException(e.getTargetException().getMessage());
+      }
+      else {
+        e.printStackTrace();
+        throw new ServletModuleException(e.getTargetException().getMessage());
+      }
+    }
+    catch ( IllegalAccessException e) {
+      throw new ServletModuleException("illegal method not allowed!" + e.getMessage());
+    }
 
-                       try {
-                               Method method = sMod.getClass().getMethod(doParam,SIGNATURE);
-                               if (method != null) {
-                                       method.invoke(sMod,new Object[] {req,res} );
-                                       return;
-                               }
-                               else theLog.printDebugInfo("method lookup unsuccesful");
-                       }
-                       catch ( NoSuchMethodException e) { throw new ServletModuleException("no such method!" + e.toString());}
-                       catch ( SecurityException e) { throw new ServletModuleException("method not allowed!" + e.toString());}
-                       catch ( InvocationTargetException e) {
-                               if (e.getTargetException().getClass().getName().equals("mir.servlet.ServletModuleUserException")) {
-                                               throw new ServletModuleUserException(((ServletModuleUserException)e.getTargetException()).getMsg());
-                               } else {
-                                               e.printStackTrace();
-                                               throw new ServletModuleException(e.getTargetException().toString());
-                               }
-                       }
-                       catch ( IllegalAccessException e) { throw new ServletModuleException("illegal method not allowed!" + e.toString());}
-
-                       //hopefully we don't get here ...
-                       throw new ServletModuleException("delivery failed! -- ");
-       }
+//hopefully we don't get here ...
+    throw new ServletModuleException("delivery failed! -- ");
+  }
 }