okay, after fiddling around for 2 hours, with the weak documentation out
there, i think i have it figured out. at least empirically, it works now.
just in case there are other users out there who are running into this
problem, let me explain what in the world i did. i know A LOT of other
people have run into this problem on how to get interceptors to work with
the convention plugin (googling). the shame is that although i saw a lot of
"thanks, i got it working", no one ever bothered to show how they got it to
work.

at any rate, if you read the original post by me, you will see how my
interceptor stack was defined in struts.xml. you will also see how i
implemented a dummy interceptor. i had to do two things to get my
interceptor working (called on my action).
1. add @ParentPackage("default") to my Action class
2. add @interceptorref...@interceptorref("dummyStack") to my execute method
(in my Action class).

after i did this, my interceptor's intercept(ActionInvocation) method is
called when my Action is called.

here's how my dummy Action class looks like.

@ParentPackage("default")
public class DummyAction extends ActionSupport {
 @Action(value="/dummy",
  result...@result(name="success",location="dummy-success.jsp")},
  interceptorref...@interceptorref("dummyStack")}
 )
 public String execute() {
  return SUCCESS;
 }
}

alright, so, now i'd like to know how to get this interceptor stack
(dummyStack) to work on all actions? in the link i posted, you can do so
using one single line in struts.xml (i.e. <default-interceptor-ref
name="dummyStack"/>). with the convention plugin + annotations, is such a
simple approach possible? or do i have to continuously add @ParentPackage
and @InterceptorRef annotations to the classes and methods i want to use the
stack?

i don't know why this is such a pain (but then again, i'm not a developer on
the struts2 project, so there may be a lot of complexities to get this
working elegantly that i'm unaware of).

On Sat, Jan 30, 2010 at 4:10 PM, Jake Vang <vangj...@googlemail.com> wrote:

> i have written an interceptor implementation, however, it seems i cannot
> get it to work. i have followed the instructions at
> http://struts.apache.org/2.x/docs/interceptors.html. i have also followed
> the instructions at
> http://struts.apache.org/2.x/docs/how-do-we-configure-an-interceptor-to-be-used-with-every-action.htmlto
>  use the interceptor with every action.
>
> however, when any of my actions run, i never see the pre and post
> processing logging messages (logging messages inside the intercept method).
> i do see the logging messages from the init and destroy methods. this is not
> a problem with logging (as for sanity checking, i also use
> System.out.println, and have Tomcat running in console mode). i also have
> placed some break points in the intercept(ActionInvocation) method, but
> these break points are never reached.
>
> this is my struts.xml.
>
> <struts>
>     <package name="default" extends="struts-default">
>         <interceptors>
>             <interceptor name="dummyInterceptor"
> class="mypackage.DummyInterceptor"/>
>             <interceptor-stack name="dummyStack">
>                 <interceptor-ref name="dummyInterceptor"/>
>                 <interceptor-ref name="defaultStack"/>
>             </interceptor-stack>
>         </interceptors>
>         <default-interceptor-ref name="dummyStack"/>
>     </package>
> </struts>
>
> this is my DummyInterceptor class.
>
> public class DummyInterceptor implements Interceptor {
>     private static final Log _log =
> LogFactory.getLog(DummyInterceptor.class);
>     public void destroy() {
>         _log.debug("dummy interceptor destroyed called");
>         System.out.println("dummy interceptor destroyed
> called".toUpperCase());
>     }
>     public void init() {
>         _log.debug("dummy interceptor init called");
>         System.out.println("dummy interceptor init called".toUpperCase());
>     }
>     public String intercept(ActionInvocation actionInvocation) throws
> Exception {
>         _log.debug("dummy interceptor intercept pre processing");
>         System.out.println("dummy interceptor intercept pre
> processing".toUpperCase());
>
>         String result = actionInvocation.invoke();
>
>         _log.debug("dummy interceptor intercept post processing");
>         System.out.println("dummy interceptor intercept post
> processing".toUpperCase());
>         return result;
>     }
> }
>
> i am using annotations for my Action classes, so i do not define any
> <action> elements in struts.xml (using the Struts2 Convention jar).
>
> one very interesting thing i did was to get struts-default.xml out of the
> struts2-core-2.1.8.1.jar. i then modified struts-default.xml by adding: 1) a
> definition of my interceptor and 2) my interceptor onto the defaultStack.
> when i did this, my interceptor does work as expected (i see logging output
> from the intercept method, i can hit break points set inside this method)
> for all my actions.
>
> i wonder if there is some gotcha that i am missing here. is there something
> extra that i have to do when mixing annotations with interceptors?
>
> thanks.
>

Reply via email to