first cut of merge of STABLE-pre1_0 into HEAD. I won't even guarantee that it
[mir.git] / source / mir / servlet / ServletModuleDispatch.java
index de5d86d..ee84259 100755 (executable)
@@ -16,60 +16,68 @@ import  mir.misc.*;
  */
 public final class ServletModuleDispatch {
 
-  static Logfile theLog;
+       private static Logfile theLog;
+       private static final    Class[] SIGNATURE =
+                                                                                                               { HttpServletRequest.class, HttpServletResponse.class };
 
-  static {
-    theLog = Logfile.getInstance("ServletModuleDispatch");
-  }
 
-  /**
-   * privater Konstruktor, um versehentliche Instantiierung zu verhindern
-   */
-  private ServletModuleDispatch () {
-  }
+       static {
+               theLog = Logfile.getInstance("/tmp/smod.dispatch");
+       }
 
-  /**
-   *  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)
-   */
+       /**
+        * privater Konstruktor, um versehentliche Instantiierung zu verhindern
+        */
+       private ServletModuleDispatch () {
+       }
 
-  public static void dispatch(ServletModule sMod, HttpServletRequest req,
-    HttpServletResponse res) throws ServletModuleException
-  {
-      //sMod.predeliver(req,res);
+       /**
+        *  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)
+        */
 
-      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!");
-      }
+       public static void dispatch(ServletModule sMod, HttpServletRequest req,
+               HttpServletResponse res) throws ServletModuleException, ServletModuleUserException
+       {
+                       //sMod.predeliver(req,res);
 
-      Class[] params= { HttpServletRequest.class, HttpServletResponse.class};
+                       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,params);
-        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) {e.printStackTrace();throw new ServletModuleException("target method exception!" + e.getTargetException().toString());}
-      catch ( IllegalAccessException e) { throw new ServletModuleException("illegal method not allowed!" + e.toString());}
-//      catch ( Exception e ) { throw new ServletModuleException(e.toString()); }
+                       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());}
 
-      throw new ServletModuleException("delivery failed! -- ");
-  }
+                       //hopefully we don't get here ...
+                       throw new ServletModuleException("delivery failed! -- ");
+       }
 }