我有我的休息服務中的一類生產企業,其就是如此執行類:如何注入的HttpServletRequest或會話從CDI
public class WebResources{
@Produces
@RequestScoped
public FacesContext produceFacesContext() {
return FacesContext.getCurrentInstance();
}
@Produces
public Logger produceLog(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
}
現在,我希望生產礦井的目的是通過使用HttpServletRequest的或HttpSession作爲參數。是這樣的:
@Produces
@RequestScoped
public MyObject getSecurityContext(InjectionPoint injectionPoint)
{
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
return Utils.getMyObject(request);
}
我接收上部署階段的錯誤是以下內容:
ERROR [org.jboss.as.cli.CommandContext] { 「JBAS014671:無法服務」=> { 「jboss.deployment.unit。\」zuora.ear \「。WeldStartService」=>「service jboss.deployment.unit。\」zuora.ear \「中的org.jboss.msc.service.StartException。WeldStartService:無法啓動服務 引起:org.jboss.weld.exceptions.DefinitionException:WELD-001406無法注入[method]的[參數1] @Produces @RequestScoped public it.infocert.zuora.rest.util.WebResources.getSecurityContext(InjectionPoint)in一個非@依賴「JBAS014671:失敗的服務」=> {「jboss.deployment.unit。\」zuora.ear \「。WeldStartService」=>「org.jboss.msc.service.StartException in service jboss.deployment .unit。\「zuora.ear \」。WeldStartService:啓動服務失敗 引起:org.jboss.weld.exceptions.DefinitionException:WELD-001406無法注入[method] @Produces @RequestScoped的[parameter 1] public it .info
據我所知,沒有辦法通過單獨使用Weld來注入請求,我知道和使用的方式是deltaspike的RequestResponseHolderFilter。通過使用這個過濾器,你可以用限定符@Deltaspike注入HttpRequest。有關更多信息,請參閱https://deltaspike.apache.org/documentation/servlet.html。如果你不想/可以使用deltaspike,你可以查看它的servlet模塊源代碼。這很簡單。您需要獲取每個請求並將其保存在ThreadLocal變量中。 – temaleva
順便說一句:你可以注入'HttpServletRequest' CDI> = 1.1 – chkal