Author: rich
Date: Mon Jan 24 01:03:38 2005
New Revision: 126271

URL: http://svn.apache.org/viewcvs?view=rev&rev=126271
Log:
Reworked "Page Flow Action Interceptors" (see below for more info on this 
feature) to make the following changes:
    - The APIs now conform to a more generic set of Interceptor APIs, which 
will allow this feature to share functionality/user-model with pageflow-request 
and pageflow-app interceptors.  It may also be possible for 
Controls/NetUI(/WSM?) to share the base Interceptor code in the future, if this 
makes sense.
    - Added "simple" action interceptors, which can be configured wholly in XML 
(and don't require a user ActionInterceptor class).
    - Added the ability to configure interceptors per-pageflow and per-action 
in the XML.
    - Changed the default behavior when injecting a nested page flow before or 
after an action.  Previously, if the ActionInterceptor callback 
(afterNestedIntercept) did nothing, then the nested page flow's return-action 
would be raised on the original page flow.  Now, if the callback does nothing, 
the intercepted action's original destination is used.  This is far more likely 
to work (and is far more likely to be the intended behavior).
    - Added the ability to set custom properties in the XML that are passed to 
the user's ActionInterceptor class when it is initialized.
    - Added the ability to intercept an action and prevent *any* forwarding to 
occur.  This is useful when the interceptor wants to write directly to the 
response.


Info on Action Interceptors
---------------------------

In general, this feature is used to alter the behavior of a page flow action, 
in any of the following ways:
    - "inject" an entire nested page flow, before or after the action runs
    - change the destination of the action, before or after it runs
    - prevent the action from running
    - perform non-flow-altering logic before or after the action runs

As an example, a global action interceptor could decide (dynamically at 
runtime) to show an Update Contact Information page flow before allowing the 
user to reach the original destination page flow, and, depending on the outcome 
of the Update Contact page flow, could redirect the user somewhere else or 
allow the user to reach the original destination.

Action interceptors are configured in /WEB-INF/netui-config.xml.  They are 
chainable, and can be configured to run for every action, for every action in a 
given page flow, or for a specific action in a given page flow.

"Global" action interceptors, which are invoked before and after every action, 
are configured like this:

    <pageflow-action-interceptors>
        <global>
            <action-interceptor>
                <interceptor-class>test.Interceptor1</interceptor-class>
            </action-interceptor>
        </global>
    </pageflow-action-interceptors>

The interceptor-class is a class that extends 
org.apache.beehive.netui.pageflow.actioninterceptor.ActionInterceptor.

Per-page flow interceptors are configured using a page flow URI and 
interceptor-class:

    <pageflow-action-interceptors>
        <per-pageflow>
            <pageflow-uri>/test/MyFlow.jpf</pageflow-uri>
            <action-interceptor>
                <interceptor-class>test.Interceptor2</interceptor-class>
            </action-interceptor>
        </per-pageflow>
    </pageflow-action-interceptors>

Finally, per-action interceptors are configured using a page flow URI and 
action name:
    <pageflow-action-interceptors>
        <per-pageflow>
            <pageflow-uri>/test/MyFlow.jpf</pageflow-uri>
            <per-action>
                <action-name>someAction</action-name>
                <action-interceptor>
                    <interceptor-class>test.Interceptor3</interceptor-class>
                </action-interceptor>
            </per-action>
        </per-pageflow>
    </pageflow-action-interceptors>

"Simple" action interceptors can be used when a specific override path is known:

            <simple-action-interceptor>
                <override-path>/privacy/PrivacyNotice.jpf</override-path>
            </simple-action-interceptor>

In all cases, there can be a list of action-interceptors or 
simple-action-interceptors, in which case a chain of interceptors is created.


Inside an ActionInterceptor class, there are methods for intercepting 
pre-action and post-action:
    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
    public abstract void afterNestedIntercept( AfterNestedInterceptContext 
context )

In either method, the original destination can be overridden by setting an 
"interceptor forward":
        setInterceptorForward( new InterceptorForward( [webapp-relative URI] ), 
context );

To allow the rest of the interceptor chain to run, continueChain() is called on 
the given chain (similar to FilterChain.doFilter() in a Servlet Filter):
        chain.continueChain();

*If* the InterceptorForward refers to a nested page flow, then the following 
method will be called on the ActionInterceptor when the nested page flow is 
finished:
    public void afterNestedIntercept( AfterNestedInterceptContext context )

This method can set an InterceptorForward as above, but if the method does 
nothing, the original (intercepted) action will be allowed to forward to its 
desired destination.


Odd and ends:
    - a simple-action-interceptor can run *after* the action by providing the 
optional after-action element:
            <simple-action-interceptor>
                <override-path>/privacy/PrivacyNotice.jpf</override-path>
                <after-action>true</after-action>
            </simple-action-interceptor>

    - an action-interceptor element can contain custom properties, which are 
provided to the ActionInterceptor in its ActionInterceptorConfig:
            <action-interceptor>
                <interceptor-class>test.Interceptor3</interceptor-class>
                <custom-property>
                    <name>someProperty</name>
                    <value>some value</value>
                </custom-property>
            </action-interceptor>


DRT/BVT: netui (WinXP)
BB: self (linux)


Added:
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptorContext.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/
      - copied from r125998, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptor.java
      - copied, changed from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorConfig.java
      - copied, changed from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorContext.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/AfterNestedInterceptContext.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/InterceptorForward.java
      - copied, changed from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/OriginalForward.java
      - copied, changed from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptorConfig.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorChain.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorConfig.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorContext.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorException.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptors.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServletContainerAdapter
      - copied, changed from r125998, 
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/BaseInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardAwayInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedThenAwayInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNullInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/GlobalInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptAfterActionInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptBeforeActionInterceptor.java
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/error.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/alternate.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/error.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/another.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/index.jsp
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsChain.xml
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsGlobal.xml
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsOverrideForwards.xml
   (contents, props changed)
   
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsSimple.xml
   (contents, props changed)
Removed:
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorChain.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorChainConfig.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorsConfig.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/
   
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/interceptors/
   
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptors.xml
Modified:
   incubator/beehive/trunk/netui/src/pageflow/build.xml
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java
   
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java
   incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd
   
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
   
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml

Modified: incubator/beehive/trunk/netui/src/pageflow/build.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/build.xml?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/build.xml&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/build.xml&r2=126271
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/build.xml        (original)
+++ incubator/beehive/trunk/netui/src/pageflow/build.xml        Mon Jan 24 
01:03:38 2005
@@ -15,6 +15,7 @@
         <path refid="controls.dependency.path"/>
         <path refid="struts11.dependency.path"/>
         <path refid="jsf.dependency.path"/>
+        <path refid="commons-discovery.dependency.path"/>
 
         <pathelement path="${build.lib.dir}/beehive-netui-util.jar"/>
         <pathelement path="${build.lib.dir}/beehive-netui-scoping.jar"/>

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java
        (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/DynamicSubappActionServlet.java
        Mon Jan 24 01:03:38 2005
@@ -17,6 +17,11 @@
  */
 package org.apache.beehive.netui.pageflow;
 
+import org.apache.beehive.netui.util.logging.Logger;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+
 
 /**
  * ActionServlet that dynamically registers modules based on naming/location 
conventions for Struts
@@ -30,4 +35,16 @@
  */
 public class DynamicSubappActionServlet extends PageFlowActionServlet
 {
+    private static final Logger _log = Logger.getInstance( 
DynamicSubappActionServlet.class );
+    
+    public void init( ServletConfig config ) throws ServletException
+    {
+        super.init( config );
+        
+        if ( _log.isWarnEnabled() )
+        {
+            _log.warn( DynamicSubappActionServlet.class.getName() + " is 
registered as the action Servlet. "
+                       + "This class is deprecated; use " + 
PageFlowActionServlet.class.getName() + " instead." );
+        }
+    }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
   (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
   Mon Jan 24 01:03:38 2005
@@ -217,7 +217,7 @@
         setPath( path.toString() );
         super.setRedirect( redirect || path.isAbsolute() );
         setContextRelative( path.getPath().startsWith( "/" ) );
-        _explicitPath = true;        
+        _explicitPath = true;
     }
     
     /**

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java
    (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ForwardHandler.java
    Mon Jan 24 01:03:38 2005
@@ -26,18 +26,17 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletContext;
 
-import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptor;
-import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
-import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorChain;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.internal.RequestValues;
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
 import org.apache.beehive.netui.pageflow.internal.ViewRenderer;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorException;
+import org.apache.beehive.netui.pageflow.actioninterceptor.ActionInterceptor;
+import org.apache.beehive.netui.pageflow.actioninterceptor.InterceptorForward;
+import 
org.apache.beehive.netui.pageflow.actioninterceptor.AfterNestedInterceptContext;
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
 
-import java.io.IOException;
-
 
 class ForwardHandler
         implements PageFlowConstants
@@ -156,7 +155,7 @@
             if ( pageFlowFwd.shouldPopPageFlow() )
             {
                 isSpecialForward = true;
-                fwd = doNestingReturn( pageFlowFwd, request, response, 
mapping, flowController, form );
+                fwd = doNestingReturn( pageFlowFwd, request, response, 
servletContext, mapping, flowController, form );
             }
 
             //
@@ -427,8 +426,9 @@
     }
     
     private static ActionForward doNestingReturn( Forward pageFlowFwd, 
HttpServletRequest request,
-                                                  HttpServletResponse 
response, ActionMapping mapping,
-                                                  FlowController 
flowController, ActionForm form )
+                                                  HttpServletResponse 
response, ServletContext servletContext,
+                                                  ActionMapping mapping, 
FlowController flowController,
+                                                  ActionForm form )
     {
         PageFlowStack pfStack = PageFlowStack.get( request );
         String returnAction = pageFlowFwd.getPath();
@@ -473,37 +473,15 @@
 
                 
         //
-        // If an ActionInterceptor forwarded to the nested page flow, give it 
a chance to
-        // determine the URI as the nested flow is returning.
+        // If an ActionInterceptor forwarded to the nested page flow, give it 
a chance to change the URI as the nested
+        // flow is returning.  If it doesn't, we'll go to the 
originally-intended Forward.
         //
         ActionInterceptor interceptor = pushedPageFlowWrapper.getInterceptor();
                 
         if ( interceptor != null )
         {
-            InterceptorForward interceptorForward = null;
-                    
-            try
-            {
-                interceptorForward = interceptor.doPostIntercept( request, 
response, poppedPageFlow,
-                                                                  
pushedPageFlowWrapper.getInterceptedForward(),
-                                                                  returnAction 
);
-            }
-            catch ( Exception e )
-            {
-                _log.error( "Exception in " + interceptor.getClass().getName() 
+ ".doPostIntercept", e );
-            }
-                    
-            if ( interceptorForward != null )
-            {
-                if ( _log.isDebugEnabled() )
-                {
-                    _log.debug( "post-intercept: forwarding to " + 
interceptorForward.getPath() );
-                }
-                        
-                interceptorForward.rehydrateRequest( request );
-                ActionInterceptorChain.setIsReturningFromIntercept( request, 
true );
-                return interceptorForward;
-            }
+            return handleInterceptorReturn( request, response, servletContext, 
poppedPageFlow, pushedPageFlowWrapper,
+                                            returnAction, mapping, form, 
interceptor );
         }
 
         //
@@ -538,5 +516,72 @@
         ActionForward fwd = new ActionForward( returnActionPath.toString(), 
false );
         fwd.setContextRelative( true );
         return fwd;
+    }
+    
+    private static ActionForward handleInterceptorReturn( HttpServletRequest 
request, HttpServletResponse response,
+                                                          ServletContext 
servletContext,
+                                                          PageFlowController 
poppedPageFlow,
+                                                          
PageFlowStack.PushedPageFlow pushedPageFlowWrapper,
+                                                          String returnAction, 
ActionMapping actionMapping,
+                                                          ActionForm form, 
ActionInterceptor interceptor )
+    {
+        RequestValues.setReturningFromActionIntercept( request, true );
+        
+        try
+        {
+            AfterNestedInterceptContext context =
+                    new AfterNestedInterceptContext( request, response, 
servletContext, poppedPageFlow,
+                                                     
pushedPageFlowWrapper.getInterceptedForward(),
+                                                     
pushedPageFlowWrapper.getInterceptedActionName(),
+                                                     returnAction );
+            
+            interceptor.afterNestedIntercept( context );
+            
+            if ( context.hasInterceptorForward() )
+            {
+                InterceptorForward fwd = context.getInterceptorForward();
+                
+                if ( _log.isDebugEnabled() )
+                {
+                    StringBuilder message = new StringBuilder();
+                    message.append( "Interceptor " );
+                    message.append( interceptor.getClass().getName() );
+                    message.append( " after nested page flow: " );
+                    
+                    if ( fwd != null )
+                    {
+                        message.append( "forwarding to " );
+                        message.append( fwd.getPath() );
+                    }
+                    else
+                    {
+                        message.append( "returned InterceptorForward is null." 
);
+                    }
+                    
+                    _log.debug( message.toString() );
+                }
+                
+                if ( fwd != null ) fwd.rehydrateRequest( request );
+                return fwd;
+            }
+        }
+        catch ( InterceptorException e )
+        {
+            _log.error( "Exception in " + interceptor.getClass().getName() + 
".afterNestedIntercept", e );
+            
+            try
+            {
+                return poppedPageFlow.handleException( e, actionMapping, form, 
request, response );
+            }
+            catch ( Exception anotherException )
+            {
+                _log.error( "Exception thrown while handling exception.", 
anotherException );
+            }
+        }
+        
+        //
+        // The interceptor declined to forward us anywhere -- just go to the 
originally-intended Forward.
+        //
+        return pushedPageFlowWrapper.getInterceptedForward();
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
        (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
        Mon Jan 24 01:03:38 2005
@@ -893,7 +893,7 @@
             }
             catch ( Exception e )
             {
-                _log.error( "Exception thrown while handling exception in 
onExitNesting()", e );
+                _log.error( "Exception thrown while handling exception.", e );
             }
         }
         finally

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
  (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
  Mon Jan 24 01:03:38 2005
@@ -17,77 +17,79 @@
  */
 package org.apache.beehive.netui.pageflow;
 
+import org.apache.beehive.netui.core.urls.URLRewriterService;
+import 
org.apache.beehive.netui.pageflow.actioninterceptor.ActionInterceptorContext;
+import org.apache.beehive.netui.pageflow.actioninterceptor.InterceptorForward;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionFormBean;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionForward;
+import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
+import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
+import org.apache.beehive.netui.pageflow.handler.LoginHandler;
+import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
+import org.apache.beehive.netui.pageflow.internal.AdapterManager;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.internal.DefaultURLRewriter;
+import org.apache.beehive.netui.pageflow.internal.FlowControllerAction;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.JavaControlUtils;
+import org.apache.beehive.netui.pageflow.internal.RequestValues;
+import org.apache.beehive.netui.pageflow.internal.interceptor.Interceptor;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorException;
+import org.apache.beehive.netui.pageflow.internal.interceptor.Interceptors;
+import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
+import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
+import org.apache.beehive.netui.util.DiscoveryUtils;
+import org.apache.beehive.netui.util.FileUtils;
+import org.apache.beehive.netui.util.ServletUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.Globals;
 import org.apache.struts.action.Action;
 import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionMapping;
 import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.DynaActionFormClass;
-import org.apache.struts.action.DynaActionForm;
+import org.apache.struts.action.ActionMapping;
 import org.apache.struts.action.ActionServlet;
+import org.apache.struts.action.DynaActionForm;
+import org.apache.struts.action.DynaActionFormClass;
 import org.apache.struts.config.ActionConfig;
-import org.apache.struts.config.ForwardConfig;
 import org.apache.struts.config.FormBeanConfig;
+import org.apache.struts.config.ForwardConfig;
 import org.apache.struts.config.ModuleConfig;
-import org.apache.struts.Globals;
 import org.apache.struts.tiles.TilesRequestProcessor;
 import org.apache.struts.tiles.TilesUtil;
 import org.apache.struts.tiles.TilesUtilImpl;
 import org.apache.struts.tiles.TilesUtilStrutsImpl;
-import org.apache.struts.upload.MultipartRequestWrapper;
 import org.apache.struts.upload.MultipartRequestHandler;
+import org.apache.struts.upload.MultipartRequestWrapper;
 import org.apache.struts.util.RequestUtils;
 import org.apache.struts.util.TokenProcessor;
 
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.servlet.ServletException;
-import javax.servlet.ServletContext;
 import javax.servlet.FilterChain;
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import java.io.IOException;
-import java.io.Serializable;
 import java.io.InputStream;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Enumeration;
-import java.util.Map;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.ArrayList;
+import java.util.Map;
 import java.util.Properties;
-import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.lang.reflect.Field;
-
-import org.apache.beehive.netui.util.logging.Logger;
-import org.apache.beehive.netui.util.ServletUtils;
-import org.apache.beehive.netui.util.FileUtils;
-import org.apache.beehive.netui.util.DiscoveryUtils;
-import org.apache.beehive.netui.core.urls.URLRewriterService;
-import org.apache.beehive.netui.pageflow.config.PageFlowActionForward;
-import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
-import org.apache.beehive.netui.pageflow.config.PageFlowActionFormBean;
-import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorChain;
-import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
-import org.apache.beehive.netui.pageflow.internal.ContextCache;
-import org.apache.beehive.netui.pageflow.internal.DefaultURLRewriter;
-import org.apache.beehive.netui.pageflow.internal.RequestValues;
-import org.apache.beehive.netui.pageflow.internal.InternalUtils;
-import org.apache.beehive.netui.pageflow.internal.JavaControlUtils;
-import org.apache.beehive.netui.pageflow.internal.FlowControllerAction;
-import org.apache.beehive.netui.pageflow.internal.AdapterManager;
-import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
-import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
-import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
-import org.apache.beehive.netui.pageflow.handler.LoginHandler;
-import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
-import org.apache.beehive.netui.script.common.ImplicitObjectUtil;
 
 import static org.apache.beehive.netui.pageflow.internal.InternalConstants.*;
 import static org.apache.beehive.netui.pageflow.PageFlowConstants.*;
@@ -717,7 +719,6 @@
         }
     }
 
-    
     public void process( HttpServletRequest request, HttpServletResponse 
response )
         throws IOException, ServletException
     {
@@ -730,6 +731,20 @@
                        + " -----------------------------------" );
         }
 
