Джърси: 1.12 Пролет: 3.11 JDK: 1.6.0_35 Tomcat: 6..0.33
Опитвам се да регистрирам екземпляри на ExceptionMapper за сървлет на Джърси, които са инстанцирани от контейнер на Spring IoC в контекста на SpringServlet, и се натъквам на старото изключение „Обхватът на класа на компонента X трябва да бъде единичен“ по време на сървлета на Джърси инициализация. Понастоящем не съм в състояние да публикувам действителния код, така че ще дам най-важното за внедряването, за да видя дали нещо очевидно ще изскочи на някого или мога да бъда насочен към някаква документация, която имам пропуснато.
Екземплярът ExceptionMapper е по същество както следва:
// ... package definitions omitted ...
@Provider
@Singleton
public class MyExceptionMapper
implements ExceptionMapper<MyException>
{
// ... injected attributes omitted ...
@Override
public Response toResponse(MyException exception)
{
// ... specific handling logic omitted ...
return Response.status(Status.BAD_REQUEST).entity(exception.getMessage()).build();
}
}
Дефиницията на bean в applicationContext.xml е следната, която по подразбиране е с единичен обхват (и добавянето на изричен спецификатор на обхват изглежда не променя поведението):
<bean id="myExceptionMapper" class="my.package.MyExceptionMapper" />
Прослушвателят на контекстното зареждане на Spring и конфигурацията на SpringServlet в web.xml са по същество шаблонни и сървлетът ще зареди, инициализира и работи правилно с други атрибути за инжектиране, когато дефиницията на bean за MyExceptionMapper е коментирана извън applicationContext.xml. Но когато дефиницията на bean присъства в applicationContext.xml, получавам регистрационни съобщения за ефекта на:
SpringProviderFactory - Registering Spring bean, myExpectionMapper, of type my.package.MyExceptionMapper as a provider class
SpringProviderFactory - Registering Spring bean, myServiceController, of type my.package.MyServiceController as a root resource class
... other root resource classes loading ...
SpringServlet - Exception occurred when initialization
java.lang.RuntimeException: The scope of the component class my.package.MyExceptionMapper must be a singleton
at som.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(...)
Опитах да поставя MyExceptionMapper в йерархията на сканираните пакети, за да бъде взет от SpringServlet по време на инициализация, и в отделна йерархия на пакети, и резултатите не се променят.
Всяка помощ или насоки по този въпрос ще бъдат много оценени.