【问题标题】:CDI injection with ExceptionMapper- @inject null使用 ExceptionMapper-@inject null 进行 CDI 注入
【发布时间】:2016-03-28 17:52:01
【问题描述】:

我有以下异常映射器:

 @Provider
 public class GenericExceptionMapper 
 implements ExceptionMapper<Exception> {
 @Inject
 private ExceptionDAO exceptionDAO;

@Override
public Response toResponse(Exception e) {
    LOGGER.error(e.getMessage(), e);
    return Response.status(INTERNAL_SERVER_ERROR)
            .type(MediaType.TEXT_PLAIN)
            .entity(e.getMessage())
            .build();
}

exceptionDAO 始终为空。我有一个 beans.xml

 <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://java.sun.com/xml/ns/javaee"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="  http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee /beans_1_0.xsd"
></beans>

我尝试过注入很多类,但它们总是显示为空。

【问题讨论】:

  • 您的项目中是否有 CDI 工作?这是什么类型的项目(EAR、WAR 等)? beans.xml 具体在哪里? ExceptionDAO是怎么注解的?
  • 哦,还有一些问题:GenericExceptionMapper 有注释吗?你怎么得到一个?
  • 它是一个 JAR 项目。是的,CDI 正在其他项目中工作
  • 在 src/main/resources 中的 META-INF 内部
  • 你只回答了我的一半问题,所以让我明确一点:CDI 注入只能在 CDI 感知 bean 中工作。例如,如果这是一个 REST 资源,您将对其进行注释 @RequestScoped,然后注入将起作用。我建议你用@RequestScoped 注释你的GenericExceptionMapper,看看是否可行。

标签: java cdi code-injection inject provider


【解决方案1】:

被管理的类 (ExceptionDAO) 和注入它的类都需要 CDI 感知。在这种情况下,这可能涉及使用@RequestScoped(或其他 CDI 正常范围)标记 both 类。

不要去掉 @Provider 或其他 JAX-RS 注释;只需添加 CDI 注释即可。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2020-12-04
    相关资源
    最近更新 更多