+        /*
+        List< Interceptor > interceptors = null;
+        RequestInterceptorContext context = new RequestInterceptorContext( 
getServletContext(), request, response );
+        try
+        {
+            InterceptorResult result = Interceptors.doPreIntercept( context, 
interceptors );
+            if ( result.hasResultOverride() ) return;
+        }
+        catch ( InterceptorException e )
+        {
+            throw new ServletException( e );
+        }
+        */
+        
         //
         // First reinitialize the reloadable class handler.  This will bounce 
a classloader if necessary.
         //
@@ -1800,80 +1815,91 @@
             PageFlowJspFilter.preventCache( request );
         }
     }
-    
+
     protected ActionForward processActionPerform( HttpServletRequest request, 
HttpServletResponse response,
                                                   Action action, ActionForm 
form, ActionMapping mapping )
             throws IOException, ServletException
     {
-        PageFlowController pfc = null;
         ServletContext servletContext = getServletContext();
+        String actionName = InternalUtils.getActionName( mapping );
+        ActionInterceptorContext context = null;
+        List< Interceptor > interceptors = null;
         
         if ( action instanceof FlowControllerAction )
         {
             FlowController fc = ( ( FlowControllerAction ) action 
).getFlowController();
-            if ( fc instanceof PageFlowController ) pfc = ( PageFlowController 
) fc;
+            
+            if ( fc instanceof PageFlowController )
+            {
+                PageFlowController pfc = ( PageFlowController ) fc;
+                context = new ActionInterceptorContext( request, response, 
servletContext, pfc, null, actionName );
+                interceptors = context.getActionInterceptors();
+            }
         }
         
-        //
-        // Run any before-action interceptors.
-        //
-        if ( ! ActionInterceptorChain.isReturningFromIntercept( request ) && 
pfc != null )
+        
+        try
         {
-            String actionName = InternalUtils.getActionName( mapping );
-            ActionInterceptorChain interceptorChain =
-                    ActionInterceptorChain.getBeforeActionChain( actionName, 
request, servletContext );
-            if ( interceptorChain != null )
+            //
+            // Run any before-action interceptors.
+            //
+            if ( interceptors != null && ! 
RequestValues.isReturningFromActionIntercept( request ) )
             {
-                InterceptorForward interceptorForward =
-                        interceptorChain.doIntercept( request, response, null, 
pfc, actionName );
+                Interceptors.doPreIntercept( context, interceptors );
                 
-                if ( interceptorForward != null )
+                if ( context.hasInterceptorForward() )
                 {
+                    InterceptorForward fwd = context.getInterceptorForward();
+                    
                     if ( _log.isDebugEnabled() )
                     {
-                        _log.debug( "Before-action intercepted in 
processMapping; forwarding to "
-                                   + interceptorForward.getPath() );
+                        _log.debug( "Action interceptor " + 
context.getOverridingInterceptor().getClass().getName()
+                                   + " before action " + actionName + ": 
forwarding to "
+                                    + fwd != null ? fwd.getPath() : "null [no 
forward]" );
                     }
                     
-                    return interceptorForward;
+                    return fwd;
                 }
             }
-        }
-        else
-        {
-            ActionInterceptorChain.setIsReturningFromIntercept( request, false 
);
-        }
-        
-        ActionForward ret = super.processActionPerform( request, response, 
action, form, mapping );
-        
-        //
-        // Run any after-action interceptors.
-        //
-        if ( pfc != null )
-        {
-            String actionName = InternalUtils.getActionName( mapping );
-            ActionInterceptorChain interceptorChain =
-                    ActionInterceptorChain.getAfterActionChain( actionName, 
request, servletContext );
-            if ( interceptorChain != null )
+            else
             {
-                InterceptorForward originalForward = ret != null ? new 
InterceptorForward( ret, servletContext ) : null;
-                InterceptorForward interceptorForward =
-                        interceptorChain.doIntercept( request, response, 
originalForward, pfc, actionName );
+                RequestValues.setReturningFromActionIntercept( request, false 
);
+            }
+            
+            //
+            // Execute the action.
+            //
+            ActionForward ret = super.processActionPerform( request, response, 
action, form, mapping );
+            
+            //
+            // Run any after-action interceptors.
+            //
+            if ( interceptors != null )
+            {
+                context.setOriginalForward( ret );
+                Interceptors.doPostIntercept( context, interceptors );
                 
-                if ( interceptorForward != null )
+                if ( context.hasInterceptorForward() )
                 {
+                    InterceptorForward fwd = context.getInterceptorForward();
+                    
                     if ( _log.isDebugEnabled() )
                     {
-                        _log.debug( "After-action intercepted in 
processMapping; forwarding to "
-                                   + interceptorForward.getPath() );
+                        _log.debug( "Action interceptor " + 
context.getOverridingInterceptor().getClass().getName()
+                                    + " after action " + actionName + ": 
forwarding to "
+                                    + fwd != null ? fwd.getPath() : "null [no 
forward]" );
                     }
                     
-                    return interceptorForward;
+                    return fwd;
                 }
             }
+            
+            return ret;
+        }
+        catch ( InterceptorException e )
+        {
+            throw new ServletException( e );
         }
-        
-        return ret;
     }
     
     void processActionForward( HttpServletRequest request, HttpServletResponse 
response, ActionForward forward )

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
     (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
     Mon Jan 24 01:03:38 2005
@@ -18,12 +18,12 @@
 package org.apache.beehive.netui.pageflow;
 
 import org.apache.beehive.netui.util.logging.Logger;
-import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptor;
-import org.apache.beehive.netui.pageflow.interceptor.InterceptorForward;
-import org.apache.beehive.netui.pageflow.interceptor.ActionInterceptorChain;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
 import org.apache.beehive.netui.pageflow.internal.AdapterManager;
+import org.apache.beehive.netui.pageflow.actioninterceptor.ActionInterceptor;
+import org.apache.beehive.netui.pageflow.actioninterceptor.InterceptorForward;
+import 
org.apache.beehive.netui.pageflow.actioninterceptor.ActionInterceptorContext;
 
 import javax.servlet.http.HttpSessionBindingListener;
 import javax.servlet.http.HttpSessionBindingEvent;
@@ -54,13 +54,20 @@
         private PageFlowController _pageFlow;
         private ActionInterceptor _interceptor;
         private InterceptorForward _interceptedForward;
+        private String _interceptedActionName;
 
-        public PushedPageFlow( PageFlowController pageFlow, ActionInterceptor 
interceptor,
-                               InterceptorForward interceptedFwd )
+        public PushedPageFlow( PageFlowController pageFlow )
         {
             _pageFlow = pageFlow;
+        }
+        
+        public PushedPageFlow( PageFlowController pageFlow, ActionInterceptor 
interceptor,
+                               InterceptorForward interceptedFwd, String 
interceptedActionName )
+        {
+            this( pageFlow );
             _interceptor = interceptor;
             _interceptedForward = interceptedFwd;
+            _interceptedActionName = interceptedActionName;
         }
 
         public PageFlowController getPageFlow()
@@ -68,29 +75,19 @@
             return _pageFlow;
         }
 
