【发布时间】:2018-11-22 14:21:07
【问题描述】:
我试图在我的依赖范围类中注入 ServletContext,但它总是失败。
java.lang.IllegalStateException: No CXF message usable for JAX-RS @Context injections in that thread so can't use interface javax.servlet.ServletContext
我无法理解为什么我不能在这里注入它的原因。我正在使用生产者方法,当在生产者方法内部时,我尝试访问 ServletContext obj 然后它给出了上述异常。我还检查了 Injected servlet 上下文是否为空,但它不为空。但是当我使用它调用任何方法时,例如sc.getContextPath() 它会给出上述异常。下面是sn-p的代码:
@Dependent
public class AuthContexthandler {
@Context
ServletContext sc;
@Produces
JWTAuthContextInfo getInfo() {
try{
System.out.println(sc.getContextPath()); //here I get the above mentioned error
//rest of the code
}catch(Exception e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
我认为,如果你使用注入注解而不是上下文注解,它会起作用
-
是的,确实如此。将其发布为答案,但您能解释一下为什么会这样吗?我完全迷失在 CDI 概念中!!
-
当我学习 CDI 和 JAX-RS 时,我也对依赖注入 (DI) 概念感到非常困惑,直到我发布 JAX-RS 有自己的 DI 机制,它使用与 CDI 不同的注释。这导致应用程序具有由 JAX-RS 管理的 bean 和由 CDI 管理的其他 bean。由于两个框架都使用不同的注解来标记 bean 和注入点,因此您需要确保使用正确的注解。在您的示例中,
AuthContextHandler类是 CDI bean(因为@Dependent注释),而@Context标记 JAX-RS 注入点。 -
@ChristophBöhme 现在有意义了!!解释得很好。
标签: dependency-injection jax-rs cdi