Zero-configuration ignores interceptor configuration
----------------------------------------------------

                 Key: WW-2016
                 URL: https://issues.apache.org/struts/browse/WW-2016
             Project: Struts 2
          Issue Type: Bug
          Components: Configuration
    Affects Versions: 2.0.8
         Environment: Windows XP, Tomcat 5.5.23 
            Reporter: Sean McRae



So I am using the GWT plug-in (http://code.google.com/p/struts2gwtplugin/) to 
integrate some new GWT work into our existing Struts app. In switching to 
Struts 2 we now would like to use the zero-config option and call all of our 
actions using this plug-in - basically an interceptor. Unfortunately we cannot 
call our actions, all named *Action, using this method as the zero-config 
method and Struts' discovery of actions and the assignment of interceptors 
seems to ignore the default interceptor setup (I tried redefining this in 
struts-default.xml - see below) or by specifying a default interceptor.

It seems to me that Struts should do one of the following:

1) Use the defaultStack as defined (or overridden) in struts.properties and 
struts-default.xml
2) Define a stack that could be overridden in struts.xml
3) Provide some other mechanism to allow the developer to override the default 
zero-config interceptor stack

Issue WW-1796 addresses this in some respect, but what I would like is to 
define the default interceptor stack and then used the WW-1796 feature to 
override that if I need to.

Below are thing I tried to work around this issue.

1. Not deriving my package from gwt-default and struts-default so as not to get 
the defaultStack interceptor stack defined in struts-default.xml. I didn't 
really think this would work since the action classes aren't part of the any 
defined package but I thought I would try. So my package definition looked like 
this:

    <package name="myPackage">
        <interceptors>

            <interceptor name="gwt"
                class="com.pharmanet.server.struts2.GWTInterceptor" />
 
            <interceptor-stack name="gwtStack">
                <interceptor-ref name="gwt"/>
             </interceptor-stack>

        </interceptors>

        <default-interceptor-ref name="gwtStack"/>
       
    </package>


2. Added a struts.properties file to /WEB-INF/classes that sets the struts 
configuration files property:

struts.configuration.files=pnet-struts-default.xml,struts-plugin.xml,struts.xml 
and then in pnet-struts-default.xml

    I defined defaultStack to only have the GWT interceptor in it. This does 
not seem to help either.


Using the configuration browser plug-in (that is a nice plug-in for this work), 
the interceptor stack that gets generated by Struts is this:

Name                                               Type
ExceptionMappingInterceptor      
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor
AliasInterceptor                               
com.opensymphony.xwork2.interceptor.AliasInterceptor
ServletConfigInterceptor                
org.apache.struts2.interceptor.ServletConfigInterceptor
PrepareInterceptor                          
com.opensymphony.xwork2.interceptor.PrepareInterceptor
I18nInterceptor                                 
com.opensymphony.xwork2.interceptor.I18nInterceptor
ChainingInterceptor                        
com.opensymphony.xwork2.interceptor.ChainingInterceptor
DebuggingInterceptor                    
org.apache.struts2.interceptor.debugging.DebuggingInterceptor
ProfilingActivationInterceptor         
org.apache.struts2.interceptor.ProfilingActivationInterceptor
ScopedModelDrivenInterceptor    
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor
ModelDrivenInterceptor                  
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor
FileUploadInterceptor                     
org.apache.struts2.interceptor.FileUploadInterceptor
CheckboxInterceptor                       
org.apache.struts2.interceptor.CheckboxInterceptor
StaticParametersInterceptor         
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor
ParametersInterceptor                   
com.opensymphony.xwork2.interceptor.ParametersInterceptor
StrutsConversionErrorInterceptor  
org.apache.struts2.interceptor.StrutsConversionErrorInterceptor
AnnotationValidationInterceptor     
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor
DefaultWorkflowInterceptor            
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor

My theory is that the zero-config code is either ignoring defaultStack settings 
and making its own stack up, or Struts is not picking up on my override of 
struts-default.xml (maybe I need to remove it from the JAR?). I end up getting 
a ClassCastException at line 150 of 
com.opensymphony.xwork2.validator.ValidationInterceptor, I am assuming this is 
the point at which Struts is trying to cast my object to a Struts result 
(String).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to