Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

When using CDI (weld) 1.x integration, sub-resources defined vial locator returning Class<SubRes> are not integrated with CDI #3456

Open
jerseyrobot opened this issue Nov 14, 2016 · 4 comments

Comments

@jerseyrobot
Copy link
Contributor

DataAccessResource exposes NewBlueDataAccessResource sub-resource by returning its class

@ApplicationScoped
@Path("data")
public class DataAccessResource {
  @Path("newblue")
  public Class<NewBlueDataAccessResource> getNewBlueResource() {
    return NewBlueDataAccessResource.class;
  }
}

The sub-resource has CDI (weld) injection point (DomainCacheService cacheService) which fail because hk2 tries to manage it.

@RequestScoped
public class NewBlueDataAccessResource {
  @Inject private DomainCacheService cacheService;

On root resource level CDI managed resources get injected just fine. If I inject CDI BeanManager and obtain reference to sub-resource directly and return it rather than use class based locator it works as well

the exception is

javax.servlet.ServletException: A MultiException has 1 exceptions.  They are:
1\. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=DomainCacheService,parent=NewBlueDataAccessResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1256464973)

	org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
	org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	gov.gao.ems.gateway.util.HttpHeadersFilter.doFilter(HttpHeadersFilter.java:22)

root cause

A MultiException has 1 exceptions.  They are:
1\. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=DomainCacheService,parent=NewBlueDataAccessResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1256464973)

	org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75)
	org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:941)
	org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:980)
	org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1055)
	org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1046)
	org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:173)
	org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter.apply(SubResourceLocatorRouter.java:131)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92)
	org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61)
	org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)
	org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318)
	org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
	org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
	org.glassfish.jersey.internal.Errors.process(Errors.java:315)
	org.glassfish.jersey.internal.Errors.process(Errors.java:297)
	org.glassfish.jersey.internal.Errors.process(Errors.java:267)
	org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
	org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
	org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
	org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
	org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	gov.gao.ems.gateway.util.HttpHeadersFilter.doFilter(HttpHeadersFilter.java:22)

root cause

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=DomainCacheService,parent=NewBlueDataAccessResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1256464973)
	org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75)
	org.jvnet.hk2.internal.Utilities.justInject(Utilities.java:941)
	org.jvnet.hk2.internal.ServiceLocatorImpl.inject(ServiceLocatorImpl.java:980)
	org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1055)
	org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:1046)
	org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:173)
	org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter.apply(SubResourceLocatorRouter.java:131)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
	org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92)
	org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61)
	org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)
	org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318)
	org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
	org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
	org.glassfish.jersey.internal.Errors.process(Errors.java:315)
	org.glassfish.jersey.internal.Errors.process(Errors.java:297)
	org.glassfish.jersey.internal.Errors.process(Errors.java:267)
	org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
	org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
	org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
	org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
	org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
	org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	gov.gao.ems.gateway.util.HttpHeadersFilter.doFilter(HttpHeadersFilter.java:22)

Environment

Weld 2.4, Tomcat 7, JDK 1.8

Affected Versions

[2.24]

@jerseyrobot
Copy link
Contributor Author

@glassfishrobot Commented
Reported by roytmana

@jerseyrobot
Copy link
Contributor Author

@glassfishrobot Commented
roytmana said:
if I annotate my sub-resource with a @path("xxx") it works but of course we should not be doing it as the sub-resource becomes available directly via that path

@jerseyrobot
Copy link
Contributor Author

@glassfishrobot Commented
This issue was imported from java.net JIRA JERSEY-3184

@jerseyrobot
Copy link
Contributor Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant