users@jersey.java.net

[Jersey] Is assisted injection still OK?

From: Christopher Piggott <cpiggott_at_gmail.com>
Date: Wed, 24 Aug 2011 20:50:38 -0400

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]