[Bedework-commit] webapps r755 - in trunk: webclient/war/WEB-INF webcommon/src/org/bedework/webcommon

svnadmin at bedework.org svnadmin at bedework.org
Tue May 13 15:33:52 EDT 2008


Author: douglm
Date: 2008-05-13 15:33:50 -0400 (Tue, 13 May 2008)
New Revision: 755

Modified:
   trunk/webclient/war/WEB-INF/struts-config.xml
   trunk/webcommon/src/org/bedework/webcommon/BwAbstractAction.java
   trunk/webcommon/src/org/bedework/webcommon/BwCallback.java
   trunk/webcommon/src/org/bedework/webcommon/BwSvciFilter.java
Log:
Fix struts-config so scheduling (at least oartiually) works again.

Also try to trap and report late exceptions.

Modified: trunk/webclient/war/WEB-INF/struts-config.xml
===================================================================
--- trunk/webclient/war/WEB-INF/struts-config.xml	2008-05-13 19:33:01 UTC (rev 754)
+++ trunk/webclient/war/WEB-INF/struts-config.xml	2008-05-13 19:33:50 UTC (rev 755)
@@ -461,7 +461,7 @@
                type="org.bedework.webcommon.RenderAction"
                name="calForm"
                scope="session"
-               parameter="actionType=render;conversation=start"
+               parameter="actionType=render;conversation=only"
                validate="false">
       <forward name="success" path="/docs/schedule/inbox.jsp" />
     </action>
@@ -474,7 +474,7 @@
                type="org.bedework.webcommon.event.DeleteEventAction"
                name="calForm"
                scope="session"
-               parameter="actionType=action;conversation=end"
+               parameter="actionType=action;conversation=only"
                validate="false">
       <forward name="success" path="/schedule/showInbox.rdo" redirect="true" />
     </action>
@@ -526,7 +526,7 @@
                type="org.bedework.webcommon.event.EventKeyAction"
                name="calForm"
                scope="session"
-               parameter="actionType=action;conversation=continue"
+               parameter="actionType=action;conversation=start"
                validate="false">
       <forward name="noAction" path="/main/showMain.rdo" redirect="true" />
       <forward name="success" path="/schedule/showAttendeeRespond.rdo" redirect="true" />

Modified: trunk/webcommon/src/org/bedework/webcommon/BwAbstractAction.java
===================================================================
--- trunk/webcommon/src/org/bedework/webcommon/BwAbstractAction.java	2008-05-13 19:33:01 UTC (rev 754)
+++ trunk/webcommon/src/org/bedework/webcommon/BwAbstractAction.java	2008-05-13 19:33:50 UTC (rev 755)
@@ -131,7 +131,10 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
 import org.apache.struts.util.MessageResources;
+import org.apache.struts.util.RequestUtils;
 
 /** This abstract action performs common setup actions before the real
  * action method is called.
@@ -1991,9 +1994,14 @@
 
     BwActionFormBase form;
     Request req;
+    ActionForward errorForward;
 
-    Callback(BwActionFormBase form) {
+    Callback(BwActionFormBase form, ActionMapping mapping) {
       this.form = form;
+      errorForward = mapping.findForward("error");
+      if (errorForward == null) {
+        throw new RuntimeException("Forward \"error\" must be defined in struts-comfig");
+      }
     }
 
     /* (non-Javadoc)
@@ -2101,6 +2109,39 @@
       }
     }
 
+    /* (non-Javadoc)
+     * @see org.bedework.webcommon.BwCallback#error(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Throwable)
+     */
+    public void error(HttpServletRequest hreq,
+                      HttpServletResponse hresp,
+                      Throwable t) throws Throwable {
+      form.getErr().emit(t);
+
+      /* Redirect to an error action
+       */
+
+      String forwardPath = errorForward.getPath();
+      String uri = null;
+
+      // paths not starting with / should be passed through without any processing
+      // (ie. they're absolute)
+      if (forwardPath.startsWith("/")) {
+        uri = RequestUtils.forwardURL(hreq, errorForward, null);    // get module relative uri
+      } else {
+        uri = forwardPath;
+      }
+
+      // only prepend context path for relative uri
+      if (uri.startsWith("/")) {
+        uri = hreq.getContextPath() + uri;
+      }
+      try {
+        hresp.sendRedirect(hresp.encodeRedirectURL(uri));
+      } catch (Throwable t1) {
+        // Presumably illegal state
+      }
+    }
+
     void closeNow() throws Throwable {
       Throwable t = null;
 
@@ -2474,7 +2515,7 @@
       /* create a call back object so the filter can open the service
       interface */
 
-      cb = new Callback(form);
+      cb = new Callback(form, request.getMapping());
       hsess.setAttribute(BwCallback.cbAttrName, cb);
     }
 

Modified: trunk/webcommon/src/org/bedework/webcommon/BwCallback.java
===================================================================
--- trunk/webcommon/src/org/bedework/webcommon/BwCallback.java	2008-05-13 19:33:01 UTC (rev 754)
+++ trunk/webcommon/src/org/bedework/webcommon/BwCallback.java	2008-05-13 19:33:50 UTC (rev 755)
@@ -27,6 +27,9 @@
 
 import java.io.Serializable;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /** Abstract class an instance of which is used to signal open and close
  * events to the web application.
  *
@@ -53,6 +56,17 @@
    */
   public abstract void out() throws Throwable;
 
+  /** Flag an error
+   *
+   * @param hreq
+   * @param hresp
+   * @param t
+   * @throws Throwable
+   */
+  public abstract void error(HttpServletRequest hreq,
+                             HttpServletResponse hresp,
+                             Throwable t) throws Throwable;
+
   /** Called after the above to allow close etc.
    *
    * @throws Throwable

Modified: trunk/webcommon/src/org/bedework/webcommon/BwSvciFilter.java
===================================================================
--- trunk/webcommon/src/org/bedework/webcommon/BwSvciFilter.java	2008-05-13 19:33:01 UTC (rev 754)
+++ trunk/webcommon/src/org/bedework/webcommon/BwSvciFilter.java	2008-05-13 19:33:50 UTC (rev 755)
@@ -129,7 +129,12 @@
       }
     } catch (Throwable t) {
       getLogger().error("Callback exception: ", t);
-      throw new ServletException(t);
+      try {
+        cb.error(hreq, hresp, t);
+      } catch (Throwable t1) {
+        getLogger().error("Callback exception: ", t1);
+        throw new ServletException(t);
+      }
     } finally {
       try {
         cb = getCb(sess, "close");



More information about the Bedework-commit mailing list