繁体   English   中英

无法轻松注入CDI Bean

[英]Unable to Inject CDI Bean with rest Easy

我无法在Resteasy中注入CDI豆。 在调试时,它似乎总是显示空指针异常。 即以下代码中的“ jaxRsImpl”始终为空。 我正在尝试在jboss EAP 6.2上运行

@Path("/jaxrs-service")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class JAXRSService {

    @Inject
    private JAXRSImpl jaxRsImpl;

    @POST
    @Path("/authenticate")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response authenticate(Credentials user) {
           return jaxRsImpl.authenticate(user);
    }

}

我打算注入的课程是

@RequestScoped
public class JAXRSImpl {
    public Response authenticate(Credentials user) {
    // Some logic

    }
}

由于我的应用程序是Web,因此我在WEB-INF文件夹中添加了beans.xml

我的初始化器看起来像

@ApplicationPath("/rest")
public class JAXRSInitializer extends Application {
   private Set<Object> singletons = new HashSet<Object>();
   private Set<Class<?>> classes = new HashSet<Class<?>>();

   public JAXRSInitializer() {
      singletons.add(new JAXRSService());
      classes.add(JAXRSImpl.class);
   }

   @Override
   public Set<Class<?>> getClasses() {
     return classes;
   }

   @Override
   public Set<Object> getSingletons() {
     return singletons;
   }
}

您需要确保您的应用程序支持CDI。 以下是一些关键要求:

  • 在JAX-RS中,请勿列出您的课程/单节。 允许容器发现它们。 基本上创建一个空的Application实现。
  • 确保您具有有效的beans.xml
  • 确保您的其余端点具有有效范围-例如@RequestScoped

第一个项目符号是关键,因为您是手动实例化服务,而不是允许容器找到它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM