2

У меня есть пользовательский перехватчик, из которого я бросаю исключение;Почему исключение, поднятое из моего перехватчика, не попадает в список <global-exception-mappings>?

Действия, выполняемые с использованием Interceptor плагином Конвенции;

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

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

Struts Проблема

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

... 

Stacktraces

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

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

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

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

+0

2.3.16.3 (Невозможно обновить до 2.3.20 из-за несовместимости с плагином struts2-jquery 3.7.1 ... в ожидании 4.0.0, то) –

+0

Таким образом, нет никакого * пути к карте исключение, возвращенное перехватчиком к известному результату? Я могу вернуть результат из Interceptor, но он больше не будет отделен от конфигурации проекта ... если я верну свое исключение, оно может быть отображено или нет (и, следовательно, будет отображаться украшенным или необработанным), а если я верну результат он должен быть определен в config ... BTW добавьте его в качестве ответа, чтобы я мог его перенести и (скорее всего) принять –

+0

Вне темы: * ... несовместимости с плагином struts2-jquery 3.7.1 * Знаете ли вы какие-либо из них? Я просто обновил приложение с некоторыми функциями s2-jqr и, похоже, работает нормально ... пока. ;) –

ответ

3

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

Docs:

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

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

От ExceptionMappingInterceptorjavadoc:

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

+2

Это сработало, поставив мое Перехватчик - второй, после перехватчика 'exception'. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^