You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Parker Grimes <pg...@gmail.com> on 2008/04/16 00:46:46 UTC

Struts2 Portlet with custom interceptors

I am trying to implement a custom exception mapping interceptor to be used
in my struts2 portlet. I implemented my own ExceptionMappingInterceptor
class that is similar to
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor, the only
difference is that I send an email with the exception report to the
application administrators. I have used this same interceptor successfully
in a regular struts2 application.

The problem I am having is that it appears that the action is being called
and the exception caught by some other class before it gets to my
interceptor even though my interceptor is declared first in my stack. Since
my custom interceptor is first in my stack shouldn't it be the first thing
to catch an exception begin thrown from my action?

*My interceptor looks like this in struts.xml:*
<interceptors>
    <interceptor name="customException"
class="edu.suu.struts2.interceptor.ExceptionMappingInterceptor"/>
    <interceptor-stack name="myStack">
        <interceptor-ref name="customException"/>
        <interceptor-ref name="portletDefaultStack"/>
    </interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>

*
Here is my debug logging:*
DEBUG [com.opensymphony.xwork2.DefaultActionInvocation] - Executing action
method = optIn
DEBUG [edu.suu.googleapps.portlet.OptInAction] - optIn()
---exception is thrown here---
DEBUG [org.apache.struts2.portlet.result.PortletResult] - Executing result
in Event phase
DEBUG [org.apache.struts2.portlet.result.PortletResult] - Setting event
render parameter: /WEB-INF/jsp/error.jsp
DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] - result =
error
DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] - No
exceptions caught
DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] - Leaving
processAction
DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] - Entering
render
DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
serviceAction
DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] - Creating
action proxy for name = renderDirect, namespace =
DEBUG [com.opensymphony.xwork2.DefaultActionProxy] - Creating an
DefaultActionProxy for namespace  and action name renderDirect
DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor] -
Restoring value stack from event phase
DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor] -
Restored stack
DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] - intercept
'/renderDirect' {
DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] -
requested_locale=null
*
The interceptor looks like this:*
public String intercept(ActionInvocation invocation) throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        String result = null;
        try {
            logger.debug("Invoking action, looking for exceptions.");
            result = invocation.invoke();
            logger.debug("result = " + result);
            logger.debug("No exceptions caught");
        } catch (Exception ex) {
            logger.debug("Exceptions caught");
            ex.printStackTrace();
            ......
        }
        return result;
}

Re: Struts2 Portlet with custom interceptors

Posted by Parker Grimes <pg...@gmail.com>.
Thanks for your help I had an "ah ha" moment. I know I read that the stack
gets passed through twice, once down the stack and then back up but I had
forgotten that. That was my problem. The exception was being thrown on the
way back up the stack and being caught by the default
ExceptionMappingInterceptor since it was lower in the stack.

I did as you suggested and defined my own default stack, replacing the
exception interceptor with mine. Works great now.

Thanks again for the help.

Parker


On Wed, Apr 16, 2008 at 3:59 PM, Nils-Helge Garli Hegvik <ni...@gmail.com>
wrote:

