Почему исключение, вызванное моим перехватчиком, не перехватывается <global-exception-mappings>?

У меня есть пользовательский перехватчик, из которого я выкидываю исключение;

Действие (я), выполняющее этот перехватчик, управляется плагином Convention;

Исключение, создаваемое Перехватчиком, глобально определено в struts.xml для пакета, с которым работает Действие.

РЕЗУЛЬТАТ: отображение исключений игнорируется, и я получаю

Отчет о проблеме Struts

Struts обнаружил необработанное исключение:

...

Stacktraces

java.lang.IllegalArgumentException: мое сообщение

Я предполагаю, что просто упускаю что-то глупое... мы уже обсуждали это в подобном вопросе, но все еще не ясно, может ли это работать или не может работать таким образом:

struts.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 или в самом физическом действии, но они тоже игнорируются.

Любая идея о том, что добавить / удалить / изменить, чтобы заставить его работать как следует? Это не эзотерика, это основа:|

1 ответ

Решение

Основным кандидатом на функцию сопоставления исключений являются действия, вызывающие исключения.

Документы:

Отображения исключений - это мощная функция для работы с классом Action, который создает исключение. Основная идея заключается в том, что исключение, генерируемое во время метода Action, может быть автоматически перехвачено и сопоставлено с предопределенным результатом.

Но исключения, выбрасываемые из перехватчиков, также могут обрабатываться exception перехватчик. Чтобы поймать другие исключения перехватчиков exception Перехватчик должен быть определен как первый перехватчик в стеке.

От ExceptionMappingInterceptor Javadoc:

Рекомендуется сделать этот перехватчик первым перехватчиком в стеке, обеспечив ему полный доступ для перехвата любых исключений, даже тех, которые вызваны другими перехватчиками.

Другие вопросы по тегам