-        public void setPageFlow( PageFlowController pageFlow )
-        {
-            _pageFlow = pageFlow;
-        }
-
         public ActionInterceptor getInterceptor()
         {
             return _interceptor;
         }
 
-        public void setInterceptor( ActionInterceptor interceptor )
-        {
-            _interceptor = interceptor;
-        }
-
         public InterceptorForward getInterceptedForward()
         {
             return _interceptedForward;
         }
 
-        public void setInterceptedForward( InterceptorForward 
interceptedForward )
+        public String getInterceptedActionName()
         {
-            _interceptedForward = interceptedForward;
+            return _interceptedActionName;
         }
     }
     
@@ -226,10 +223,22 @@
      */ 
     public void push( PageFlowController pageFlow, HttpServletRequest request )
     {
+        ActionInterceptorContext interceptorContext = 
ActionInterceptorContext.getActiveContext( request, true );
+        
+        if ( interceptorContext != null )
+        {
+            ActionInterceptor interceptor = 
interceptorContext.getOverridingInterceptor();
+            InterceptorForward originalForward = 
interceptorContext.getOriginalForward();
+            String actionName = interceptorContext.getActionName();
+            _stack.push( new PushedPageFlow( pageFlow, interceptor, 
originalForward, actionName ) );
+        }
+        else
+        {
+            _stack.push( new PushedPageFlow( pageFlow ) );
+        }
+        
+        // Tell the page flow that it is on the nesting stack.
         pageFlow.setIsOnNestingStack( true );
-        ActionInterceptor interceptor = 
ActionInterceptorChain.getActiveInterceptor( request );
-        InterceptorForward interceptedForward = 
ActionInterceptorChain.getInterceptedForward( request, true );
-        _stack.push( new PushedPageFlow( pageFlow, interceptor, 
interceptedForward ) );
         
         // To ensure that this attribute is replicated for session failover...
         ensureFailover( request, pageFlow.getServletContext() );

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptor.java
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import org.apache.beehive.netui.pageflow.internal.interceptor.Interceptor;
+import org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorChain;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorException;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletResponse;
+
+public abstract class RequestInterceptor
+        implements Interceptor
+{
+    public void init( Object config )
+    {
+    }
+
+    public final void preInvoke( Object context, InterceptorChain chain ) 
throws InterceptorException
+    {
+        preRequest( ( RequestInterceptorContext ) context, chain );
+    }
+    
+    public abstract void preRequest( RequestInterceptorContext context, 
InterceptorChain chain )
+            throws InterceptorException;
+
+    public final void postInvoke( Object context, InterceptorChain chain ) 
throws InterceptorException
+    {
+        postRequest( ( RequestInterceptorContext ) context, chain );
+    }
+    
+    public abstract void postRequest( RequestInterceptorContext context, 
InterceptorChain chain )
+            throws InterceptorException;
+}
+

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptorContext.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptorContext.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/RequestInterceptorContext.java
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+class RequestInterceptorContext
+{
+    private ServletContext _servletContext;
+    private ServletRequest _request;
+    private ServletResponse _response;
+    
+    public RequestInterceptorContext( ServletContext servletContext, 
ServletRequest request, ServletResponse response )
+    {
+        _servletContext = servletContext;
+        _request = request;
+        _response = response;
+    }
+    
+    public ServletContext getServletContext()
+    {
+        return _servletContext;
+    }
+    
+    public ServletRequest getRequest()
+    {
+        return _request;
+    }
+    
+    public ServletResponse getResponse()
+    {
+        return _response;
+    }
+}
\ No newline at end of file

Copied: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptor.java
 (from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptor.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java&r1=126260&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptor.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptor.java
     (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptor.java
       Mon Jan 24 01:03:38 2005
@@ -15,13 +15,16 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.pageflow.interceptor;
+package org.apache.beehive.netui.pageflow.actioninterceptor;
 
-import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.internal.interceptor.Interceptor;
+import org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorChain;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorException;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorContext;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorConfig;
+
+import java.io.Serializable;
 
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.ServletContext;
 
 /**
  * Interface for page flow action interceptors.  These are configured in 
/WEB-INF/netui-config.xml like this:
@@ -59,55 +62,52 @@
  * Note that a registered ActionInterceptor is created and cached as a single 
instance per ServletContext.
  * It should not hold any per-request or per-session state.
  */ 
-public abstract interface ActionInterceptor
+public abstract class ActionInterceptor
+        implements Interceptor, Serializable
 {
+    private ActionInterceptorConfig _config;
+    
     /**
      * Called when this interceptor is being initialized.
      * 
      * @param config the configuration object associated with this interceptor.
-     * @param servletContext the ServletContext for the current web 
application.
      */ 
-    public void init( ActionInterceptorConfig config, ServletContext 
servletContext );
+    public void init( ActionInterceptorConfig config )
+    {
+        _config = config;
+    }
+
+    public void init( InterceptorConfig config )
+    {
+        init( ( ActionInterceptorConfig ) config );
+    }
+
+    public abstract void preAction( ActionInterceptorContext context, 
InterceptorChain chain )
+            throws InterceptorException;
     
-    /**
-     * Called either before or after (depending on registration; see [EMAIL 
PROTECTED] ActionInterceptor}) an action is raised on
-     * a page flow.
-     * 
-     * @param request the current HttpServletRequest.
-     * @param response the current HttpServletResponse.
-     * @param pageFlow the page flow on which the action is being raised.
-     * @param originalForward a wrapper for the original URI from the action 
that was intercepted.  This value will be
-     *            <code>null</code> if the interceptor was run before the 
action, or if the action itself returned
-     *            <code>null</code>.
-     * @param actionName the name of the action being raised.
-     * @return an InterceptorForward that changes the destination URI, or 
<code>null</code> to allow flow to the
-     *             intended URI.  If the returned InterceptorForward points to 
a nested page flow, then 
-     *             [EMAIL PROTECTED] #doPostIntercept} will be called before 
the nested page flow returns to the original page
-     *             flow.
-     * @throws Exception
-     */ 
-    public InterceptorForward doIntercept( HttpServletRequest request, 
HttpServletResponse response,
-                                           PageFlowController pageFlow, 
InterceptorForward originalForward,
-                                           String actionName )
-            throws Exception;
+    public void preInvoke( InterceptorContext context, InterceptorChain chain 
) throws InterceptorException
+    {
+        preAction( ( ActionInterceptorContext ) context, chain );
+    }
     
-    /**
-     * Called when returning to the original page flow after an action 
interceptor had shown a nested page flow.
-     *
-     * @param request the current HttpServletRequest.
-     * @param response the current HttpServletResponse.
-     * @param pageFlow the page flow to which control is being returned.
-     * @param originalForward the forward in the original page flow that was 
intercepted (through #doIntercept)
-     *            to transfer control to the nested page flow.  This object 
may be returned, in which case the
-     *            original page flow navigates to the same URI it intended to 
show before interception occurred.
-     * @param returningActionName the action returned by the nested page flow. 
 If <code>null</code> is returned
-     *            from this method, then that action will be raised on the 
original page flow.
-     * @return an InterceptorForward that changes the destination URI when 
returning to the original page flow; or
-     *             <code>null</code> if the original page flow should handle 
the nested return normally.
-     * @throws Exception
-     */ 
-    public InterceptorForward doPostIntercept( HttpServletRequest request, 
HttpServletResponse response,
-                                               PageFlowController pageFlow, 
InterceptorForward originalForward,
-                                               String returningActionName )
-            throws Exception;
+    public abstract void postAction( ActionInterceptorContext context, 
InterceptorChain chain )
+        throws InterceptorException;
+    
+    public void postInvoke( InterceptorContext context, InterceptorChain chain 
) throws InterceptorException
+    {
+        postAction( ( ActionInterceptorContext ) context, chain );
+    }
+
+    public abstract void afterNestedIntercept( AfterNestedInterceptContext 
context )
+            throws InterceptorException;
+
+    public ActionInterceptorConfig getConfig()
+    {
+        return _config;
+    }
+    
+    protected void setInterceptorForward( InterceptorForward forward, 
ActionInterceptorContext context )
+    {
+        context.setInterceptorForward( forward, this );
+    }
 }

Deleted: 
/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChain.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChain.java?view=auto&rev=125998
==============================================================================

Deleted: 
/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChainConfig.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorChainConfig.java?view=auto&rev=125998
==============================================================================

Copied: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorConfig.java
 (from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorConfig.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java&r1=126260&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorConfig.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorConfig.java
       (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorConfig.java
 Mon Jan 24 01:03:38 2005
@@ -15,31 +15,35 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.pageflow.interceptor;
+package org.apache.beehive.netui.pageflow.actioninterceptor;
 
-import java.io.Serializable;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorConfig;
 
+import java.util.Map;
+import java.util.HashMap;
 
-/**
- * Configuration object used to initialize an [EMAIL PROTECTED] 
ActionInterceptor}.
- */ 
 public class ActionInterceptorConfig
-        implements Serializable
+        extends InterceptorConfig
 {
-    private String _interceptorClass;
+    private Map< String, String > _customProperties = new HashMap< String, 
String >();
 
     public ActionInterceptorConfig( String interceptorClass )
     {
-        _interceptorClass = interceptorClass;
+        super( interceptorClass );
     }
 
-    public String getInterceptorClass()
+    public Map< String, String > getCustomProperties()
     {
-        return _interceptorClass;
+        return _customProperties;
     }
-
-    public void setInterceptorClass( String interceptorClass )
+    
+    void addCustomProperty( String name, String value )
+    {
+        _customProperties.put( name, value );
+    }
+    
+    public String getCustomProperty( String name )
     {
-        _interceptorClass = interceptorClass;
+        return _customProperties.get( name );
     }
 }

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorContext.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorContext.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/ActionInterceptorContext.java
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,361 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.actioninterceptor;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorContext;
+import org.apache.beehive.netui.pageflow.internal.interceptor.Interceptor;
+import org.apache.beehive.netui.pageflow.internal.interceptor.Interceptors;
+import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.beehive.netui.util.config.bean.*;
+import org.apache.beehive.netui.util.config.ConfigUtil;
+import org.apache.struts.action.ActionForward;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.concurrent.ConcurrentHashMap;
+import java.io.Serializable;
+
+import static 
org.apache.beehive.netui.pageflow.internal.InternalConstants.ATTR_PREFIX;
+
+
+public class ActionInterceptorContext
+        extends InterceptorContext
+{
+    private static final String ACTIVE_INTERCEPTOR_CONTEXT_ATTR = ATTR_PREFIX 
+ "interceptorContext";
+    private static final String CACHE_ATTR = ATTR_PREFIX + 
"actionInterceptorConfig";
+    
+    private static final Logger _log = Logger.getInstance( 
ActionInterceptorContext.class );
+    
+    private transient ServletContext _servletContext;
+    private transient HttpServletRequest _request;
+    private transient HttpServletResponse _response;
+    private PageFlowController _pageFlow;
+    private InterceptorForward _originalForward;
+    private String _actionName;
+
+    
+    public ActionInterceptorContext( HttpServletRequest request, 
HttpServletResponse response,
+                                     ServletContext servletContext, 
PageFlowController controller,
+                                     InterceptorForward originalForward, 
String actionName )
+    {
+        _request = request;
+        _response = response;
+        _pageFlow = controller;
+        _originalForward = originalForward;
+        _actionName = actionName;
+        _servletContext = servletContext;
+    }
+
+    public HttpServletRequest getRequest()
+    {
+        return _request;
+    }
+
+    public HttpServletResponse getResponse()
+    {
+        return _response;
+    }
+
+    /**
+     * Get the page flow on which the action is being raised.
+     */ 
+    public PageFlowController getPageFlow()
+    {
+        return _pageFlow;
+    }
+
+    /**
+     * 
+     * Get a wrapper for the original URI from the action that was 
intercepted.  This value will be <code>null</code>
+     * if the interceptor was run before the action, or if the action itself 
returned <code>null</code>.
+     */ 
+    public InterceptorForward getOriginalForward()
+    {
+        return _originalForward;
+    }
+
+    /**
+     * Get the name of the action being raised.
+     */ 
+    public String getActionName()
+    {
+        return _actionName;
+    }
+
+    public ServletContext getServletContext()
+    {
+        return _servletContext;
+    }
+    
+    /**
+      * 
+      * Set an [EMAIL PROTECTED] InterceptorForward} that changes the 
destination URI of the intercepted action.  If the
+      * InterceptorForward points to a nested page flow, then [EMAIL 
PROTECTED] ActionInterceptor#afterNestedIntercept} will be
+      * called before the nested page flow returns to the original page flow.
+      */ 
+    public void setInterceptorForward( InterceptorForward fwd, 
ActionInterceptor interceptor )
+    {
+        setResultOverride( fwd, interceptor );
+        
+        //
+        // If there was no original forward (i.e., this is happening before 
the action was invoked), create a
+        // pseudo-forward out of the original request.
+        //
+        if ( _originalForward == null ) _originalForward = new 
OriginalForward( _request );
+        
+        //
+        // Store this context in the request.
+        //
+        _request.setAttribute( ACTIVE_INTERCEPTOR_CONTEXT_ATTR, this );
+    }
+
+    public InterceptorForward getResultOverride()
+    {
+        return ( InterceptorForward ) super.getResultOverride();
+    }
+
+    public ActionInterceptor getOverridingInterceptor()
+    {
+        return ( ActionInterceptor ) super.getOverridingInterceptor();
+    }
+
+    public InterceptorForward getInterceptorForward()
+    {
+        return getResultOverride();
+    }
+   
+    public boolean hasInterceptorForward()
+    {
+        return hasResultOverride();
+    }
+    
+    public static ActionInterceptorContext getActiveContext( ServletRequest 
request, boolean consume )
+    {
+        ActionInterceptorContext context =
+                ( ActionInterceptorContext ) request.getAttribute( 
ACTIVE_INTERCEPTOR_CONTEXT_ATTR );
+        if ( consume ) request.removeAttribute( 
ACTIVE_INTERCEPTOR_CONTEXT_ATTR );
+        return context;
+    }
+   
+    
+    private static class OriginalForward extends InterceptorForward
+    {
+        private Map _savedAttrs;
+    
+    
+        public OriginalForward( HttpServletRequest request )
+        {
+            super( request );
+            saveRequestAttrs( request );
+        }
+    
+        private void saveRequestAttrs( ServletRequest request )
+        {
+            _savedAttrs = new HashMap();
+        
+            for ( Enumeration e = request.getAttributeNames(); 
e.hasMoreElements(); )
+            {
+                String attrName = ( String ) e.nextElement();
+                Object attrVal = request.getAttribute( attrName ); 
+            
+                if ( attrVal instanceof Serializable )
+                {
+                    _savedAttrs.put( attrName, attrVal );
+                }
+                else
+                {
+                    if ( _log.isWarnEnabled() )
+                    {
+                        _log.warn( "Dropping non-serializable request 
attribute " + attrName + " (" + attrVal + ")." );
+                    }
+                }
+            } 
+        }
+    
+        public void rehydrateRequest( ServletRequest request )
+        {
+            if ( _savedAttrs != null )
+            {
+                for ( Iterator i = _savedAttrs.entrySet().iterator(); 
i.hasNext(); )
+                {
+                    Map.Entry entry = ( Map.Entry ) i.next();
+                
+                    String attrName = ( String ) entry.getKey();
+                    if ( request.getAttribute( attrName ) == null )
+                    {
+                        request.setAttribute( attrName, entry.getValue() );
+                    }
+                }
+            }
+        }
+    }
+    
+    public List< Interceptor > getActionInterceptors()
+    {
+        ServletContext servletContext = getServletContext();
+        ConcurrentHashMap< String, HashMap< String, ArrayList< Interceptor > > 
> cache =
+            ( ConcurrentHashMap< String, HashMap< String, ArrayList< 
Interceptor > > > ) servletContext.getAttribute( CACHE_ATTR );
+        
+        if ( cache == null )
+        {
+            //
+            // Don't have to synchronize here.  If by some chance two initial 
requests come in at the same time,
+            // one of the caches will get overwritten in the ServletContext, 
but it will just get recreated the
+            // next time.
+            //
+            cache = new ConcurrentHashMap< String, HashMap< String, ArrayList< 
Interceptor > > >();
+            servletContext.setAttribute( CACHE_ATTR, cache );
+        }
+        
+        String modulePath = getPageFlow().getModulePath();
+        String actionName = getActionName();
+        HashMap< String, ArrayList< Interceptor > > cacheByPageFlow = 
cache.get( modulePath );
+        if ( cacheByPageFlow != null )
+        {
+            List< Interceptor > interceptors = cacheByPageFlow.get( actionName 
);
+            if ( interceptors != null ) return interceptors;
+        }
+        
+        //
+        // We didn't find it in the cache -- build it.
+        //
+        if ( cacheByPageFlow == null ) cacheByPageFlow = new HashMap< String, 
ArrayList< Interceptor > >();
+        PageflowActionInterceptors config = 
ConfigUtil.getConfig().getPageflowActionInterceptors();
+        ArrayList< Interceptor > interceptorsList = new ArrayList< Interceptor 
>();
+        
+        if ( config == null )
+        {
+            cacheByPageFlow.put( actionName, interceptorsList );
+            cache.put( modulePath, cacheByPageFlow );
+            return interceptorsList;
+        }
+        
+        //
+        // Global interceptors.
+        //
+        PageflowActionInterceptors.Global globalInterceptors = 
config.getGlobal();
+        
+        if ( globalInterceptors != null )
+        {
+            addInterceptors( globalInterceptors.getActionInterceptorArray(), 
interceptorsList );
+            addSimpleInterceptors( 
globalInterceptors.getSimpleActionInterceptorArray(), interceptorsList );
+        }
+        
+        //
+        // Per-pageflow and per-action interceptors.
+        //
+        String pageFlowURI = getPageFlow().getURI();
+        PageflowActionInterceptors.PerPageflow[] perPageFlowInterceptorsConfig 
= config.getPerPageflowArray();
+        
+        if ( perPageFlowInterceptorsConfig != null )
+        {
+            for ( int i = 0; i < perPageFlowInterceptorsConfig.length; i++ )
+            {
+                PageflowActionInterceptors.PerPageflow ppfi = 
perPageFlowInterceptorsConfig[i];
+                
+                if ( ppfi != null && pageFlowURI.equals( ppfi.getPageflowUri() 
) )
+                {
+                    //
+                    // This is a matching page flow -- add per-pageflow 
interceptors.
+                    //
+                    addInterceptors( 
perPageFlowInterceptorsConfig[i].getActionInterceptorArray(), interceptorsList 
);
+                    addSimpleInterceptors( 
perPageFlowInterceptorsConfig[i].getSimpleActionInterceptorArray(),
+                                           interceptorsList );
+                    
+                    PageflowActionInterceptors.PerPageflow.PerAction[] 
perActionConfigs =
+                            
perPageFlowInterceptorsConfig[i].getPerActionArray();
+                    
+                    if ( perActionConfigs != null )
+                    {
+                        for ( int j = 0; j < perActionConfigs.length; j++ )
+                        {
+                            PageflowActionInterceptors.PerPageflow.PerAction 
perActionConfig = perActionConfigs[j];
+                            
+                            if ( perActionConfig != null && actionName.equals( 
perActionConfig.getActionName() ) )
+                            {
+                                //
+                                // This is a matching action -- add per-action 
interceptors.
+                                //
+                                addInterceptors( 
perActionConfig.getActionInterceptorArray(), interceptorsList );
+                                addSimpleInterceptors( 
perActionConfig.getSimpleActionInterceptorArray(),
+                                                       interceptorsList );
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        
+        cacheByPageFlow.put( actionName, interceptorsList );
+        cache.put( modulePath, cacheByPageFlow );
+        return interceptorsList;
+    }
+    
+    private static void addInterceptors( 
org.apache.beehive.netui.util.config.bean.ActionInterceptor[] configBeans,
+                                         List< Interceptor > interceptorsList )
+    {
+        if ( configBeans != null )
+        {
+            for ( int i = 0; i < configBeans.length; i++ )
+            {
+                org.apache.beehive.netui.util.config.bean.ActionInterceptor 
configBean = configBeans[i];
+                String className = configBean.getInterceptorClass();
+                ActionInterceptorConfig config = new ActionInterceptorConfig( 
className );
+                CustomProperty[] customProps = 
configBean.getCustomPropertyArray();
+                
+                if ( customProps != null )
+                {
+                    for ( int j = 0; j < customProps.length; j++ )
+                    {
+                        CustomProperty customProp = customProps[j];
+                        config.addCustomProperty( customProp.getName(), 
customProp.getValue() );
+                    }
+                }
+                
+                Interceptors.addInterceptor( config, ActionInterceptor.class, 
interceptorsList );
+            }
+        }
+    }
+    
+    private static void addSimpleInterceptors( 
org.apache.beehive.netui.util.config.bean.SimpleActionInterceptor[] configBeans,
+                                               List< Interceptor > 
interceptorsList )
+    {
+        for ( int i = 0; i < configBeans.length; i++ )
+        {
+            org.apache.beehive.netui.util.config.bean.SimpleActionInterceptor 
configBean = configBeans[i];
+            String path = configBean.getInterceptPath();
+            boolean afterAction = configBean.getAfterAction();
+            SimpleActionInterceptorConfig config = new 
SimpleActionInterceptorConfig( path, afterAction );
+            interceptorsList.add( new SimpleActionInterceptor( config ) );
+        }
+    }
+
+    public void setOriginalForward( ActionForward origFwd )
+    {
+        _originalForward = origFwd != null ? new InterceptorForward( origFwd, 
_servletContext, _pageFlow ) : null;
+    }
+}

Deleted: 
/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorsConfig.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/ActionInterceptorsConfig.java?view=auto&rev=125998
==============================================================================

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/AfterNestedInterceptContext.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/AfterNestedInterceptContext.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/AfterNestedInterceptContext.java
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.actioninterceptor;
+
+import org.apache.beehive.netui.pageflow.PageFlowController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
+
+public class AfterNestedInterceptContext
+        extends ActionInterceptorContext
+{
+    private String _returnAction;
+
+    public AfterNestedInterceptContext( HttpServletRequest request, 
HttpServletResponse response,
+                                        ServletContext servletContext, 
PageFlowController controller,
+                                        InterceptorForward originalForward, 
String actionName,
+                                        String returnAction )
+    {
+        super( request, response, servletContext, controller, originalForward, 
actionName );
+        _returnAction = returnAction;
+    }
+    
+    /**
+     * Get the return action from the nested page flow that intercepted the 
original page flow's action.
+     */ 
+    public String getReturnAction()
+    {
+        return _returnAction;
+    }
+}

Copied: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/InterceptorForward.java
 (from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/InterceptorForward.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java&r1=126260&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/InterceptorForward.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java
    (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/InterceptorForward.java
      Mon Jan 24 01:03:38 2005
@@ -15,13 +15,16 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.pageflow.interceptor;
+package org.apache.beehive.netui.pageflow.actioninterceptor;
 
 import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.ServletContext;
 import java.net.URI;
+import java.net.URISyntaxException;
 
 import org.apache.struts.action.ActionForward;
 
@@ -31,21 +34,26 @@
  */ 
 public class InterceptorForward extends Forward
 {
-    InterceptorForward( Forward originalForward )
+    protected InterceptorForward( Forward originalForward )
     {
         super( originalForward );
     }
     
     /**
-     * Internal.  Initialize from an existing Struts ActionForward
-     * @exclude
+     * Initialize from an existing Struts ActionForward
      */ 
-    public InterceptorForward( ActionForward originalForward, ServletContext 
servletContext )
+    InterceptorForward( ActionForward originalForward, ServletContext 
servletContext, PageFlowController pageFlow )
     {
         super( originalForward, servletContext );
+        
+        if ( ! getContextRelative() )
+        {
+            setPath( pageFlow.getModulePath() + getPath() );
+            setContextRelative( true );
+        }
     }
     
-    InterceptorForward( HttpServletRequest request )
+    protected InterceptorForward( HttpServletRequest request )
     {
         super( request );
     }

Copied: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/OriginalForward.java
 (from r126260, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/OriginalForward.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java&r1=126260&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/OriginalForward.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/OriginalForward.java
       (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/OriginalForward.java
 Mon Jan 24 01:03:38 2005
@@ -15,7 +15,7 @@
  *
  * $Header:$
  */
-package org.apache.beehive.netui.pageflow.interceptor;
+package org.apache.beehive.netui.pageflow.actioninterceptor;
 
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.pageflow.Forward;

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptor.java
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.actioninterceptor;
+
+import 
org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorException;
+import org.apache.beehive.netui.pageflow.internal.interceptor.InterceptorChain;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+class SimpleActionInterceptor
+        extends ActionInterceptor
+{
+    public SimpleActionInterceptor( SimpleActionInterceptorConfig config )
+    {
+        init( config );
+    }
+
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        if ( ! getConfig().isAfterAction() ) doit( context, chain );
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        if ( getConfig().isAfterAction() ) doit( context, chain );
+    }
+    
+    private void doit( ActionInterceptorContext context, InterceptorChain 
chain )
+        throws InterceptorException
+    {
+        try
+        {
+            String path = getConfig().getPath();
+            setInterceptorForward( new InterceptorForward( new URI( path ) ), 
context );
+            chain.continueChain();
+        }
+        catch ( URISyntaxException e )
+        {
+            throw new InterceptorException( e );
+        }
+    }
+
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+    }
+    
+    public SimpleActionInterceptorConfig getConfig()
+    {
+        return ( SimpleActionInterceptorConfig ) super.getConfig();
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptorConfig.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptorConfig.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/actioninterceptor/SimpleActionInterceptorConfig.java
   Mon Jan 24 01:03:38 2005
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.actioninterceptor;
+
+class SimpleActionInterceptorConfig
+        extends ActionInterceptorConfig
+{
+    private String _path;
+    private boolean _afterAction;
+
+    public SimpleActionInterceptorConfig( String path, boolean afterAction )
+    {
+        super( SimpleActionInterceptor.class.getName() );
+        _path = path;
+        _afterAction = afterAction;
+    }
+
+    public String getPath()
+    {
+        return _path;
+    }
+
+    public boolean isAfterAction()
+    {
+        return _afterAction;
+    }
+}

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java
   (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AdapterManager.java
   Mon Jan 24 01:03:38 2005
@@ -21,6 +21,15 @@
 import org.apache.beehive.netui.pageflow.ServletContainerAdapter;
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.util.DiscoveryUtils;
+import org.apache.commons.discovery.resource.classes.DiscoverClasses;
+import org.apache.commons.discovery.resource.ClassLoaders;
+import org.apache.commons.discovery.resource.names.DiscoverServiceNames;
+import org.apache.commons.discovery.ResourceClassIterator;
+import org.apache.commons.discovery.ResourceClass;
+import org.apache.commons.discovery.ResourceNameIterator;
+import org.apache.commons.discovery.DiscoveryException;
+import org.apache.commons.discovery.tools.DiscoverClass;
+import org.apache.commons.discovery.tools.SPInterface;
 
 import javax.servlet.ServletContext;
 
@@ -111,6 +120,24 @@
         return null;
     }
 
+    private static Class loadClass( ClassLoaders classLoaders, String 
className, Class spiClass )
+    {
+        for ( int i = 0; i < classLoaders.size(); ++i )
+        {
+            try
+            {
+                return classLoaders.get( i ).loadClass( className );
+            }
+            catch ( ClassNotFoundException e )
+            {
+                // ignore
+            }
+        }
+        
+        _log.error( "Could not load class " + className + " to implement " + 
spiClass.getName() );
+        return null;
+    }
+    
     private static ServletContainerAdapter createServletContainerAdapter( 
ServletContext servletContext )
     {
         String adapterClassName = System.getProperty( 
SERVLET_CONTAINER_ADAPTER_PROP );
@@ -128,15 +155,23 @@
             }
         }
 
-        Class[] classes = DiscoveryUtils.getImplementorClasses( 
ServletContainerAdapter.class );
-
-        for ( int i = 0; i < classes.length; i++ )
+        
+        ClassLoaders loaders = ClassLoaders.getAppLoaders( 
ServletContainerAdapter.class, AdapterManager.class, true );
+        DiscoverServiceNames dsn = new DiscoverServiceNames( loaders );
+        ResourceNameIterator i = dsn.findResourceNames( 
ServletContainerAdapter.class.getName() );
+        
+        while ( i.hasNext() )
         {
-            ServletContainerAdapter sa =
-                    ( ServletContainerAdapter ) tryAdapter( classes[i], 
servletContext );
-            if ( sa != null ) return sa;
+            Class adapterClass = loadClass( loaders, i.nextResourceName(), 
ServletContainerAdapter.class );
+            
+            if ( adapterClass != null )
+            {
+                ServletContainerAdapter sa =
+                        ( ServletContainerAdapter ) tryAdapter( adapterClass, 
servletContext );
+                if ( sa != null ) return sa;
+            }
         }
-
+        
         _log.info( "No ServletContainerAdapter specified or discovered; using 
" + DefaultServletContainerAdapter.class );
         ServletContainerAdapter sa =
                 new DefaultServletContainerAdapter()

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java&r1=126270&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java
    (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/RequestValues.java
    Mon Jan 24 01:03:38 2005
@@ -38,6 +38,7 @@
     private static final String CURRENT_FLOWCONTROLLER_ATTR = ATTR_PREFIX + 
"flowController";
     private static final String VIEW_RENDERER_ATTR = ATTR_PREFIX + 
"viewRenderer";
     private static final String PREVIOUS_PAGE_INFO_ATTR = ATTR_PREFIX + 
"prevPageInfo";
+    private static final String RETURNING_FROM_ACTION_INTERCEPT_ATTR = 
ATTR_PREFIX + "interceptReturn";
     
     
     public static boolean isForwardedRequest( ServletRequest request )
@@ -143,5 +144,22 @@
     public static void setPreviousPageInfo( ServletRequest request, 
PreviousPageInfo previousPageInfo )
     {
         request.setAttribute( PREVIOUS_PAGE_INFO_ATTR, previousPageInfo );
+    }
+    
+    public static void setReturningFromActionIntercept( ServletRequest 
request, boolean isReturning )
+    {
+        if ( isReturning )
+        {
+            request.setAttribute( RETURNING_FROM_ACTION_INTERCEPT_ATTR, 
Boolean.TRUE );
+        }
+        else
+        {
+            request.removeAttribute( RETURNING_FROM_ACTION_INTERCEPT_ATTR );
+        }
+    }
+    
+    public static boolean isReturningFromActionIntercept( ServletRequest 
request )
+    {
+        return request.getAttribute( RETURNING_FROM_ACTION_INTERCEPT_ATTR ) != 
null;
     }
 }

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptor.java
  Mon Jan 24 01:03:38 2005
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal.interceptor;
+
+/**
+ * Base class for all interceptors.
+ */ 
+// TODO: this interface is in internal because it needs to move to a common 
area.
+// TODO: the controls interceptor model 
+public interface Interceptor
+{
+    public void init( InterceptorConfig config );
+    
+    public void preInvoke( InterceptorContext context, InterceptorChain chain )
+        throws InterceptorException;
+    
+    public void postInvoke( InterceptorContext context, InterceptorChain chain 
)
+        throws InterceptorException;
+}
+

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorChain.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorChain.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorChain.java
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal.interceptor;
+
+import java.util.List;
+import java.util.LinkedList;
+
+public abstract class InterceptorChain
+{
+    private LinkedList< Interceptor > _chain = new LinkedList< Interceptor >();
+    private InterceptorContext _context;
+    
+    protected InterceptorChain( InterceptorContext context, List< Interceptor 
> interceptors )
+    {
+        _context = context;
+        _chain.addAll( interceptors );
+    }
+    
+    public void continueChain()
+        throws InterceptorException
+    {
+        if ( ! _chain.isEmpty() )
+        {
+            invoke( _chain.remove() );
+        }
+    }
+    
+    protected abstract void invoke( Interceptor interceptor ) throws 
InterceptorException;
+    
+    public InterceptorContext getContext()
+    {
+        return _context;
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorConfig.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorConfig.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorConfig.java
    Mon Jan 24 01:03:38 2005
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal.interceptor;
+
+import java.io.Serializable;
+
+public abstract class InterceptorConfig
+        implements Serializable
+{
+    private String _interceptorClass;
+
+    protected InterceptorConfig()
+    {
+    }
+
+    protected InterceptorConfig( String interceptorClass )
+    {
+        _interceptorClass = interceptorClass;
+    }
+
+    public String getInterceptorClass()
+    {
+        return _interceptorClass;
+    }
+
+    public void setInterceptorClass( String interceptorClass )
+    {
+        _interceptorClass = interceptorClass;
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorContext.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorContext.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorContext.java
   Mon Jan 24 01:03:38 2005
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal.interceptor;
+
+import java.io.Serializable;
+
+public class InterceptorContext
+        implements Serializable
+{
+    private Object _resultOverride;
+    private Interceptor _overridingInterceptor;
+
+    public void setResultOverride( Object newResult, Interceptor interceptor )
+    {
+        _resultOverride = newResult;
+        _overridingInterceptor = interceptor;
+    }
+    
+    public boolean hasResultOverride()
+    {
+        return _overridingInterceptor != null;
+    }
+
+    public Object getResultOverride()
+    {
+        return _resultOverride;
+    }
+    
+    public Interceptor getOverridingInterceptor()
+    {
+        return _overridingInterceptor;
+    }
+    
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorException.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorException.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/InterceptorException.java
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal.interceptor;
+
+public class InterceptorException
+        extends Exception
+{
+    public InterceptorException( String message )
+    {
+        super( message );
+    }
+    
+    public InterceptorException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+    
+    public InterceptorException( Throwable cause )
+    {
+        super( cause );
+    }
+}

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptors.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptors.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/interceptor/Interceptors.java
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal.interceptor;
+
+
+import org.apache.beehive.netui.util.DiscoveryUtils;
+import org.apache.beehive.netui.util.logging.Logger;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class Interceptors
+{
+    private static final Logger _log = Logger.getInstance( Interceptors.class 
);
+    
+    public static void doPreIntercept( InterceptorContext context, List< 
Interceptor > interceptors )
+            throws InterceptorException
+    {
+        PreInvokeInterceptorChain chain = new PreInvokeInterceptorChain( 
context, interceptors );
+        chain.continueChain();
+    }
+    
+    public static void doPostIntercept( InterceptorContext context, List< 
Interceptor > interceptors )
+        throws InterceptorException
+    {
+        PostInvokeInterceptorChain chain = new PostInvokeInterceptorChain( 
context, interceptors );
+        chain.continueChain();
+    }
+    
+    /**
+     * Instantiates an interceptor, based on the class name in the given 
InterceptorConfig.
+     * 
+     * @param config the InterceptorConfig used to determine the interceptor 
class.
+     * @param baseClassOrInterface the required base class or interface.  May 
be <code>null</code>.
+     * @return an initialized Interceptor, or <code>null</code> if an error 
occurred.
+     */ 
+    public static Interceptor createInterceptor( InterceptorConfig config, 
Class baseClassOrInterface )
+    {
+        ClassLoader cl = DiscoveryUtils.getClassLoader();
+        String className = config.getInterceptorClass();
+        
+        try
+        {
+            Class interceptorClass = cl.loadClass( className );
+            
+            if ( baseClassOrInterface != null && ! 
baseClassOrInterface.isAssignableFrom( interceptorClass ) )
+            {
+                _log.error( "Interceptor " + interceptorClass.getName() + " 
does not implement or extend "
+                            + baseClassOrInterface.getName() );
+                return null;
+            }
+            
+            Interceptor interceptor = ( Interceptor ) 
interceptorClass.newInstance();
+            interceptor.init( config );
+            return interceptor;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            _log.error( "Could not find interceptor class " + className );
+        }
+        catch ( InstantiationException e )
+        {
+            _log.error( "Could not instantiate interceptor class " + 
className, e );
+        }
+        catch ( IllegalAccessException e )
+        {
+            _log.error( "Could not instantiate interceptor class " + 
className, e );
+        }
+        catch ( ClassCastException e )
+        {
+            _log.error( "Interceptor class " + className + " does not 
implement " + Interceptor.class.getName() );
+        }
+        
+        return null;
+    }
+    
+    /**
+     * Instantiates an interceptor, based on the class name in the given 
InterceptorConfig, and adds it to the
+     * given collection of interceptors.
+     * 
+     * @param config the InterceptorConfig used to determine the interceptor 
class.
+     * @param baseClassOrInterface the required base class or interface.  May 
be <code>null</code>.
+     * @param interceptors the List of interceptors to which to add.
+     * @return an initialized Interceptor, or <code>null</code> if an error 
occurred.
+     */ 
+    public static Interceptor addInterceptor( InterceptorConfig config, Class 
baseClassOrInterface,
+                                              List< Interceptor > interceptors 
)
+    {
+        Interceptor interceptor = createInterceptor( config, 
baseClassOrInterface );
+        if ( interceptor != null ) interceptors.add( interceptor );
+        return interceptor;
+    }
+    
+    private static final class PreInvokeInterceptorChain
+            extends InterceptorChain
+    {
+        public PreInvokeInterceptorChain( InterceptorContext context, List< 
Interceptor > interceptors )
+        {
+            super( context, interceptors );
+        }
+        
+        protected void invoke( Interceptor interceptor )
+                throws InterceptorException
+        {
+            interceptor.preInvoke( getContext(), this );
+        }
+    }
+    
+    private static final class PostInvokeInterceptorChain
+            extends InterceptorChain
+    {
+        public PostInvokeInterceptorChain( InterceptorContext context, List< 
Interceptor > interceptors )
+        {
+            super( context, interceptors );
+        }
+        
+        protected void invoke( Interceptor interceptor )
+                throws InterceptorException
+        {
+            interceptor.postInvoke( getContext(), this );
+        }
+    }
+}

Deleted: 
/incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter?view=auto&rev=126270
==============================================================================

Copied: 
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServletContainerAdapter
 (from r125998, 
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter)
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServletContainerAdapter?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter&r1=125998&p2=incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServletContainerAdapter&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServerAdapter
        (original)
+++ 
incubator/beehive/trunk/netui/src/tomcat-webapp/5x/META-INF/services/org.apache.beehive.netui.pageflow.ServletContainerAdapter
      Mon Jan 24 01:03:38 2005
@@ -1 +1 @@
-org.apache.beehive.netui.tomcat.TomcatServerAdapter
+org.apache.beehive.netui.tomcat.TomcatServletContainerAdapter

Modified: incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd&r1=126270&p2=incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd&r2=126271
==============================================================================
--- incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd      
(original)
+++ incubator/beehive/trunk/netui/src/util/schema/netui-config.xsd      Mon Jan 
24 01:03:38 2005
@@ -22,9 +22,24 @@
         </xsd:complexType>
     </xsd:element>
 
+    <xsd:complexType name="custom-property">
+        <xsd:sequence>
+            <xsd:element name="name" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
+            <xsd:element name="value" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
+        </xsd:sequence>
+    </xsd:complexType>
+    
     <xsd:complexType name="action-interceptor">
         <xsd:sequence>
             <xsd:element name="interceptor-class" type="xsd:string" 
minOccurs="1" maxOccurs="1"/>
+            <xsd:element name="custom-property" type="netui:custom-property" 
minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+    
+    <xsd:complexType name="simple-action-interceptor">
+        <xsd:sequence>
+            <xsd:element name="intercept-path" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
+            <xsd:element name="after-action" type="xsd:boolean" minOccurs="0" 
maxOccurs="1" default="false"/>
         </xsd:sequence>
     </xsd:complexType>
 
@@ -33,17 +48,23 @@
             <xsd:element name="global" minOccurs="0" maxOccurs="1">
                 <xsd:complexType>
                     <xsd:sequence>
-                        <xsd:element name="before-action" minOccurs="0" 
maxOccurs="1">
-                            <xsd:complexType>
-                                <xsd:sequence>
-                                    <xsd:element name="action-interceptor" 
type="netui:action-interceptor" minOccurs="1" maxOccurs="unbounded"/>
-                                </xsd:sequence>
-                            </xsd:complexType>
-                        </xsd:element>            
-                        <xsd:element name="after-action" minOccurs="0" 
maxOccurs="1">
+                        <xsd:element name="simple-action-interceptor" 
type="netui:simple-action-interceptor" minOccurs="0" maxOccurs="unbounded"/>
+                        <xsd:element name="action-interceptor" 
type="netui:action-interceptor" minOccurs="0" maxOccurs="unbounded"/>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+            <xsd:element name="per-pageflow" minOccurs="0" 
maxOccurs="unbounded">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="pageflow-uri" type="xsd:string" 
minOccurs="1" maxOccurs="1"/>
+                        <xsd:element name="simple-action-interceptor" 
type="netui:simple-action-interceptor" minOccurs="0" maxOccurs="unbounded"/>
+                        <xsd:element name="action-interceptor" 
type="netui:action-interceptor" minOccurs="0" maxOccurs="unbounded"/>
+                        <xsd:element name="per-action" minOccurs="0" 
maxOccurs="unbounded">
                             <xsd:complexType>
                                 <xsd:sequence>
-                                    <xsd:element name="action-interceptor" 
type="netui:action-interceptor" minOccurs="1" maxOccurs="unbounded"/>
+                                    <xsd:element name="action-name" 
type="xsd:string" minOccurs="1" maxOccurs="1"/>
+                                    <xsd:element 
name="simple-action-interceptor" type="netui:simple-action-interceptor" 
minOccurs="0" maxOccurs="unbounded"/>
+                                    <xsd:element name="action-interceptor" 
type="netui:action-interceptor" minOccurs="0" maxOccurs="unbounded"/>
                                 </xsd:sequence>
                             </xsd:complexType>
                         </xsd:element>

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml&r1=126270&p2=incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
       (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
       Mon Jan 24 01:03:38 2005
@@ -13,24 +13,104 @@
     </expression-languages>
 
     <pageflow-action-interceptors>
+        <!-- for the ActionInterceptorsGlobal test -->
         <global>
-            <before-action>
+            <action-interceptor>
+                
<interceptor-class>miniTests.actionInterceptors.GlobalInterceptor</interceptor-class>
+                <custom-property>
+                    <name>prop1</name>
+                    <value>value1</value>
+                </custom-property>
+                <custom-property>
+                    <name>prop2</name>
+                    <value>value2</value>
+                </custom-property>
+            </action-interceptor>
+        </global>
+
+        <!-- for the ActionInterceptorsSimple test -->
+        <per-pageflow>
+            
<pageflow-uri>/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf</pageflow-uri>
+            <simple-action-interceptor>
+                
<intercept-path>/miniTests/actionInterceptors/nested/Controller.jpf</intercept-path>
+            </simple-action-interceptor>
+        </per-pageflow>
+        <per-pageflow>
+            
<pageflow-uri>/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf</pageflow-uri>
+            <simple-action-interceptor>
+                
<intercept-path>/miniTests/actionInterceptors/nested/Controller.jpf</intercept-path>
+                <after-action>true</after-action>
+            </simple-action-interceptor>
+        </per-pageflow>
+        <per-pageflow>
+            
<pageflow-uri>/miniTests/actionInterceptors/someFlow/Controller.jpf</pageflow-uri>
+            <per-action>
+                <action-name>action1</action-name>
+                <simple-action-interceptor>
+                    
<intercept-path>/miniTests/actionInterceptors/nonNested/Controller.jpf</intercept-path>
+                    <after-action>true</after-action>
+                </simple-action-interceptor>
+            </per-action>
+        </per-pageflow>
+
+        
+        <!-- for the ActionInterceptorsChain test -->
+        <per-pageflow>
+            
<pageflow-uri>/miniTests/actionInterceptors/interruptChain/Controller.jpf</pageflow-uri>
+            <per-action>
+                <action-name>interruptChainBeforeAction</action-name>
                 <action-interceptor>
-                    
<interceptor-class>miniTests.interceptors.InterceptorsController$BeforeInterceptor</interceptor-class>
+                    
<interceptor-class>miniTests.actionInterceptors.BaseInterceptor</interceptor-class>
                 </action-interceptor>
                 <action-interceptor>
-                    
<interceptor-class>miniTests.interceptors.InterceptorsController$BeforeInterceptor2</interceptor-class>
+                    
<interceptor-class>miniTests.actionInterceptors.InterruptBeforeActionInterceptor</interceptor-class>
                 </action-interceptor>
-            </before-action>
-            <after-action>
                 <action-interceptor>
-                    
<interceptor-class>miniTests.interceptors.InterceptorsController$AfterInterceptor</interceptor-class>
+                    
<interceptor-class>miniTests.actionInterceptors.BaseInterceptor</interceptor-class>
                 </action-interceptor>
+            </per-action>
+            <per-action>
+                <action-name>interruptChainAfterAction</action-name>
                 <action-interceptor>
-                    
<interceptor-class>miniTests.interceptors.InterceptorsController$AfterInterceptor2</interceptor-class>
+                    
<interceptor-class>miniTests.actionInterceptors.BaseInterceptor</interceptor-class>
                 </action-interceptor>
-            </after-action>
-        </global>
+                <action-interceptor>
+                    
<interceptor-class>miniTests.actionInterceptors.InterruptAfterActionInterceptor</interceptor-class>
+                </action-interceptor>
+                <action-interceptor>
+                    
<interceptor-class>miniTests.actionInterceptors.BaseInterceptor</interceptor-class>
+                </action-interceptor>
+            </per-action>
+        </per-pageflow>
+
+        <!-- for the ActionInterceptorsOverrideForwards test -->
+        <per-pageflow>
+            
<pageflow-uri>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</pageflow-uri>
+            <per-action>
+                <action-name>forwardAway</action-name>
+                <action-interceptor>
+                    
<interceptor-class>miniTests.actionInterceptors.ForwardAwayInterceptor</interceptor-class>
+                </action-interceptor>
+            </per-action>
+            <per-action>
+                <action-name>forwardToNested</action-name>
+                <action-interceptor>
+                    
<interceptor-class>miniTests.actionInterceptors.ForwardToNestedInterceptor</interceptor-class>
+                </action-interceptor>
+            </per-action>
+            <per-action>
+                <action-name>forwardToNestedThenAway</action-name>
+                <action-interceptor>
+                    
<interceptor-class>miniTests.actionInterceptors.ForwardToNestedThenAwayInterceptor</interceptor-class>
+                </action-interceptor>
+            </per-action>
+            <per-action>
+                <action-name>forwardToNull</action-name>
+                <action-interceptor>
+                    
<interceptor-class>miniTests.actionInterceptors.ForwardToNullInterceptor</interceptor-class>
+                </action-interceptor>
+            </per-action>
+        </per-pageflow>
     </pageflow-action-interceptors>
 
     <pageflow-handlers>

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/BaseInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/BaseInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/BaseInterceptor.java
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,39 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class BaseInterceptor extends ActionInterceptor
+{
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        addMessage( context, "in preAction() in " + getClass().getName() );
+        chain.continueChain();
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        addMessage( context, "in postAction() in " + getClass().getName() );
+        chain.continueChain();
+    }
+    
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+        addMessage( context, "in afterNestedIntercept() in " + 
getClass().getName() );
+    }
+
+    protected static void addMessage( ActionInterceptorContext context, String 
msg )
+    {
+        ArrayList< String > messages = ( ArrayList< String > ) 
context.getRequest().getAttribute( "messages" );
+        if ( messages == null )
+        {
+            messages = new ArrayList< String >();
+            context.getRequest().setAttribute( "messages", messages );
+        }
+        messages.add( msg );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardAwayInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardAwayInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardAwayInterceptor.java
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,32 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class ForwardAwayInterceptor extends ActionInterceptor
+{
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        try
+        {
+            setInterceptorForward( new InterceptorForward( new URI( 
"/miniTests/actionInterceptors/overrideForwards/alternate.jsp" ) ), context );
+        }
+        catch ( URISyntaxException e )
+        {
+            throw new InterceptorException( e );
+        }
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        chain.continueChain();
+    }
+    
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedInterceptor.java
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,32 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class ForwardToNestedInterceptor extends ActionInterceptor
+{
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        try
+        {
+            setInterceptorForward( new InterceptorForward( new URI( 
"/miniTests/actionInterceptors/nested/Controller.jpf" ) ), context );
+        }
+        catch ( URISyntaxException e )
+        {
+            throw new InterceptorException( e );
+        }
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        chain.continueChain();
+    }
+    
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedThenAwayInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedThenAwayInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNestedThenAwayInterceptor.java
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,40 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class ForwardToNestedThenAwayInterceptor extends ActionInterceptor
+{
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        try
+        {
+            setInterceptorForward( new InterceptorForward( new URI( 
"/miniTests/actionInterceptors/nested/Controller.jpf" ) ), context );
+        }
+        catch ( URISyntaxException e )
+        {
+            throw new InterceptorException( e );
+        }
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        chain.continueChain();
+    }
+    
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+        try
+        {
+            setInterceptorForward( new InterceptorForward( new URI( 
"/miniTests/actionInterceptors/overrideForwards/alternate.jsp" ) ), context );
+        }
+        catch ( URISyntaxException e )
+        {
+            throw new InterceptorException( e );
+        }
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNullInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNullInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/ForwardToNullInterceptor.java
       Mon Jan 24 01:03:38 2005
@@ -0,0 +1,35 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+import java.io.IOException;
+
+public class ForwardToNullInterceptor extends ActionInterceptor
+{
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        setInterceptorForward( null, context );
+
+        try
+        {
+            context.getResponse().getWriter().println( "Action interceptor " + 
getClass().getName() + " overrode the forward to null, then wrote this message 
to the response." );
+        }
+        catch ( IOException e )
+        {
+            throw new InterceptorException( e );
+        }
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        chain.continueChain();
+    }
+    
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/GlobalInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/GlobalInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/GlobalInterceptor.java
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,62 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class GlobalInterceptor extends BaseInterceptor
+{
+    private String _prop1;
+    private String _prop2;
+    
+    public void init( ActionInterceptorConfig config )
+    {
+        _prop1 = config.getCustomProperty( "prop1" );
+        _prop2 = config.getCustomProperty( "prop2" );
+    }
+
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        if ( context.getPageFlow().getURI().equals( 
"/miniTests/actionInterceptors/globalInterceptors/Controller.jpf" ) )
+        {
+            addMessage( context, "in preAction()" );
+
+            if ( context.getActionName().equals( "interceptAndNest" ) )
+            {
+                try
+                {
+                    setInterceptorForward( new InterceptorForward( new URI( 
"/miniTests/actionInterceptors/nested/Controller.jpf" ) ), context );
+                }
+                catch ( URISyntaxException e )
+                {
+                    throw new InterceptorException( e );
+                }
+            }
+        }
+
+        chain.continueChain();
+    }
+
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        if ( context.getPageFlow().getURI().equals( 
"/miniTests/actionInterceptors/globalInterceptors/Controller.jpf" ) )
+        {
+            addMessage( context, "in postAction()" );
+            addMessage( context, "custom property 'prop1' is " + _prop1 );
+            addMessage( context, "custom property 'prop2' is " + _prop2 );
+        }
+
+        chain.continueChain();
+    }
+    
+    public void afterNestedIntercept( AfterNestedInterceptContext context ) 
throws InterceptorException
+    {
+        if ( context.getPageFlow().getURI().equals( 
"/miniTests/actionInterceptors/globalInterceptors/Controller.jpf" ) )
+        {
+            addMessage( context, "in afterNestedIntercept()" );
+        }
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptAfterActionInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptAfterActionInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptAfterActionInterceptor.java
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,16 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class InterruptAfterActionInterceptor extends BaseInterceptor
+{
+    public void postAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        addMessage( context, "in postAction() in " + getClass().getName() );
+        addMessage( context, getClass().getName() + ": interrupting chain" );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptBeforeActionInterceptor.java
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptBeforeActionInterceptor.java?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/actionInterceptors/InterruptBeforeActionInterceptor.java
       Mon Jan 24 01:03:38 2005
@@ -0,0 +1,16 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.actioninterceptor.*;
+import org.apache.beehive.netui.pageflow.internal.interceptor.*;
+import java.net.*;
+import java.util.*;
+
+public class InterruptBeforeActionInterceptor extends BaseInterceptor
+{
+    public void preAction( ActionInterceptorContext context, InterceptorChain 
chain )
+            throws InterceptorException
+    {
+        addMessage( context, "in preAction() in " + getClass().getName() );
+        addMessage( context, getClass().getName() + ": interrupting chain" );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/Controller.jpf
  Mon Jan 24 01:03:38 2005
@@ -0,0 +1,13 @@
+package miniTests.actionInterceptors;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf
       Mon Jan 24 01:03:38 2005
@@ -0,0 +1,14 @@
+package miniTests.actionInterceptors.globalInterceptors;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="interceptAndNest", path="index.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/globalInterceptors/index.jsp
    Mon Jan 24 01:03:38 2005
@@ -0,0 +1,26 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        Messages:
+        <ul>
+        <netui-data:repeater dataSource="requestScope.messages">
+            
<netui-data:repeaterItem><li>${container.item}</li></netui-data:repeaterItem>
+        </netui-data:repeater>
+        </ul>
+        <br/>
+        <netui:anchor action="interceptAndNest">intercept with a nested page 
flow</netui:anchor><br/>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/index.jsp
       Mon Jan 24 01:03:38 2005
@@ -0,0 +1,42 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>Action Interceptors</h3>
+
+        <netui:anchor href="interceptedBeforeAction/Controller.jpf">
+            test simple-action-interceptor running before all actions in a 
page flow
+        </netui:anchor>
+        <br/>
+        <netui:anchor href="interceptedAfterAction/Controller.jpf">
+            test simple-action-interceptor running after all actions in a page 
flow
+        </netui:anchor>
+        <br/>
+        <netui:anchor href="someFlow/Controller.jpf">
+            test simple-action-interceptor running after a specific action
+        </netui:anchor>
+        <br/>
+        <netui:anchor href="globalInterceptors/Controller.jpf">
+            test global (all page flow) interceptors, as well as custom 
interceptor properties
+        </netui:anchor>
+        <br/>
+        <netui:anchor href="interruptChain/Controller.jpf">
+            test interrupting the interceptor chain
+        </netui:anchor>
+        <br/>
+        <netui:anchor href="overrideForwards/Controller.jpf">
+            test various ways of overriding the destination of an intercepted 
action
+        </netui:anchor>
+        <br/>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf
   Mon Jan 24 01:03:38 2005
@@ -0,0 +1,18 @@
+package miniTests.actionInterceptors.interceptedAfterAction;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="another", path="another.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected void beforeAction()
+    {
+        getRequest().setAttribute( "actionRun" , Boolean.TRUE );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.jsp
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        Another page...
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/index.jsp
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        We've hit the original page flow we were looking for.
+        <br/>
+        <netui:anchor action="another">hit another action</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf
  Mon Jan 24 01:03:38 2005
@@ -0,0 +1,18 @@
+package miniTests.actionInterceptors.interceptedBeforeAction;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="another", path="another.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected void beforeAction()
+    {
+        getRequest().setAttribute( "actionRun" , Boolean.TRUE );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.jsp
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        Another page...
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/index.jsp
       Mon Jan 24 01:03:38 2005
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        We've hit the original page flow we were looking for.
+        <br/>
+        <netui:anchor action="another">hit another action</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf
   Mon Jan 24 01:03:38 2005
@@ -0,0 +1,21 @@
+package miniTests.actionInterceptors.interruptChain;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+import java.util.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="interruptChainBeforeAction", path="index.jsp"),
+        @Jpf.SimpleAction(name="interruptChainAfterAction", path="index.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected void beforeAction()
+    {
+        ArrayList< String > messages = ( ArrayList< String > ) 
getRequest().getAttribute( "messages" );
+        if ( messages != null ) messages.add( "in action " + 
getCurrentActionName() );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,29 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        Messages:
+        <ul>
+        <netui-data:repeater dataSource="requestScope.messages">
+            
<netui-data:repeaterItem><li>${container.item}</li></netui-data:repeaterItem>
+        </netui-data:repeater>
+        </ul>
+        <br/>
+
+        <netui:anchor 
action="interruptChainBeforeAction">interruptChainBeforeAction</netui:anchor>
+        <br/>
+        <netui:anchor 
action="interruptChainAfterAction">interruptChainAfterAction</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/Controller.jpf
   Mon Jan 24 01:03:38 2005
@@ -0,0 +1,15 @@
+package miniTests.actionInterceptors.nested;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    nested=true,
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="done", returnAction="nestedDone")
+    }
+)
+public class Controller extends PageFlowController
+{
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nested/index.jsp
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body bgcolor="#CCFFFF">
+        <h3>${pageFlow.URI}</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <netui:anchor action="done">done</netui:anchor>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>${requestScope.actionRun == null ? 
"no" : "yes" }</b>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/Controller.jpf
        Mon Jan 24 01:03:38 2005
@@ -0,0 +1,13 @@
+package miniTests.actionInterceptors.nonNested;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/error.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/error.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/error.jsp
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        We should never end up at this page; if we do, it means an interceptor 
isn't working or isn't configured correctly.
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/nonNested/index.jsp
     Mon Jan 24 01:03:38 2005
@@ -0,0 +1,23 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body bgcolor="#CCFFFF">
+        <h3>${pageFlow.URI}</h3>
+
+        Now we're in the injected non-nested page flow.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>${requestScope.actionRun == null ? 
"no" : "yes" }</b>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,17 @@
+package miniTests.actionInterceptors.overrideForwards;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="forwardAway", path="error.jsp"),
+        @Jpf.SimpleAction(name="forwardToNested", path="index.jsp"),
+        @Jpf.SimpleAction(name="forwardToNestedThenAway", path="error.jsp"),
+        @Jpf.SimpleAction(name="forwardToNull", path="error.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/alternate.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/alternate.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/alternate.jsp
  Mon Jan 24 01:03:38 2005
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        Got to the alternate (forward-away) page.
+        <br/>
+        <netui:anchor action="begin">go back</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/error.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/error.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/error.jsp
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        We should never end up at this page; if we do, it means an interceptor 
isn't working or isn't configured correctly.
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        <netui:anchor action="forwardAway">forwardAway</netui:anchor>
+        <br/>
+        <netui:anchor action="forwardToNested">forwardToNested</netui:anchor>
+        <br/>
+        <netui:anchor 
action="forwardToNestedThenAway">forwardToNestedThenAway</netui:anchor>
+        <br/>
+        <netui:anchor action="forwardToNull">forwardToNull</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf
 Mon Jan 24 01:03:38 2005
@@ -0,0 +1,18 @@
+package miniTests.actionInterceptors.someFlow;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="action1", path="error.jsp")
+    }
+)
+public class Controller extends PageFlowController
+{
+    protected void beforeAction()
+    {
+        getRequest().setAttribute( "actionRun" , Boolean.TRUE );
+    }
+}

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/another.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/another.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/another.jsp
    Mon Jan 24 01:03:38 2005
@@ -0,0 +1,21 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        Another page...
+        <br/>
+        <netui:anchor action="begin">start over</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/index.jsp
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/index.jsp?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/actionInterceptors/someFlow/index.jsp
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,19 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>${pageFlow.URI}</h3>
+
+        <netui:anchor action="action1">hit an action, which will be 
intercepted</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?view=diff&rev=126271&p1=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r1=126270&p2=incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml&r2=126271
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
   (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
   Mon Jan 24 01:03:38 2005
@@ -113,8 +113,8 @@
          </features>
       </test>
       <test>
-         <name>ActionInterceptors</name>
-         <description>Test of the action-interceptors feature.</description>
+         <name>ActionInterceptorsChain</name>
+         <description>Test of action interceptor chains, including 
interrupting them in the middle.</description>
          <webapp>coreWeb</webapp>
          <categories>
             <category>bvt</category>
@@ -125,6 +125,54 @@
             <feature>PageFlow</feature>
             <feature>Action</feature>
             <feature>Interceptors</feature>
+         </features>
+      </test>
+      <test>
+         <name>ActionInterceptorsGlobal</name>
+         <description>Test of global action interceptors, which apply to all 
actions in all page flows.  Also tests custom properties configured within the 
action-interceptor element.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>bvt.struts11</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Action</feature>
+            <feature>Interceptors</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>ActionInterceptorsOverrideForwards</name>
+         <description>Test of various ways to override the original action's 
Forward in an action interceptor.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>bvt.struts11</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Action</feature>
+            <feature>Interceptors</feature>
+            <feature>Nesting</feature>
+         </features>
+      </test>
+      <test>
+         <name>ActionInterceptorsSimple</name>
+         <description>Test of "simple" action interceptors, which are 
configured wholly in netui-config.xml (they don't require user 
ActionInterceptor classes).</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>bvt.struts11</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>PageFlow</feature>
+            <feature>Action</feature>
+            <feature>Interceptors</feature>
+            <feature>Nesting</feature>
          </features>
       </test>
       <test>

Deleted: 
/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptors.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptors.xml?view=auto&rev=126270
==============================================================================

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsChain.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsChain.xml?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsChain.xml
       Mon Jan 24 01:03:38 2005
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession 
xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session";>
+   <ses:sessionName>ActionInterceptorsChain</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>24 Jan 2005, 12:48:47.046 AM MST</ses:startDate>
+   <ses:description>Test of action interceptor chains, including interrupting 
them in the middle.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/interruptChain/Controller.jpf</h3>
+
+        Messages:
+        <ul>
+        
+        </ul>
+        <br/>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainBeforeAction.do">interruptChainBeforeAction</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainAfterAction.do">interruptChainAfterAction</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainBeforeAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/interruptChain/Controller.jpf</h3>
+
+        Messages:
+        <ul>
+        <li>in preAction() in 
miniTests.actionInterceptors.BaseInterceptor</li><li>in preAction() in 
miniTests.actionInterceptors.InterruptBeforeActionInterceptor</li><li>miniTests.actionInterceptors.InterruptBeforeActionInterceptor:
 interrupting chain</li><li>in action interruptChainBeforeAction</li><li>in 
postAction() in miniTests.actionInterceptors.BaseInterceptor</li><li>in 
postAction() in 
miniTests.actionInterceptors.InterruptBeforeActionInterceptor</li><li>in 
postAction() in miniTests.actionInterceptors.BaseInterceptor</li>
+        </ul>
+        <br/>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainBeforeAction.do">interruptChainBeforeAction</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainAfterAction.do">interruptChainAfterAction</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainAfterAction.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainBeforeAction.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interruptChain/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/interruptChain/Controller.jpf</h3>
+
+        Messages:
+        <ul>
+        <li>in preAction() in 
miniTests.actionInterceptors.BaseInterceptor</li><li>in preAction() in 
miniTests.actionInterceptors.InterruptAfterActionInterceptor</li><li>in 
preAction() in miniTests.actionInterceptors.BaseInterceptor</li><li>in action 
interruptChainAfterAction</li><li>in postAction() in 
miniTests.actionInterceptors.BaseInterceptor</li><li>in postAction() in 
miniTests.actionInterceptors.InterruptAfterActionInterceptor</li><li>miniTests.actionInterceptors.InterruptAfterActionInterceptor:
 interrupting chain</li>
+        </ul>
+        <br/>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainBeforeAction.do">interruptChainBeforeAction</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/interruptChainAfterAction.do">interruptChainAfterAction</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>24 Jan 2005, 12:49:19.602 AM MST</ses:endDate>
+   <ses:testCount>4</ses:testCount>
+</ses:recorderSession>

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsGlobal.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsGlobal.xml?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsGlobal.xml
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession 
xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session";>
+   <ses:sessionName>ActionInterceptorsGlobal</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>24 Jan 2005, 12:47:04.788 AM MST</ses:startDate>
+   <ses:description>Test of global action interceptors, which apply to all 
actions in all page flows.  Also tests custom properties configured within the 
action-interceptor element.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/globalInterceptors/index.jsp";>
+    </head>
+    <body>
+        
<h3>/miniTests/actionInterceptors/globalInterceptors/Controller.jpf</h3>
+
+        Messages:
+        <ul>
+        <li>in preAction()</li><li>in postAction()</li><li>custom property 
'prop1' is value1</li><li>custom property 'prop2' is value2</li>
+        </ul>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/interceptAndNest.do">intercept
 with a nested page flow</a><br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/globalInterceptors/interceptAndNest.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>no</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/globalInterceptors/interceptAndNest.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/globalInterceptors/index.jsp";>
+    </head>
+    <body>
+        
<h3>/miniTests/actionInterceptors/globalInterceptors/Controller.jpf</h3>
+
+        Messages:
+        <ul>
+        <li>in afterNestedIntercept()</li><li>in postAction()</li><li>custom 
property 'prop1' is value1</li><li>custom property 'prop2' is value2</li>
+        </ul>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/interceptAndNest.do">intercept
 with a nested page flow</a><br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>24 Jan 2005, 12:47:44.255 AM MST</ses:endDate>
+   <ses:testCount>4</ses:testCount>
+</ses:recorderSession>

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsOverrideForwards.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsOverrideForwards.xml?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsOverrideForwards.xml
    Mon Jan 24 01:03:38 2005
@@ -0,0 +1,910 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession 
xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session";>
+   <ses:sessionName>ActionInterceptorsOverrideForwards</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>24 Jan 2005, 12:50:19.799 AM MST</ses:startDate>
+   <ses:description>Test of various ways to override the original action's 
Forward in an action interceptor.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardAway.do">forwardAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNested.do">forwardToNested</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNestedThenAway.do">forwardToNestedThenAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNull.do">forwardToNull</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardAway.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/alternate.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</h3>
+
+        Got to the alternate (forward-away) page.
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/begin.do">go 
back</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardAway.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardAway.do">forwardAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNested.do">forwardToNested</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNestedThenAway.do">forwardToNestedThenAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNull.do">forwardToNull</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNested.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/begin.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>no</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNested.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardAway.do">forwardAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNested.do">forwardToNested</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNestedThenAway.do">forwardToNestedThenAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNull.do">forwardToNull</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNestedThenAway.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>no</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNestedThenAway.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/alternate.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</h3>
+
+        Got to the alternate (forward-away) page.
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/begin.do">go 
back</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/begin.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/overrideForwards/Controller.jpf</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardAway.do">forwardAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNested.do">forwardToNested</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNestedThenAway.do">forwardToNestedThenAway</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNull.do">forwardToNull</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/overrideForwards/forwardToNull.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/overrideForwards/begin.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody>Action interceptor 
miniTests.actionInterceptors.ForwardToNullInterceptor overrode the forward to 
null, then wrote this message to the response.</ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>24 Jan 2005, 12:51:05.445 AM MST</ses:endDate>
+   <ses:testCount>11</ses:testCount>
+</ses:recorderSession>

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsSimple.xml
Url: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsSimple.xml?view=auto&rev=126271
==============================================================================
--- (empty file)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ActionInterceptorsSimple.xml
      Mon Jan 24 01:03:38 2005
@@ -0,0 +1,1163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession 
xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session";>
+   <ses:sessionName>ActionInterceptorsSimple</ses:sessionName>
+   <ses:tester>rich</ses:tester>
+   <ses:startDate>24 Jan 2005, 12:43:15.178 AM MST</ses:startDate>
+   <ses:description>Test of "simple" action interceptors, which are configured 
wholly in netui-config.xml (they don't require user ActionInterceptor 
classes).</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>no</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>3</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/index.jsp";>
+    </head>
+    <body>
+        
<h3>/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf</h3>
+
+        We've hit the original page flow we were looking for.
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.do">hit
 another action</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>4</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>no</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>5</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/another.jsp";>
+    </head>
+    <body>
+        
<h3>/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf</h3>
+
+        Another page...
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>6</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>7</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>yes</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>8</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/index.jsp";>
+    </head>
+    <body>
+        
<h3>/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf</h3>
+
+        We've hit the original page flow we were looking for.
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.do">hit
 another action</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>9</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nested/Controller.jpf</h3>
+
+        Now we're in the injected nested page flow.  Click
+        <a href="/coreWeb/miniTests/actionInterceptors/nested/done.do">done</a>
+        to return to the original action that was being raised.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>yes</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>10</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/nested/done.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.do</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/another.jsp";>
+    </head>
+    <body>
+        
<h3>/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf</h3>
+
+        Another page...
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>11</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>12</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/someFlow/index.jsp";>
+    </head>
+    <body>
+        <h3>/miniTests/actionInterceptors/someFlow/Controller.jpf</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/action1.do">hit an action, 
which will be intercepted</a>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>13</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/someFlow/action1.do</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  
<ses:value>http://localhost:8080/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/nonNested/index.jsp";>
+    </head>
+    <body bgcolor="#CCFFFF">
+        <h3>/miniTests/actionInterceptors/nonNested/Controller.jpf</h3>
+
+        Now we're in the injected non-nested page flow.
+
+        <br/>
+        <br/>
+        Was the original action run yet? <b>yes</b>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>14</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            
<ses:uri>/coreWeb/miniTests/actionInterceptors/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  
<ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  
<ses:value>JSESSIONID=82DDA199D98CDA4213724D007C45B38A</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 
4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+
+    <head>
+        <base 
href="http://localhost:8080/coreWeb/miniTests/actionInterceptors/index.jsp";>
+    </head>
+    <body>
+        <h3>Action Interceptors</h3>
+
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedBeforeAction/Controller.jpf">test
 simple-action-interceptor running before all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interceptedAfterAction/Controller.jpf">test
 simple-action-interceptor running after all actions in a page flow</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/someFlow/Controller.jpf">test 
simple-action-interceptor running after a specific action</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/globalInterceptors/Controller.jpf">test
 global (all page flow) interceptors, as well as custom interceptor 
properties</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/interruptChain/Controller.jpf">test 
interrupting the interceptor chain</a>
+        <br/>
+        <a 
href="/coreWeb/miniTests/actionInterceptors/overrideForwards/Controller.jpf">test
 various ways of overriding the destination of an intercepted action</a>
+        <br/>
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>24 Jan 2005, 12:44:09.907 AM MST</ses:endDate>
+   <ses:testCount>14</ses:testCount>
+</ses:recorderSession>

Reply via email to