> The default ExceptionMappingInterceptor is "closer" to the error (as
> it is configured by default), so it will intercept it first (on the
> way out... [1]). If you already have configured exception mappings for
> that interceptor, it will never reach your interceptor. It might be
> better for you to replace the the interceptor in the stack, as you
> have already tried. You can set up your own default stack in your
> application struts.xml file. It's a bit of duplication, but there's no
> need to edit the framework supplied configuration files.
>
> [1] -
> http://struts.apache.org/2.x/docs/interceptors.html#Interceptors-OrderofInterceptorExecution
>
> Nils-H
>
> On Wed, Apr 16, 2008 at 9:46 PM, Parker Grimes <pg...@gmail.com> wrote:
> > My interceptor is being called, but it appears that
> >  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor is
> still
> >  being called before my interceptor, despite having my interceptor
> declared
> >  first in the stack. As you can tell my interceptor is handed the
> "error"
> >  result rather than catching the exception.
> >
> >  The only way I was able to get it to work is by changing the
> 'exception'
> >  interceptor definition in struts-default.xml to point to my class. As a
> side
> >  note, is there a way to override struts-default.xml? I tried setting
> the
> >  property
> >
>  struts.configuration.files=my-struts-default.xml,struts-plugin.xml,struts.xml
> >  and overriding the 'exception' interceptor in my-struts-default.xml,
> but the
> >  struts-default.xml was still being loaded. So I ended up checking out
> the
> >  struts2 source, editing struts-default.xml and packaging it myself,
> which is
> >  kind of a pain.
> >
> >  I have have tried both Struts 2.0.11 and 2.1.1 <http://2.1.1./>, also
> tried
> >  it as a regular app and a portlet app and I get the same behavior.
> >
> >  Thanks,
> >  Parker
> >
> >  On Wed, Apr 16, 2008 at 11:12 AM, Nils-Helge Garli Hegvik <
> nilsga@gmail.com>
> >  wrote:
> >
> >
> >
> >  > I did some testing locally, and it looks to me like exceptions should
> >  > be propagated properly. Are you sure that the exception is not
> handled
> >  > somewhere else? From your logs, it appears that "error" is returned
> >  > somewhere along the chain.
> >  >
> >  > Nils-H
> >  >
> >  > On Wed, Apr 16, 2008 at 12:46 AM, Parker Grimes <pg...@gmail.com>
> wrote:
> >  > > I am trying to implement a custom exception mapping interceptor to
> be
> >  > used
> >  > >  in my struts2 portlet. I implemented my own
> ExceptionMappingInterceptor
> >  > >  class that is similar to
> >  > >  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor,
> the
> >  > only
> >  > >  difference is that I send an email with the exception report to
> the
> >  > >  application administrators. I have used this same interceptor
> >  > successfully
> >  > >  in a regular struts2 application.
> >  > >
> >  > >  The problem I am having is that it appears that the action is
> being
> >  > called
> >  > >  and the exception caught by some other class before it gets to my
> >  > >  interceptor even though my interceptor is declared first in my
> stack.
> >  > Since
> >  > >  my custom interceptor is first in my stack shouldn't it be the
> first
> >  > thing
> >  > >  to catch an exception begin thrown from my action?
> >  > >
> >  > >  *My interceptor looks like this in struts.xml:*
> >  > >  <interceptors>
> >  > >     <interceptor name="customException"
> >  > >  class="edu.suu.struts2.interceptor.ExceptionMappingInterceptor"/>
> >  > >     <interceptor-stack name="myStack">
> >  > >         <interceptor-ref name="customException"/>
> >  > >         <interceptor-ref name="portletDefaultStack"/>
> >  > >     </interceptor-stack>
> >  > >  </interceptors>
> >  > >  <default-interceptor-ref name="myStack"/>
> >  > >
> >  > >  *
> >  > >  Here is my debug logging:*
> >  > >  DEBUG [com.opensymphony.xwork2.DefaultActionInvocation] -
> Executing
> >  > action
> >  > >  method = optIn
> >  > >  DEBUG [edu.suu.googleapps.portlet.OptInAction] - optIn()
> >  > >  ---exception is thrown here---
> >  > >  DEBUG [org.apache.struts2.portlet.result.PortletResult] -
> Executing
> >  > result
> >  > >  in Event phase
> >  > >  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Setting
> event
> >  > >  render parameter: /WEB-INF/jsp/error.jsp
> >  > >  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] -
> >  > result =
> >  > >  error
> >  > >  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] -
> No
> >  > >  exceptions caught
> >  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> >  > Leaving
> >  > >  processAction
> >  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> >  > Entering
> >  > >  render
> >  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> >  > >  serviceAction
> >  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> >  > Creating
> >  > >  action proxy for name = renderDirect, namespace =
> >  > >  DEBUG [com.opensymphony.xwork2.DefaultActionProxy] - Creating an
> >  > >  DefaultActionProxy for namespace  and action name renderDirect
> >  > >  DEBUG
> [org.apache.struts2.portlet.interceptor.PortletStateInterceptor]
> >  > -
> >  > >  Restoring value stack from event phase
> >  > >  DEBUG
> [org.apache.struts2.portlet.interceptor.PortletStateInterceptor]
> >  > -
> >  > >  Restored stack
> >  > >  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] -
> intercept
> >  > >  '/renderDirect' {
> >  > >  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] -
> >  > >  requested_locale=null
> >  > >  *
> >  > >  The interceptor looks like this:*
> >  > >  public String intercept(ActionInvocation invocation) throws
> Exception {
> >  > >         HttpServletRequest request =
> ServletActionContext.getRequest();
> >  > >         String result = null;
> >  > >         try {
> >  > >             logger.debug("Invoking action, looking for
> exceptions.");
> >  > >             result = invocation.invoke();
> >  > >             logger.debug("result = " + result);
> >  > >             logger.debug("No exceptions caught");
> >  > >         } catch (Exception ex) {
> >  > >             logger.debug("Exceptions caught");
> >  > >             ex.printStackTrace();
> >  > >             ......
> >  > >         }
> >  > >         return result;
> >  > >  }
> >  > >
> >  >
> >  > ---------------------------------------------------------------------
> >  > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >  > For additional commands, e-mail: user-help@struts.apache.org
> >  >
> >  >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Struts2 Portlet with custom interceptors

Posted by Nils-Helge Garli Hegvik <ni...@gmail.com>.
The default ExceptionMappingInterceptor is "closer" to the error (as
it is configured by default), so it will intercept it first (on the
way out... [1]). If you already have configured exception mappings for
that interceptor, it will never reach your interceptor. It might be
better for you to replace the the interceptor in the stack, as you
have already tried. You can set up your own default stack in your
application struts.xml file. It's a bit of duplication, but there's no
need to edit the framework supplied configuration files.

[1] - http://struts.apache.org/2.x/docs/interceptors.html#Interceptors-OrderofInterceptorExecution

Nils-H

On Wed, Apr 16, 2008 at 9:46 PM, Parker Grimes <pg...@gmail.com> wrote:
> My interceptor is being called, but it appears that
>  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor is still
>  being called before my interceptor, despite having my interceptor declared
>  first in the stack. As you can tell my interceptor is handed the "error"
>  result rather than catching the exception.
>
>  The only way I was able to get it to work is by changing the 'exception'
>  interceptor definition in struts-default.xml to point to my class. As a side
>  note, is there a way to override struts-default.xml? I tried setting the
>  property
>  struts.configuration.files=my-struts-default.xml,struts-plugin.xml,struts.xml
>  and overriding the 'exception' interceptor in my-struts-default.xml, but the
>  struts-default.xml was still being loaded. So I ended up checking out the
>  struts2 source, editing struts-default.xml and packaging it myself, which is
>  kind of a pain.
>
>  I have have tried both Struts 2.0.11 and 2.1.1 <http://2.1.1./>, also tried
>  it as a regular app and a portlet app and I get the same behavior.
>
>  Thanks,
>  Parker
>
>  On Wed, Apr 16, 2008 at 11:12 AM, Nils-Helge Garli Hegvik <ni...@gmail.com>
>  wrote:
>
>
>
>  > I did some testing locally, and it looks to me like exceptions should
>  > be propagated properly. Are you sure that the exception is not handled
>  > somewhere else? From your logs, it appears that "error" is returned
>  > somewhere along the chain.
>  >
>  > Nils-H
>  >
>  > On Wed, Apr 16, 2008 at 12:46 AM, Parker Grimes <pg...@gmail.com> wrote:
>  > > I am trying to implement a custom exception mapping interceptor to be
>  > used
>  > >  in my struts2 portlet. I implemented my own ExceptionMappingInterceptor
>  > >  class that is similar to
>  > >  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor, the
>  > only
>  > >  difference is that I send an email with the exception report to the
>  > >  application administrators. I have used this same interceptor
>  > successfully
>  > >  in a regular struts2 application.
>  > >
>  > >  The problem I am having is that it appears that the action is being
>  > called
>  > >  and the exception caught by some other class before it gets to my
>  > >  interceptor even though my interceptor is declared first in my stack.
>  > Since
>  > >  my custom interceptor is first in my stack shouldn't it be the first
>  > thing
>  > >  to catch an exception begin thrown from my action?
>  > >
>  > >  *My interceptor looks like this in struts.xml:*
>  > >  <interceptors>
>  > >     <interceptor name="customException"
>  > >  class="edu.suu.struts2.interceptor.ExceptionMappingInterceptor"/>
>  > >     <interceptor-stack name="myStack">
>  > >         <interceptor-ref name="customException"/>
>  > >         <interceptor-ref name="portletDefaultStack"/>
>  > >     </interceptor-stack>
>  > >  </interceptors>
>  > >  <default-interceptor-ref name="myStack"/>
>  > >
>  > >  *
>  > >  Here is my debug logging:*
>  > >  DEBUG [com.opensymphony.xwork2.DefaultActionInvocation] - Executing
>  > action
>  > >  method = optIn
>  > >  DEBUG [edu.suu.googleapps.portlet.OptInAction] - optIn()
>  > >  ---exception is thrown here---
>  > >  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Executing
>  > result
>  > >  in Event phase
>  > >  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Setting event
>  > >  render parameter: /WEB-INF/jsp/error.jsp
>  > >  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] -
>  > result =
>  > >  error
>  > >  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] - No
>  > >  exceptions caught
>  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
>  > Leaving
>  > >  processAction
>  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
>  > Entering
>  > >  render
>  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
>  > >  serviceAction
>  > >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
>  > Creating
>  > >  action proxy for name = renderDirect, namespace =
>  > >  DEBUG [com.opensymphony.xwork2.DefaultActionProxy] - Creating an
>  > >  DefaultActionProxy for namespace  and action name renderDirect
>  > >  DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor]
>  > -
>  > >  Restoring value stack from event phase
>  > >  DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor]
>  > -
>  > >  Restored stack
>  > >  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] - intercept
>  > >  '/renderDirect' {
>  > >  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] -
>  > >  requested_locale=null
>  > >  *
>  > >  The interceptor looks like this:*
>  > >  public String intercept(ActionInvocation invocation) throws Exception {
>  > >         HttpServletRequest request = ServletActionContext.getRequest();
>  > >         String result = null;
>  > >         try {
>  > >             logger.debug("Invoking action, looking for exceptions.");
>  > >             result = invocation.invoke();
>  > >             logger.debug("result = " + result);
>  > >             logger.debug("No exceptions caught");
>  > >         } catch (Exception ex) {
>  > >             logger.debug("Exceptions caught");
>  > >             ex.printStackTrace();
>  > >             ......
>  > >         }
>  > >         return result;
>  > >  }
>  > >
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>  > For additional commands, e-mail: user-help@struts.apache.org
>  >
>  >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts2 Portlet with custom interceptors

