I'm not sure I understand what you mean regarding using the "include" element (i.e., precisely what you're doing) but I thought that each package would have its own set of interceptors, meaning there would be two instances, hence init would be called twice.
This would be trivial to determine by checking to see if it's the same instance. I could be misremembering. Dave On Wed, Apr 24, 2013 at 7:52 AM, Steven Yang <kenshin...@gmail.com> wrote: > I was using 2.1.8 and recently upgraded to 2.3.14. > And I realized that my interceptor got initialized twice and it didnt > happen before. > > This happens when I declare a default package in struts.xml and include > other xml which have packages that extends my default package. But the > thing is no matter how many more xml I include the interceptor will only be > initialize one extra time. > > the following is my sample struts.xml > > <package name="default" namespace="/" extends="struts-default"> > > <interceptors> > <interceptor name="baseGeneral" class="GeneralInterceptor"></interceptor> > <interceptor-stack name="biStack"> > <interceptor-ref name="baseGeneral"/> > </interceptor-stack> > </interceptors> > <default-action-ref name="index" /> > > <global-results> > <result name="error">/error.jsp</result> > </global-results> > > <global-exception-mappings> > <exception-mapping exception="java.lang.Exception" > result="error"/> > </global-exception-mappings> > > <action name="index"> > <result type="redirectAction"> > <param name="actionName">HelloWorld</param> > <param name="namespace">/example</param> > </result> > </action> > </package> > > <include file="example.xml"/> > > my example.xml > > <package name="example" namespace="/example" extends="default"> > > <action name="HelloWorld" class="example.HelloWorld"> > <result>/example/HelloWorld.jsp</result> > </action> > </package> > > I traced the log and see the that my default package is been initialized > twice and it seems that struts knows about it but it still called init() on > my interceptor. > partial log: > > 2013-04-24 11:57:58,504 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Using default implementation of FileManager > provided under name [system]: DefaultFileManager > 2013-04-24 11:57:58,505 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded [BUILDER] {PackageConfig Name:default > namespace:/ parents:[{PackageConfig Name:struts-default namespace: > parents:[]}]} > GeneralInterceptor.init() > 2013-04-24 11:57:58,509 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded //index in 'default' package:{ActionConfig > index () - action - > file:/D:/workspace_tsb/struts2-blank/build/classes/struts.xml:30:30} > 2013-04-24 11:57:58,510 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded [BUILDER] {PackageConfig Name:example > namespace:/example parents:[{PackageConfig Name:default namespace:/ > parents:[{PackageConfig Name:struts-default namespace: parents:[]}]}]} > 2013-04-24 11:57:58,513 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded /example/HelloWorld in 'example' > package:{ActionConfig HelloWorld (example.HelloWorld) - action - > file:/D:/workspace_tsb/struts2-blank/build/classes/example.xml:10:62} > 2013-04-24 11:57:58,514 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded /example/Login_* in 'example' > package:{ActionConfig Login_* (example.Login.{1}()) - action - > file:/D:/workspace_tsb/struts2-blank/build/classes/example.xml:14:67} > 2013-04-24 11:57:58,514 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded /example/* in 'example' > package:{ActionConfig * (example.ExampleSupport) - action - > file:/D:/workspace_tsb/struts2-blank/build/classes/example.xml:19:57} > 2013-04-24 11:57:58,515 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded [BUILDER] {PackageConfig Name:default > namespace:/ parents:[{PackageConfig Name:struts-default namespace: > parents:[]}]} > GeneralInterceptor.init() > 2013-04-24 11:57:58,516 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - Loaded //index in 'default' package:{ActionConfig > index () - action - > file:/D:/workspace_tsb/struts2-blank/build/classes/struts.xml:30:30} > 2013-04-24 11:57:58,516 DEBUG > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger > (Slf4jLogger.java:69) - The package name 'default' is already been loaded > by the same location and could be removed: package - > file:/D:/workspace_tsb/struts2-blank/build/classes/struts.xml:11:68 > > > as you can see struts knows that "default" has been loaded before however > my interceptor still prints out init message. > > If I remove the include or move the "default" package declaration out to > another file and use include to include it in struts.xml the problem goes > away. > > Is this behavior correct? or I am using something in the wrong way? > > Thanks > -- e: davelnew...@gmail.com m: 908-380-8699 s: davelnewton_skype t: @dave_newton <https://twitter.com/dave_newton> b: Bucky Bits <http://buckybits.blogspot.com/> g: davelnewton <https://github.com/davelnewton> so: Dave Newton <http://stackoverflow.com/users/438992/dave-newton>