У меня есть класс, которые выполняют как производители класса в пределах моих остальных услуг, которые так сделали:Как придать HttpServletRequest или Session из 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: Failed услуги" => { "jboss.deployment.unit. \" zuora.ear \ ". WeldStartService" => "org.jboss.msc.service.StartException в сервисе jboss.deployment.unit. \" zuora.ear \ ". WeldStartService: не удалось запустить service Вызвать: org.jboss.weld.exceptions.DefinitionException: WELD-001406 Невозможно ввести [параметр 1] из [метода] @Produces @RequestScoped public it.infocert.zuora.rest.util.WebResources.getSecurityContext (InjectionPoint) в не-зависящий scomb bean "}} {" JBAS014671: Failed services "=> {" jboss.deployment.unit. \ "zuora.ear \". WeldStartService "=>" org.jboss.msc.service.StartException в службе jboss.deployment .unit. \ "zuora.ear \". WeldStartService: Не удалось запустить службу Вызвано: org.jboss.weld.exceptions.DefinitionException: WELD-001406 Невозможно ввести [параметр 1] из [метода] @Produces @RequestScoped public it .info
Как я знаю, нет никакого способа ввести запрос с использованием только Weld. То, как я знаю и использую, это RequestResponseHolderFilter из deltaspike. С помощью этого фильтра вы можете ввести HttpRequest с квалификатором @Deltaspike. Для получения дополнительной информации см. Https://deltaspike.apache.org/documentation/servlet.html. Если вы не хотите/не можете использовать deltaspike, вы можете посмотреть его исходный код модуля сервлета. Это довольно просто. Вам нужно получить каждый запрос и сохранить его в переменной ThreadLocal. – temaleva
BTW: Вы можете ввести 'HttpServletRequest' с CDI> = 1.1 – chkal