Я пытаюсь создать глобальный ExceptionMapper для своего приложения, этот ExceptionMapper покажет исключение в консоли, затем снова покажет его, украсив, а затем сохранит некоторую информацию о нем в базе данных, чтобы в будущем было легче идентифицировать эти инциденты.
В моем приложении используется com.sun.jersey.spi.spring.container.servlet.SpringServlet
, и я обнаружил, что могу перехватывать исключения с помощью Provider с ExceptionMapper, поэтому я сделал это:
package es.companyName.appName.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Named
@Priority(1)
@Provider
public class UncaughtExceptionHandler extends Throwable implements ExceptionMapper<Throwable> {
private static final long serialVersionUID = 1L;
private Logger logger = LoggerFactory.getLogger(this.getClass());
public UncaughtExceptionHandler () {
logger.info("Provider UncaughtExceptionHandler creado correctamente");
}
@Override
public Response toResponse(Throwable ex) {
//some stuff
...
}
}
И я объявил это в своем web.xml следующим образом:
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>es.companyName.appName.rs, es.companyName.appName.config</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
С этим мой ExceptionMapper работает нормально, но по какой-то причине он не всегда работает, когда я компилирую и развертываю свое приложение, иногда оно работает, а иногда нет, без изменения кода.
Я пытался отладить свой ExceptionMapper, когда он не работает и не входит туда, как будто мой ExceptionMapper загружается неправильно... В консоли появляется, что загружается правильно:
appName 2020-12-29 14:45:10.638 --- appName.config.UncaughtExceptionHandler : Provider UncaughtExceptionHandler creado correctamente
...
INFO: Scanning for root resource and provider classes in the packages:
es.companyName.appName.rs
es.companyName.appName.config
Dec 29, 2020 4:43:28 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
......
Dec 29, 2020 4:43:28 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Provider classes found:
class es.companyName.appName.config.UncaughtExceptionHandler
Но это не потому, что я не могу остановиться на отладке, это похоже на то, что развертывание игнорирует мой маппер... Есть ли что-то, что я оставил? Это должна быть какая-то настройка, которую я упускаю, но странно то, что иногда она работает правильно, и я даже могу остановиться с отладчиком.
Я читал в некоторых связанных статьях, в которых говорится, что с джерси пытается найти наилучшее соответствие для заданных исключений в своем списке картографов (который включает в себя некоторые картографы по умолчанию), вы должны сопоставить свой преобразователь с точным исключением, которое вы пытаетесь поймать, поскольку порядок картографа произвольный, но в моем случае я не хочу сопоставлять какое-то конкретное исключение, а все исключения в моем приложении.
Поскольку у меня нет другого картографа в моем приложении, те, которые делают это, должны быть картографами по умолчанию для джерси, есть ли способ их отключить? Или я что-то упускаю?
Большое спасибо за ваши ответы.