cdi无法将对象注入到jax rs中的ContainerRequestFilter中

时间:2017-03-05 18:35:18

标签: java jax-rs cdi

我正在尝试将我的服务层对象注入到扩展ContainerFilterRequest的类中,但我得到空指针异常,我的Obejct在注入点之后没有获得依赖

这是我在jax rs中的代码

@PreMatching
@Provider
public class RequestInterceptor implements ContainerRequestFilter {


@Inject
private CompanyUserService companyUserService;

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    ......
    ......
   //not initialized yet
   Optional<CompanyUser> user = this.companyUserService.getByUserName(apiSecurityDetail.getSubject());
}

这是我的服务对象

@Named
class CompanyUserServiceImpl implements CompanyUserService {


@Inject
private CompanyUserDao companyUserDao;

@Inject
private CompanyUserConverter companyUserConverter;

@Inject
private CompanyUserValidator companyUserValidator;

//other code
}

我已经在我的其他模块中明确添加了@RequestScoped,但是当我在这个过滤器类中添加@RequestScoped时,它不会过滤方法而没有@RequestScoped和@Dependent Scope他们的没有初始化对象。

根据JBOSS DOC:

  1. 如果JAX-RS根资源未明确定义范围,则它将绑定到请求范围。
  2. 如果JAX-RS Provider或javax.ws.rs.Application子类未明确定义范围,则它将绑定到Application范围。
  3. 在我的情况下,我使用@RequestScoped定义了所有的根jax-rs类。如果你的家伙对这种困惑有所了解,那将是很大的帮助。谢谢

    在课程级别添加@requestScope

    在stacktrace show

    之后
        08:15:57,975 INFO  [np.com.drose.parkgarau.platform.DBConnectionFactory] (default task-35)  inside DataSource generation
    08:15:57,976 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-35) RESTEASY002025: Unknown exception while executing GET /vehicles/calculation: java.lang.IllegalStateException: Request Context is missing
        at np.com.drose.parkgarau.platform.ParkGarumContextHolder.getContext(ParkGarumContextHolder.java:14)
        at np.com.drose.parkgarau.platform.DataSourceConnectionPool.getDataSource(DataSourceConnectionPool.java:65)
        at np.com.drose.parkgarau.platform.DataSourceConnectionPool$Proxy$_$$_WeldClientProxy.getDataSource(Unknown Source)
        at np.com.drose.parkgarau.platform.DBConnectionFactory.createConnection(DBConnectionFactory.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88)
        at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:78)
        at org.jboss.weld.injection.producer.ProducerMethodProducer.produce(ProducerMethodProducer.java:99)
        at org.jboss.weld.injection.producer.AbstractMemberProducer.produce(AbstractMemberProducer.java:161)
        at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:181)
        at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:70)
        at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101)
        at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
        at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:842)
        at org.jboss.weld.injection.ParameterInjectionPointImpl.getValueToInject(ParameterInjectionPointImpl.java:76)
        at org.jboss.weld.injection.ConstructorInjectionPoint.getParameterValues(ConstructorInjectionPoint.java:150)
        at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:75)
        at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28)
        at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:116)
        at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:180)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:158)
        at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:70)
        at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101)
        at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
        at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:842)
        at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
        at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:378)
        at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:389)
        at org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:70)
        at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
        at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:72)
        at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:121)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:159)
        at org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:70)
        at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101)
        at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
        at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
        at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:842)
        at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
        at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:378)
        at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:389)
        at org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:70)
        at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
        at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:72)
        at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:121)
        at org.jboss.resteasy.cdi.JaxrsInjectionTarget.inject(JaxrsInjectionTarget.java:44)
        at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:159)
        at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
        at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101)
        at org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.get(ContextualInstanceStrategy.java:178)
        at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
        at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99)
        at org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125)
        at np.com.drose.parkgarau.interceptors.RequestInterceptor$Proxy$_$$_WeldClientProxy.filter(Unknown Source)
        at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:133)
    

0 个答案:

没有答案
相关问题