Posted by Parker Grimes <pg...@gmail.com>.
My interceptor is being called, but it appears that
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor is still
being called before my interceptor, despite having my interceptor declared
first in the stack. As you can tell my interceptor is handed the "error"
result rather than catching the exception.

The only way I was able to get it to work is by changing the 'exception'
interceptor definition in struts-default.xml to point to my class. As a side
note, is there a way to override struts-default.xml? I tried setting the
property
struts.configuration.files=my-struts-default.xml,struts-plugin.xml,struts.xml
and overriding the 'exception' interceptor in my-struts-default.xml, but the
struts-default.xml was still being loaded. So I ended up checking out the
struts2 source, editing struts-default.xml and packaging it myself, which is
kind of a pain.

I have have tried both Struts 2.0.11 and 2.1.1 <http://2.1.1./>, also tried
it as a regular app and a portlet app and I get the same behavior.

Thanks,
Parker

On Wed, Apr 16, 2008 at 11:12 AM, Nils-Helge Garli Hegvik <ni...@gmail.com>
wrote:

> I did some testing locally, and it looks to me like exceptions should
> be propagated properly. Are you sure that the exception is not handled
> somewhere else? From your logs, it appears that "error" is returned
> somewhere along the chain.
>
> Nils-H
>
> On Wed, Apr 16, 2008 at 12:46 AM, Parker Grimes <pg...@gmail.com> wrote:
> > I am trying to implement a custom exception mapping interceptor to be
> used
> >  in my struts2 portlet. I implemented my own ExceptionMappingInterceptor
> >  class that is similar to
> >  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor, the
> only
> >  difference is that I send an email with the exception report to the
> >  application administrators. I have used this same interceptor
> successfully
> >  in a regular struts2 application.
> >
> >  The problem I am having is that it appears that the action is being
> called
> >  and the exception caught by some other class before it gets to my
> >  interceptor even though my interceptor is declared first in my stack.
> Since
> >  my custom interceptor is first in my stack shouldn't it be the first
> thing
> >  to catch an exception begin thrown from my action?
> >
> >  *My interceptor looks like this in struts.xml:*
> >  <interceptors>
> >     <interceptor name="customException"
> >  class="edu.suu.struts2.interceptor.ExceptionMappingInterceptor"/>
> >     <interceptor-stack name="myStack">
> >         <interceptor-ref name="customException"/>
> >         <interceptor-ref name="portletDefaultStack"/>
> >     </interceptor-stack>
> >  </interceptors>
> >  <default-interceptor-ref name="myStack"/>
> >
> >  *
> >  Here is my debug logging:*
> >  DEBUG [com.opensymphony.xwork2.DefaultActionInvocation] - Executing
> action
> >  method = optIn
> >  DEBUG [edu.suu.googleapps.portlet.OptInAction] - optIn()
> >  ---exception is thrown here---
> >  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Executing
> result
> >  in Event phase
> >  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Setting event
> >  render parameter: /WEB-INF/jsp/error.jsp
> >  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] -
> result =
> >  error
> >  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] - No
> >  exceptions caught
> >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> Leaving
> >  processAction
> >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> Entering
> >  render
> >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> >  serviceAction
> >  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
> Creating
> >  action proxy for name = renderDirect, namespace =
> >  DEBUG [com.opensymphony.xwork2.DefaultActionProxy] - Creating an
> >  DefaultActionProxy for namespace  and action name renderDirect
> >  DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor]
> -
> >  Restoring value stack from event phase
> >  DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor]
> -
> >  Restored stack
> >  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] - intercept
> >  '/renderDirect' {
> >  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] -
> >  requested_locale=null
> >  *
> >  The interceptor looks like this:*
> >  public String intercept(ActionInvocation invocation) throws Exception {
> >         HttpServletRequest request = ServletActionContext.getRequest();
> >         String result = null;
> >         try {
> >             logger.debug("Invoking action, looking for exceptions.");
> >             result = invocation.invoke();
> >             logger.debug("result = " + result);
> >             logger.debug("No exceptions caught");
> >         } catch (Exception ex) {
> >             logger.debug("Exceptions caught");
> >             ex.printStackTrace();
> >             ......
> >         }
> >         return result;
> >  }
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

Re: Struts2 Portlet with custom interceptors

Posted by Nils-Helge Garli Hegvik <ni...@gmail.com>.
I did some testing locally, and it looks to me like exceptions should
be propagated properly. Are you sure that the exception is not handled
somewhere else? From your logs, it appears that "error" is returned
somewhere along the chain.

Nils-H

On Wed, Apr 16, 2008 at 12:46 AM, Parker Grimes <pg...@gmail.com> wrote:
> I am trying to implement a custom exception mapping interceptor to be used
>  in my struts2 portlet. I implemented my own ExceptionMappingInterceptor
>  class that is similar to
>  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor, the only
>  difference is that I send an email with the exception report to the
>  application administrators. I have used this same interceptor successfully
>  in a regular struts2 application.
>
>  The problem I am having is that it appears that the action is being called
>  and the exception caught by some other class before it gets to my
>  interceptor even though my interceptor is declared first in my stack. Since
>  my custom interceptor is first in my stack shouldn't it be the first thing
>  to catch an exception begin thrown from my action?
>
>  *My interceptor looks like this in struts.xml:*
>  <interceptors>
>     <interceptor name="customException"
>  class="edu.suu.struts2.interceptor.ExceptionMappingInterceptor"/>
>     <interceptor-stack name="myStack">
>         <interceptor-ref name="customException"/>
>         <interceptor-ref name="portletDefaultStack"/>
>     </interceptor-stack>
>  </interceptors>
>  <default-interceptor-ref name="myStack"/>
>
>  *
>  Here is my debug logging:*
>  DEBUG [com.opensymphony.xwork2.DefaultActionInvocation] - Executing action
>  method = optIn
>  DEBUG [edu.suu.googleapps.portlet.OptInAction] - optIn()
>  ---exception is thrown here---
>  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Executing result
>  in Event phase
>  DEBUG [org.apache.struts2.portlet.result.PortletResult] - Setting event
>  render parameter: /WEB-INF/jsp/error.jsp
>  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] - result =
>  error
>  DEBUG [edu.suu.struts2.interceptor.ExceptionMappingInterceptor] - No
>  exceptions caught
>  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] - Leaving
>  processAction
>  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] - Entering
>  render
>  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] -
>  serviceAction
>  DEBUG [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] - Creating
>  action proxy for name = renderDirect, namespace =
>  DEBUG [com.opensymphony.xwork2.DefaultActionProxy] - Creating an
>  DefaultActionProxy for namespace  and action name renderDirect
>  DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor] -
>  Restoring value stack from event phase
>  DEBUG [org.apache.struts2.portlet.interceptor.PortletStateInterceptor] -
>  Restored stack
>  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] - intercept
>  '/renderDirect' {
>  DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] -
>  requested_locale=null
>  *
>  The interceptor looks like this:*
>  public String intercept(ActionInvocation invocation) throws Exception {
>         HttpServletRequest request = ServletActionContext.getRequest();
>         String result = null;
>         try {
>             logger.debug("Invoking action, looking for exceptions.");
>             result = invocation.invoke();
>             logger.debug("result = " + result);
>             logger.debug("No exceptions caught");
>         } catch (Exception ex) {
>             logger.debug("Exceptions caught");
>             ex.printStackTrace();
>             ......
>         }
>         return result;
>  }
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org