com.opensymphony.xwork2

## Class DefaultActionInvocation

- java.lang.Object
- - com.opensymphony.xwork2.DefaultActionInvocation

- All Implemented Interfaces:
    ActionInvocation

      public class DefaultActionInvocation
      extends Object
      implements ActionInvocation

  The Default ActionInvocation implementation
  Version:
    $Date$ $Id$
  Author:
    Rainer Hermanns, tmjee
  See Also:
    `DefaultActionProxy`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.opensymphony.xwork2.ActionInvocation

      `ActionInvocation.LegacyAdapter`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Object` | `action`
    `protected ActionEventListener` | `actionEventListener`
    `protected Callable<?>` | `asyncAction`
    `protected AsyncManager` | `asyncManager`
    `protected Container` | `container`
    `protected boolean` | `executed`
    `protected Result` | `explicitResult`
    `protected Map<String,Object>` | `extraContext`
    `protected Iterator<InterceptorMapping>` | `interceptors`
    `protected ActionContext` | `invocationContext`
    `protected WithLazyParams.LazyParamInjector` | `lazyParamInjector`
    `protected ObjectFactory` | `objectFactory`
    `protected OgnlUtil` | `ognlUtil`
    `protected List<PreResultListener>` | `preResultListeners`
    `protected ActionProxy` | `proxy`
    `protected boolean` | `pushAction`
    `protected Result` | `result`
    `protected String` | `resultCode`
    `protected ValueStack` | `stack`
    `protected UnknownHandlerManager` | `unknownHandlerManager`
    `protected ValueStackFactory` | `valueStackFactory`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DefaultActionInvocation(Map<String,Object> extraContext, boolean pushAction)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addPreResultListener(PreResultListener listener)` Register a com.opensymphony.xwork2.interceptor.PreResultListener to be notified after the Action is executed and before the Result is executed.
    `protected void` | `createAction(Map<String,Object> contextMap)`
    `protected Map<String,Object>` | `createContextMap()`
    `protected void` | `createInterceptors(ActionProxy proxy)`
    `Result` | `createResult()`
    `protected String` | `executeConditional(ConditionalInterceptor conditionalInterceptor)`
    `Object` | `getAction()` Get the Action associated with this ActionInvocation.
    `ActionContext` | `getInvocationContext()` Gets the ActionContext associated with this ActionInvocation.
    `ActionProxy` | `getProxy()` Get the ActionProxy holding this ActionInvocation.
    `Result` | `getResult()` If the DefaultActionInvocation has been executed before and the Result is an instance of ActionChainResult, this method will walk down the chain of ActionChainResults until it finds a non-chain result, which will be returned.
    `String` | `getResultCode()` Gets the result code returned from this ActionInvocation.
    `ValueStack` | `getStack()` Gets the ValueStack associated with this ActionInvocation.
    `void` | `init(ActionProxy proxy)`
    `String` | `invoke()` Invokes the next step in processing this ActionInvocation.
    `protected String` | `invokeAction(Object action, ActionConfig actionConfig)`
    `String` | `invokeActionOnly()` Invokes only the Action (not Interceptors or Results).
    `boolean` | `isExecuted()` Gets whether this ActionInvocation has executed before.
    `protected void` | `prepareLazyParamInjector(ValueStack valueStack)`
    `protected String` | `saveResult(ActionConfig actionConfig, Object methodResult)` Save the result to be used later.
    `void` | `setActionEventListener(ActionEventListener listener)`
    `void` | `setAsyncManager(AsyncManager asyncManager)`
    `void` | `setContainer(Container cont)`
    `void` | `setObjectFactory(ObjectFactory fac)`
    `void` | `setOgnlUtil(OgnlUtil ognlUtil)`
    `void` | `setResultCode(String resultCode)` Sets the result code, possibly overriding the one returned by the action.
    `void` | `setUnknownHandlerManager(UnknownHandlerManager unknownHandlerManager)`
    `void` | `setValueStackFactory(ValueStackFactory fac)`

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

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

    - ### Methods inherited from interface com.opensymphony.xwork2.ActionInvocation

      `adapt, addPreResultListener, init, setActionEventListener`

