That will be the case if you have another Exception thrown in your XWork validator. A quick fix would be to comment out all validations in order to display a stack trace. A tiny insight that would’ve save me hours of debugging. Dang.

Update: To disable validation, overwrite the default interceptor stack of Struts 2 in struts.xml and exclude the validation portion e.g.

<!– Copied from struts-default.xml and changed validation exclude methods –>
<interceptor-stack name=”defaultStack”>
<interceptor-ref name=”exception”/>
<interceptor-ref name=”alias”/>
<interceptor-ref name=”servlet-config”/>
<interceptor-ref name=”prepare”/>
<interceptor-ref name=”i18n”/>
<interceptor-ref name=”chain”/>
<interceptor-ref name=”debugging”/>
<interceptor-ref name=”profiling”/>
<interceptor-ref name=”scoped-model-driven”/>
<interceptor-ref name=”model-driven”/>
<interceptor-ref name=”fileUpload”/>
<interceptor-ref name=”checkbox”/>
<interceptor-ref name=”static-params”/>
<interceptor-ref name=”params”>
<param name=”excludeParams”>dojo\..*</param>
</interceptor-ref>
<interceptor-ref name=”conversionError”/>
<!–
<interceptor-ref name=”validation”>
<param name=”excludeMethods”>cancel,execute,delete,edit,list</param>
</interceptor-ref>

–>
<interceptor-ref name=”workflow”>
<param name=”excludeMethods”>input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
<interceptor-stack name=”fileUploadStack”>
<interceptor-ref name=”fileUpload”/>
<interceptor-ref name=”defaultStack”/>
</interceptor-stack>
<interceptor-stack name=”adminCheck”>
<interceptor-ref name=”defaultStack”/>
<interceptor-ref name=”adminOnly”/>
</interceptor-stack>
</interceptors>

Update 2: Looks like this issue is more serious than I thought. Errors in OGNL expressions fail silently and that’s a huge problem. No stack trace is available, period.