【问题标题】:Unable to Inject CDI Bean with rest Easy无法使用 rest Easy 注入 CDI Bean
【发布时间】:2014-12-07 00:58:36
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2014-06-02
      • 2011-09-19
      • 2016-06-15
      • 2015-04-15
      • 2015-02-12
      • 1970-01-01
      相关资源
      最近更新 更多