- - ### Field Detail

    - #### action

          protected Object action

    - #### proxy

          protected ActionProxy proxy

    - #### preResultListeners

          protected List<PreResultListener> preResultListeners

    - #### extraContext

          protected Map<String,Object> extraContext

    - #### invocationContext

          protected ActionContext invocationContext

    - #### interceptors

          protected Iterator<InterceptorMapping> interceptors

    - #### stack

          protected ValueStack stack

    - #### result

          protected Result result

    - #### explicitResult

          protected Result explicitResult

    - #### resultCode

          protected String resultCode

    - #### executed

          protected boolean executed

    - #### pushAction

          protected boolean pushAction

    - #### objectFactory

          protected ObjectFactory objectFactory

    - #### actionEventListener

          protected ActionEventListener actionEventListener

    - #### valueStackFactory

          protected ValueStackFactory valueStackFactory

    - #### container

          protected Container container

    - #### unknownHandlerManager

          protected UnknownHandlerManager unknownHandlerManager

    - #### ognlUtil

          protected OgnlUtil ognlUtil

    - #### asyncManager

          protected AsyncManager asyncManager

    - #### asyncAction

          protected Callable<?> asyncAction

    - #### lazyParamInjector

          protected WithLazyParams.LazyParamInjector lazyParamInjector

  - ### Constructor Detail

    - #### DefaultActionInvocation

          public DefaultActionInvocation(Map<String,Object> extraContext,
                                         boolean pushAction)

  - ### Method Detail

    - #### setUnknownHandlerManager

          public void setUnknownHandlerManager(UnknownHandlerManager unknownHandlerManager)

    - #### setValueStackFactory

          public void setValueStackFactory(ValueStackFactory fac)

    - #### setObjectFactory

          public void setObjectFactory(ObjectFactory fac)

    - #### setContainer

          public void setContainer(Container cont)

    - #### setActionEventListener

          public void setActionEventListener(ActionEventListener listener)

    - #### setOgnlUtil

          public void setOgnlUtil(OgnlUtil ognlUtil)

    - #### setAsyncManager

          public void setAsyncManager(AsyncManager asyncManager)

    - #### getAction

          public Object getAction()

      Description copied from interface: `ActionInvocation`
      Get the Action associated with this ActionInvocation.
      Specified by:
        `getAction` in interface `ActionInvocation`
      Returns:
        the Action

    - #### isExecuted

          public boolean isExecuted()

      Description copied from interface: `ActionInvocation`
      Gets whether this ActionInvocation has executed before. This will be set after the Action and the Result have executed.
      Specified by:
        `isExecuted` in interface `ActionInvocation`
      Returns:
        `true` if this ActionInvocation has executed before.

    - #### getInvocationContext

          public ActionContext getInvocationContext()

      Description copied from interface: `ActionInvocation`
      Gets the ActionContext associated with this ActionInvocation. The ActionProxy is responsible for setting this ActionContext onto the ThreadLocal before invoking the ActionInvocation and resetting the old ActionContext afterwards.
      Specified by:
        `getInvocationContext` in interface `ActionInvocation`
      Returns:
        the ActionContext.

    - #### getProxy

          public ActionProxy getProxy()

      Description copied from interface: `ActionInvocation`
      Get the ActionProxy holding this ActionInvocation.
      Specified by:
        `getProxy` in interface `ActionInvocation`
      Returns:
        the ActionProxy.

    - #### getResult

          public Result getResult()
                           throws Exception

      If the DefaultActionInvocation has been executed before and the Result is an instance of ActionChainResult, this method will walk down the chain of ActionChainResults until it finds a non-chain result, which will be returned. If the DefaultActionInvocation's result has not been executed before, the Result instance will be created and populated with the result params.
      Specified by:
        `getResult` in interface `ActionInvocation`
      Returns:
        a Result instance
      Throws:
        `Exception` - in case of any error

    - #### getResultCode

          public String getResultCode()

      Description copied from interface: `ActionInvocation`
      Gets the result code returned from this ActionInvocation.
      Specified by:
        `getResultCode` in interface `ActionInvocation`
      Returns:
        the result code

    - #### setResultCode

          public void setResultCode(String resultCode)

      Description copied from interface: `ActionInvocation`
      Sets the result code, possibly overriding the one returned by the action.

      The "intended" purpose of this method is to allow PreResultListeners to override the result code returned by the Action.

      If this method is used before the Action executes, the Action's returned result code will override what was set. However the Action could (if specifically coded to do so) inspect the ActionInvocation to see that someone "upstream" (e.g. an Interceptor) had suggested a value as the result, and it could therefore return the same value itself.

      If this method is called between the Action execution and the Result execution, then the value set here will override the result code the action had returned. Creating an Interceptor that implements `PreResultListener` will give you this opportunity.

      If this method is called after the Result has been executed, it will have the effect of raising an IllegalStateException.

      Specified by:
        `setResultCode` in interface `ActionInvocation`
      Parameters:
        `resultCode` - the result code.
      See Also:
        `ActionInvocation.isExecuted()`

    - #### getStack

          public ValueStack getStack()

      Description copied from interface: `ActionInvocation`
      Gets the ValueStack associated with this ActionInvocation.
      Specified by:
        `getStack` in interface `ActionInvocation`
      Returns:
        the ValueStack

    - #### addPreResultListener

          public void addPreResultListener(PreResultListener listener)

      Register a com.opensymphony.xwork2.interceptor.PreResultListener to be notified after the Action is executed and before the Result is executed. The ActionInvocation implementation must guarantee that listeners will be called in the order in which they are registered. Listener registration and execution does not need to be thread-safe.
      Parameters:
        `listener` - to register

    - #### createResult

          public Result createResult()
                              throws Exception

      Throws:
        `Exception`

    - #### invoke

          public String invoke()
                        throws Exception

      Description copied from interface: `ActionInvocation`
      Invokes the next step in processing this ActionInvocation.

      If there are more Interceptors, this will call the next one. If Interceptors choose not to short-circuit ActionInvocation processing and return their own return code, they will call invoke() to allow the next Interceptor to execute. If there are no more Interceptors to be applied, the Action is executed. If the `ActionProxy.getExecuteResult()` method returns `true`, the Result is also executed.

      Specified by:
        `invoke` in interface `ActionInvocation`
      Returns:
        the return code.
      Throws:
        `ConfigurationException` - If no result can be found with the returned code
        `Exception` - can be thrown.

    - #### executeConditional

          protected String executeConditional(ConditionalInterceptor conditionalInterceptor)
                                       throws Exception

      Throws:
        `Exception`

    - #### invokeActionOnly

          public String invokeActionOnly()
                                  throws Exception

      Description copied from interface: `ActionInvocation`
      Invokes only the Action (not Interceptors or Results).

      This is useful in rare situations where advanced usage with the interceptor/action/result workflow is being manipulated for certain functionality.

      Specified by:
        `invokeActionOnly` in interface `ActionInvocation`
      Returns:
        the return code.
      Throws:
        `Exception` - can be thrown.

    - #### createAction

          protected void createAction(Map<String,Object> contextMap)

    - #### createContextMap

          protected Map<String,Object> createContextMap()

    - #### init

          public void init(ActionProxy proxy)

    - #### prepareLazyParamInjector

          protected void prepareLazyParamInjector(ValueStack valueStack)

    - #### createInterceptors

          protected void createInterceptors(ActionProxy proxy)

    - #### invokeAction

          protected String invokeAction(Object action,
                                        ActionConfig actionConfig)
                                 throws Exception

      Throws:
        `Exception`

    - #### saveResult

          protected String saveResult(ActionConfig actionConfig,
                                      Object methodResult)

      Save the result to be used later.
      Parameters:
        `actionConfig` - current ActionConfig
        `methodResult` - the result of the action.
      Returns:
        the result code to process.

Copyright © 2000–2026 Apache Software Foundation. All rights reserved.