【发布时间】: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