Java HttpServletRequest的注入
我正在使用EJB3并尝试@InjectHttpServletRequest,但在部署时出现异常 代码: 例外情况:Java HttpServletRequest的注入,java,dependency-injection,ejb,jboss7.x,Java,Dependency Injection,Ejb,Jboss7.x,我正在使用EJB3并尝试@InjectHttpServletRequest,但在部署时出现异常 代码: 例外情况: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [HttpServletRequest] with qualifiers [@Default] at injection point [[field] @Inject private com.kmw
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [HttpServletRequest] with qualifiers [@Default] at injection point [[field] @Inject private com.kmware.ttk.highway.beans.session.UserSessionBean.httpRequest]
我该怎么办?HttpServletRequest的生命周期由EJB/web容器管理,而不是由CDI容器管理。尝试注入会导致问题,因为接口通常有许多实现,并且您的CDI容器没有足够的信息来决定要注入哪个实现。即使您成功地注入了它的一个实例,它也不会是由EJB容器管理的同一个实例 要获取正确管理的请求实例,请执行以下操作:
@Context
private HttpServletRequest httpRequest;
如果您的依赖项是JAX-RS(Restful)类,请注意上面的答案。另一方面,如果您有一个更复杂的依赖注入安排,那么这个问题肯定是正确的 此功能已添加到CDI1.1规范(JSR-346)中,该规范又添加到新的JavaEE7规范中。换句话说,最新的Java企业应用服务器将能够处理这个问题 同时,如果您需要能够管理某些请求范围依赖项,这些依赖项实际上需要访问实际的HttpServletRequest信息,那么您可以使用您的方法和工具。(如果网站看起来不存在,请不要惊慌,事实是工作已经转移到官方的CDI 1.1规范实施中,即“Weld 2”-因此他们不再进行焊接工作。但它仍然非常适合CDI 1.0。) maven依赖项将是
<dependency>
<groupId>org.jboss.solder</groupId>
<artifactId>solder-api</artifactId>
<version>3.2.0.Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jboss.solder</groupId>
<artifactId>solder-impl</artifactId>
<version>3.2.0.Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
org.jboss.org
焊料原料药
3.2.0.1最终版本
罐子
编译
org.jboss.org
焊料注入
3.2.0.1最终版本
罐子
编译
你的意思是@javax.ws.rs.core.Context吗?@KirillBazarov-是的,这就是要使用的注释。@KirillBazarov-这解决了你的问题吗?如果是,请随意投票/接受这个答案。谢谢。应该注意的是,@Context
只在JAX-RSWebService类中起作用,在EJB类中肯定不起作用。也许OP实际上碰巧也在使用JAX-RS,尽管问题中没有提到这一点。因此,这个答案乍一看是完全盲目的猜测和无知的猜测,毕竟是一次幸运的尝试。不,当您在一个web服务实现中工作了一年后,您可能会意识到其他人在这个过程中遇到了与您早期相同的问题。
<dependency>
<groupId>org.jboss.solder</groupId>
<artifactId>solder-api</artifactId>
<version>3.2.0.Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jboss.solder</groupId>
<artifactId>solder-impl</artifactId>
<version>3.2.0.Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>