Package org.apache.struts2.interceptor.annotations

# Class AnnotationWorkflowInterceptor

java.lang.Object
org.apache.struts2.interceptor.AbstractInterceptor
org.apache.struts2.interceptor.annotations.AnnotationWorkflowInterceptor

All Implemented Interfaces:
  `Serializable`, `ConditionalInterceptor`, `Interceptor`, `PreResultListener`

public class AnnotationWorkflowInterceptor extends AbstractInterceptor implements PreResultListener

Invokes any annotated methods on the action. Specifically, it supports the following annotations:

- @`Before` - will be invoked before the action method. If the returned value is not null, it is returned as the action result code
- @`BeforeResult` - will be invoked after the action method but before the result execution
- @`After` - will be invoked after the action method and result execution

There can be multiple methods marked with the same annotations, but the order of their execution is not guaranteed. However, the annotated methods on the superclass chain are guaranteed to be invoked before the annotated method in the current class in the case of a `Before` annotations and after, if the annotations is `After`.

      public class BaseAnnotatedAction {
            protected String log = "";

            @Before
            public String baseBefore() {
                    log = log + "baseBefore-";
                    return null;
            }
      }

      public class AnnotatedAction extends BaseAnnotatedAction {
            @Before
            public String before() {
                    log = log + "before";
                    return null;
            }

            public String execute() {
                    log = log + "-execute";
                    return Action.SUCCESS;
            }

            @BeforeResult
            public void beforeResult() throws Exception {
                    log = log +"-beforeResult";
            }

            @After
            public void after() {
                    log = log + "-after";
            }
      }

With the interceptor applied and the action executed on `AnnotatedAction` the log instance variable will contain `baseBefore-before-execute-beforeResult-after`.

Configure a stack in xwork.xml that replaces the PrepareInterceptor with the AnnotationWorkflowInterceptor:

     <interceptor-stack name="annotatedStack">
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="params"/>
            <interceptor-ref name="conversionError"/>
            <interceptor-ref name="annotationWorkflow"/>
     </interceptor-stack>

Author:
  Zsolt Szasz, zsolt at lorecraft dot com, Rainer Hermanns, Dan Oxlade, dan d0t oxlade at gmail d0t c0m
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AnnotationWorkflowInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `beforeResult(ActionInvocation invocation, String resultCode)`
  Invokes any @BeforeResult annotated methods
  `protected static int`
  `comparePriorities(int val1, int val2)`
  `String`
  `intercept(ActionInvocation invocation)`
  Discovers annotated methods on the action and calls them according to the workflow

  ### Methods inherited from class org.apache.struts2.interceptor.AbstractInterceptor

  `destroy, init, setDisabled, shouldIntercept`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### AnnotationWorkflowInterceptor

    public AnnotationWorkflowInterceptor()

- ## Method Details

  - ### intercept

    public String intercept(ActionInvocation invocation) throws Exception
    Discovers annotated methods on the action and calls them according to the workflow
    Specified by:
      `intercept` in interface `Interceptor`
    Specified by:
      `intercept` in class `AbstractInterceptor`
    Parameters:
      `invocation` - the action invocation
    Returns:
      the return code, either returned from `ActionInvocation.invoke()`, or from the interceptor itself.
    Throws:
      `Exception` - any system-level error, as defined in `Action.execute()`.
    See Also:
      - `Interceptor.intercept(ActionInvocation)`

  - ### comparePriorities

    protected static int comparePriorities(int val1, int val2)

  - ### beforeResult

    public void beforeResult(ActionInvocation invocation, String resultCode)
    Invokes any @BeforeResult annotated methods
    Specified by:
      `beforeResult` in interface `PreResultListener`
    Parameters:
      `invocation` - the action invocation
      `resultCode` - the result code returned by the action (eg. `success`).
    See Also:
      - `PreResultListener.beforeResult(ActionInvocation, String)`