为什么从我的拦截器引发的异常没有被捕获<global-exception-mappings>?



我有一个自定义拦截器,我从中抛出了一个异常;

运行该拦截器的操作由约定插件管理;

拦截器引发的异常在 struts 中全局定义.xml适用于操作正在运行的包。

结果:异常映射被忽略,我得到

支柱问题报告

Struts 检测到未处理的异常:

...

堆栈跟踪

java.lang.IllegalArgumentException: my message

我想我只是错过了一些愚蠢的东西...我们已经在类似的问题中讨论过这个问题,但仍然不清楚它是否可以以这种方式工作:

支柱.xml

<package name="my-package" namespace="my" extends="struts-default">
    <interceptors>
        <interceptor name="myInterceptor" class="foo.bar.MyInterceptor"/>
        <interceptor-stack name="myStack">
            <interceptor-ref name="myInterceptor"/>
            <interceptor-ref name="defaultStack"/>
        </interceptor-stack>
    </interceptors> 
    <default-interceptor-ref name="myStack"/>
    <global-results>
        <result name="input">/WEB-INF/content/my-input.jsp</result>
        <result name="error">/WEB-INF/content/my-error.jsp</result>
    </global-results>
    <global-exception-mappings>
        <exception-mapping exception="java.lang.IllegalArgumentException" 
                              result="error" />
        <exception-mapping exception="java.lang.Exception" result="error" />
    </global-exception-mappings>    
</package>

行动

@ParentPackage("my-package")
@Namespace("/my/blabla/yadayada")
public class MyAction extends MyBaseAction {
}

拦截 器

@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
    // ....
    if (somethingWrong) {
        throw new IllegalArgumentException("All work and no play makes Jack a dull boy");
    }
}

我也尝试在抽象的 BaseAction 或物理真实操作本身中定义全局结果/全局异常映射,但它们也被忽略了。

关于添加/删除/更改什么以使其正常工作的任何想法?这不是深奥的东西,这是基本的:|

异常映射功能的主要候选项是引发异常的操作。

文档:

异常

映射是处理引发异常的操作类的强大功能。核心思想是,在 Action 方法期间引发的异常可以自动捕获并映射到预定义的结果。

但是从拦截器引发的异常也可以由exception拦截器处理。为了捕获其他拦截器异常exception拦截器应定义为堆栈中的第一个拦截器。

从 javadoc ExceptionMappingInterceptor

建议将此侦听器

设置为堆栈上的第一个侦听器,确保它具有完全访问权限来捕获任何异常,甚至是由其他侦听器引起的异常。

相关内容

  • 没有找到相关文章

最新更新