无法轻松注入CDI Bean

时间:2014-12-07 00:58:37

标签: java jax-rs jboss7.x cdi resteasy

我无法在Resteasy中注入cdi bean。在调试时,它似乎总是显示空指针异常。即以下代码中的'jaxRsImpl'始终为null。我试图在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

My Initialiser看起来像

@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;
   }
}

1 个答案:

答案 0 :(得分:5)

您需要确保您的应用程序能够识别CDI。以下是一些关键要求:

  • 在JAX-RS中,不要列出你的班级/单身人士。允许容器发现它们。基本上创建一个空的Application实现。
  • 确保您拥有有效的beans.xml
  • 确保您的其他端点具有有效范围 - 例如@RequestScoped

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

相关问题