Исключение WebRequestCycle.onRuntimeException перенаправляет на страницу ошибки по умолчанию

#java #exception #wicket

#java #исключение #калитка

Вопрос:

У меня есть 4 разные страницы ошибок для моего приложения wicket. Метод WebRequestCycle.onRuntimeException является:

 @Override
public final Page onRuntimeException(Page cause, RuntimeException runtimeException) {
    if (runtimeException instanceof EMSUserNotFoundException) {
        return new EMSUserNotFoundExceptionPage(runtimeException);
    } else if (runtimeException instanceof EMSUnreachableException) {
        return new EMSUnreachableExceptionPage(runtimeException);
    } else if (runtimeException instanceof UserActionPortInitializationException) {
        return new UserActionPortInitializationExceptionPage(runtimeException);
    } else {
        return new GeneralRunTimeExceptionPage(runtimeException);
    }       
}
  

Во время выполнения EMSUserNotFoundExceptionPage, EMSUnreachableExceptionPage, GeneralRunTimeExceptionPage отображаются для соответствующих случаев. Но цикл запроса не перенаправляет на страницу исключения useractionportinitialization. Я подумал, что у страницы UserActionPortInitializationExceptionPage возникли некоторые проблемы, поэтому я удаляю страницу GeneralRunTimeExceptionPage из else и помещаю туда страницу UserActionPortInitializationExceptionPage, затем я увидел эту страницу.

Теперь исключение useractionportinitialization является:

 public class UserActionPortInitializationException extends RuntimeException {

    private static final long serialVersionUID = 10129L;

    private final static String message = "UserActionPort initialization failed";

    public UserActionPortInitializationException() {
        super(message);
    }
}
  

И фрагмент кода, который выдает это исключение, является:

     public static String getUserActionPortAddress() {
        String userActionPortAddress = null;
        ClassPathResource userActionPortAddressResource = new ClassPathResource("port-address.properties");
        Properties properties = null;
        try {
            properties = loadProperties(userActionPortAddressResource.getFile());
        } catch (Exception e) {
            throw new UserActionPortInitializationException();
        }

        if (properties != null) {
            userActionPortAddress = properties.getProperty("port");
        }

        if (userActionPortAddress == null) {
            throw new UserActionPortInitializationException();
        }

        return userActionPortAddress;
    }

    private static Properties loadProperties(File file) throws Exception {
        InputStream is = null;
        Properties props = new Properties();
        try {
            is = new FileInputStream(file);
            props.load(is);
        } finally {
            is.close();
        }
        return props;
    }
  

Когда приложение в консоли выдает исключение UserActionPortInitializationException, я получаю:

 Caused by: release.exception.UserActionPortInitializationException: UserActionPort initialization failed
  

Это означает, что исключение генерируется этим фрагментом, но я не могу понять, почему страница не перенаправляется.

Для получения дополнительной информации:

UserActionPortInitializationExceptionPage.java:

 public class UserActionPortInitializationExceptionPage extends ExceptionBasePage {

public UserActionPortInitializationExceptionPage(RuntimeException runtimeException) {
    super(runtimeException);
}
  

}

UserActionPortInitializationExceptionPage.html:

 <html xmlns:wicket>
<body>
    <wicket:extend>
        <h1 style="font-size: 1.5em; color: red;">UserActionPort initialization failed</h1>
        <i>Please contact administrator</i>
    </wicket:extend>
</body>
  

Спасибо и с уважением.

Ответ №1:

Ваш вывод начинается с «Вызвано»:

 Caused by: release.exception.UserActionPortInitializationException: UserActionPort initialization failed
  

Из-за этого я полагаю, что ваше исключение обернуто другим. И если оно завернуто, ваше предложение if не сможет распознать его как UserActionPortInitializationException .

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