users@jersey.java.net

[Jersey] Re: Is assisted injection still OK?

From: Christopher Piggott <cpiggott_at_gmail.com>
Date: Wed, 24 Aug 2011 21:03:29 -0400

BAH, it works fine. Sorry for the noise.

I once again forgot to install the assisted object factory in the
JerseyServletModule. It was a simple mistake but it produced a fairly
unhelpful stack trace.

For those who encounter this in the future, what I forgot to do was
(in the module):

                install(new FactoryModuleBuilder().build(DbLogSubResource.Factory.class));

--Chris



On Wed, Aug 24, 2011 at 8:50 PM, Christopher Piggott <cpiggott_at_gmail.com> wrote:
> Trying to upgrade to jersey-server 1.8, jersey-guice 1.8, guice-3.0,
> guice-assistedinject-3.0, jetty-webapp-7.4.5-something,
> jersey-core-1.8, and I'm having an issue with assisted injection that
> I have not seen before.
>
>
> My root resource contains this:
>
>        @Path("dblog")
>        public DbLogSubResource getDbLog(@InjectParam
> DbLogSubResource.Factory provider)
>        {
>                /* stuff deleted */
>                return provider.create(bds, 1234);
>        }
>
> this uses the assisted injection framework, so DbLogSubResource looks like:
>
> @RequestScoped
> public class DbLogSubResource {
>        public interface Factory {
>                public DbLogSubResource create(DataSource ds, int platformId);
>        }
>
>        @Inject
>        public DbLogSubResource(DbLoggerStatistics stats, @Assisted
> DataSource ds, @Assisted int platformId) {
>                this.ds = ds;
>                this.stats = stats;
>                this.platformId = platformId;
>        }
> }
>
>
> If you haven't used assisted injection before I know that looks a
> little wacky but trust me, it all worked great with the combination of
> jersey-1.6 and guice-3.0 ... which is why I'm wondering: is there some
> reason it wouldn't work with jersey 1.8, or is it actually a problem
> with jetty (was using grizzly in the last project)?
>
> Here is the wacky NPE that I am getting.  Note that to get this to go
> away, all I have to do is comment out the root resource method (the
> one with the @InjectParam in it).
>
> --C
>
>
>
> 20:47:39.739 WARN  org.eclipse.jetty.util.log - Failed startup of
> context o.e.j.w.WebAppContext{/,file:/home/chrisp/work/ocb/server/trunk/}
> java.lang.NullPointerException: null
>        at com.sun.jersey.guice.spi.container.GuiceComponentProviderFactory.isGuiceFieldOrMethodInjected(GuiceComponentProviderFactory.java:241)
> ~[jersey-guice-1.8.jar:1.8]
>        at com.sun.jersey.guice.spi.container.GuiceComponentProviderFactory.isGuiceFieldOrMethodInjected(GuiceComponentProviderFactory.java:254)
> ~[jersey-guice-1.8.jar:1.8]
>        at com.sun.jersey.guice.spi.container.GuiceComponentProviderFactory.getComponentProvider(GuiceComponentProviderFactory.java:150)
> ~[jersey-guice-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.component.IoCResourceFactory.getComponentProvider(IoCResourceFactory.java:76)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.getResourceComponentProvider(WebApplicationImpl.java:580)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.getResourceComponentProvider(WebApplicationImpl.java:615)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl$19.getInjectable(WebApplicationImpl.java:1033)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl$19.getInjectable(WebApplicationImpl.java:1022)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.core.spi.factory.InjectableProviderFactory.getInjectable(InjectableProviderFactory.java:214)
> ~[jersey-core-1.8.jar:1.8]
>        at com.sun.jersey.core.spi.factory.InjectableProviderFactory.getInjectableWithScope(InjectableProviderFactory.java:245)
> ~[jersey-core-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.inject.ServerInjectableProviderFactory.getInjectableiWithScope(ServerInjectableProviderFactory.java:90)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.inject.ServerInjectableProviderFactory.getInjectable(ServerInjectableProviderFactory.java:116)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.inject.ServerInjectableProviderFactory.getInjectable(ServerInjectableProviderFactory.java:131)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.model.ResourceUriRules.processSubResourceLocators(ResourceUriRules.java:228)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.model.ResourceUriRules.<init>(ResourceUriRules.java:137)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.newResourceUriRules(WebApplicationImpl.java:709)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.access$600(WebApplicationImpl.java:169)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl$9.f(WebApplicationImpl.java:553)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl$9.f(WebApplicationImpl.java:550)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
> ~[jersey-core-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.getUriRules(WebApplicationImpl.java:550)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiateResource(WebApplicationImpl.java:657)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiateResource(WebApplicationImpl.java:653)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:124)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1298)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:169)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:775)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:771)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
> ~[jersey-core-1.8.jar:1.8]
>        at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.guice.spi.container.servlet.GuiceContainer.initiate(GuiceContainer.java:121)
> ~[jersey-guice-1.8.jar:1.8]
>        at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
> ~[jersey-server-1.8.jar:1.8]
>        at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
> ~[jersey-server-1.8.jar:1.8]
>        at javax.servlet.GenericServlet.init(GenericServlet.java:241)
> ~[servlet-api-2.5.jar:2.5]
>        at com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:117)
> ~[guice-servlet-3.0.jar:na]
>        at com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:82)
> ~[guice-servlet-3.0.jar:na]
>        at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:102)
> ~[guice-servlet-3.0.jar:na]
>        at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172)
> ~[guice-servlet-3.0.jar:na]
>        at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:99)
> ~[jetty-servlet-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
> [jetty-util-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:742)
> ~[jetty-servlet-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:245)
> ~[jetty-servlet-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208)
> ~[jetty-webapp-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:586)
> ~[jetty-server-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:449)
> ~[jetty-webapp-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
> [jetty-util-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89)
> [jetty-server-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.server.Server.doStart(Server.java:258)
> [jetty-server-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
> [jetty-util-7.4.5.v20110725.jar:7.4.5.v20110725]
>        at com.autofrog.ocb.OcbServer.run(OcbServer.java:58) [classes/:na]
>        at com.autofrog.ocb.OcbServer.main(OcbServer.java:65) [classes/:na]
>