#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
.
Если вы опубликуете полную трассировку стека, я мог бы подтвердить свое предположение.