users@jersey.java.net

[Jersey] Re: Jersey error PerRequestTypeInjectableProvider

From: Martin Matula <martin.matula_at_oracle.com>
Date: Thu, 23 Jun 2011 13:39:22 +0200

How does your resource class look like? Isn't it a singleton?
Martin

On 22.6.2011 7:32, Denis Murzin wrote:
> Good day.
>
> There is a class
> @ Provider
> public class OAuth {
>
> private String name;
>
> public OAuth () {
> }
>
> public String getName () {
> return name;
> }
>
> public void setName (String name) {
> </span>this.name = name;
> }
> }
>
> Created for this class provider
> @ Provider
> public class MyPerReqProvider extends PerRequestTypeInjectableProvider
> <Context, OAuth> {
>
> public MyPerReqProvider () {
> super (OAuth.class);
> }
>
> @ Override
> public Injectable <OAuth> getInjectable (ComponentContext
> componentContext, Context context) {
> return new Injectable <OAuth> () {
> @ Override
> public OAuth getValue () {
> return new OAuth ();
> }
> };
> }
> }
>
> I declare the filter
>
> @ Context OAuth auth;
> public RequestFilter () {
> }
> @ Override
> public ContainerRequest filter (ContainerRequest request) {
> auth.setName ("admin");
> }
>
>
> and then in the method call
> @ Context OAuth auth;
>
> @ Path ("/ xml")
> @ POST
> @ Produces (MediaType.APPLICATION_XML)
> public XmlResponse getMessageXML (@ Context HttpServletRequest request) {
> System.out.println (auth.getName ());
> }
>
> and upon request receive an error
> 15.06.2011 14:22:51 com.sun.jersey.spi.inject.Errors processErrorMessages
> SEVERE: The following errors and warnings have been detected with
> resource and / or provider classes:
> SEVERE: Missing dependency for field: ru.mw.http.OAuth
> ru.mw.http.RequestFilter.auth
>
> here's another
> javax.servlet.ServletException: Servlet.init () for servlet Jersey Web
> Application threw exception
> org.apache.catalina.valves.ErrorReportValve.invoke
> (ErrorReportValve.java: 108)
> org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:
> 556)
> org.apache.catalina.connector.CoyoteAdapter.service
> (CoyoteAdapter.java: 401)
> org.apache.coyote.http11.Http11AprProcessor.process
> (Http11AprProcessor.java: 281)
> org.apache.coyote.http11.Http11AprProtocol $
> Http11ConnectionHandler.process (Http11AprProtocol.java: 579)
> org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run
> (AprEndpoint.java: 1568)
> java.util.concurrent.ThreadPoolExecutor $ Worker.runTask
> (ThreadPoolExecutor.java: 886)
> java.util.concurrent.ThreadPoolExecutor $ Worker.run
> (ThreadPoolExecutor.java: 908)
> java.lang.Thread.run (Thread.java: 662)
>
> root cause
>
> com.sun.jersey.spi.inject.Errors $ ErrorMessagesException
> com.sun.jersey.spi.inject.Errors.processErrorMessages (Errors.java: 170)
> com.sun.jersey.spi.inject.Errors.postProcess (Errors.java: 136)
> com.sun.jersey.spi.inject.Errors.processWithErrors (Errors.java: 199)
> com.sun.jersey.server.impl.application.WebApplicationImpl.initiate
> (WebApplicationImpl.java: 769)
> com.sun.jersey.server.impl.application.WebApplicationImpl.initiate
> (WebApplicationImpl.java: 764)
> com.sun.jersey.spi.container.servlet.ServletContainer.initiate
> (ServletContainer.java: 488)
> com.sun.jersey.spi.container.servlet.ServletContainer $
> InternalWebComponent.initiate (ServletContainer.java: 318)
> com.sun.jersey.spi.container.servlet.WebComponent.load
> (WebComponent.java: 609)
> com.sun.jersey.spi.container.servlet.WebComponent.init
> (WebComponent.java: 210)
> com.sun.jersey.spi.container.servlet.ServletContainer.init
> (ServletContainer.java: 373)
> com.sun.jersey.spi.container.servlet.ServletContainer.init
> (ServletContainer.java: 556)
> javax.servlet.GenericServlet.init (GenericServlet.java: 151)
> org.apache.catalina.valves.ErrorReportValve.invoke
> (ErrorReportValve.java: 108)
> org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:
> 556)
> org.apache.catalina.connector.CoyoteAdapter.service
> (CoyoteAdapter.java: 401)
> org.apache.coyote.http11.Http11AprProcessor.process
> (Http11AprProcessor.java: 281)
> org.apache.coyote.http11.Http11AprProtocol $
> Http11ConnectionHandler.process (Http11AprProtocol.java: 579)
> org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run
> (AprEndpoint.java: 1568)
> java.util.concurrent.ThreadPoolExecutor $ Worker.runTask
> (ThreadPoolExecutor.java: 886)
> java.util.concurrent.ThreadPoolExecutor $ Worker.run
> (ThreadPoolExecutor.java: 908)
> java.lang.Thread.run (Thread.java: 662)
>
>
> If, instead of using PerRequestTypeInjectableProvider
> SingletonTypeInjectableProvider then all is well, please answer what
> I am doing wrong
>
> All classes define both
> public class initApp extends Application {
>
> private Set <Object> singletons = new HashSet <Object> ();
> private Set <Class <?>> classes = new HashSet <Class <?>>();
>
> public initApp () {
> classes.add (MyPerReqProvider.class);
> classes.add (receiver.class);
> classes.add (NotFoundExceptionMapper.class);
> }
>
> @ Override
> public Set <Class <?>> getClasses () {
> return classes;
> }
>
> @ Override
> public Set <Object> getSingletons () {
> return singletons;
> }
>
>
> Thanks in advance.