Jersey: 1.12 Primavera: 3.11 JDK: 1.6.0_35 Tomcat: 6..0.33Jersey ;: Registrazione istanze ExceptionMapper iniettato attraverso SpringServlet
Sto cercando di registrare le istanze ExceptionMapper per un servlet Jersey che sono un'istanza da un contenitore IoC Primavera nel contesto di una SpringServlet, e sono in esecuzione in ye Olde "il campo di applicazione della classe del componente X deve essere un singleton" eccezione durante l'inizializzazione del servlet Jersey. Io non sono in grado di pubblicare il codice vero e proprio in questo momento, così ho intenzione di dare gli elementi essenziali di attuazione, per vedere se qualcosa di ovvio salta fuori qualcuno, o se posso essere puntato verso una certa documentazione che ho perse.
esempioL'ExceptionMapper è essenzialmente il seguente:
// ... 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();
}
}
La definizione fagiolo in applicationContext.xml è come segue che imposta Singleton portata (e aggiungendo uno specificatore ambito esplicito non sembra modificare il comportamento):
<bean id="myExceptionMapper" class="my.package.MyExceptionMapper" />
The Spring contesto loader ascoltatore e configurazione SpringServlet in web.xml sono essenzialmente boilerplate, e il servlet caricherà, inizializzare e funzionare correttamente con altri attributi iniezione quando il bean defin ition per MyExceptionMapper è commentato da applicationContext.xml. Ma quando la definizione di fagioli è presente in applicationContext.xml, ottengo i messaggi di log per effetto di:
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(...)
Ho provato mettendo MyExceptionMapper nella gerarchia pacchetti digitalizzata per essere prelevati dal SpringServlet durante l'inizializzazione, e in una gerarchia di pacchetti separata e i risultati non cambiano.
Qualsiasi forma di assistenza o di orientamento su questo sarebbe molto apprezzato.
Vi siete doppio controllato che si sta utilizzando javax. Inject.Singleton e le annotazioni javax.inject sono abilitate in primavera? –