Джерси: 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 собирал их во время инициализации, и в отдельную иерархию пакетов, и результаты не изменились.
Любая помощь или руководство по этому поводу будут очень признательны.