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