CDI problema InjectionPoint @httpparam
Pregunta
sigo el doc de Weld
en la sección 4.11. El objeto InjectionPoint
Hay un ejemplo muy interesante acerca de cómo obtener el parámetro HTTP usando CDI
pero copiar y pegar el código en NetBeans, todo se compila, pero tiene un error de implementación
Causado por: org.jboss.weld.exceptions.DeploymentException: Weld-001 408 Punto de inyección tiene dependencias insatisfechas. punto de inyección: parámetro 1 de java.lang.String com.test.HttpParamProducer.getParamValue (javax.enterprise.inject.spi.InjectionPoint, javax.servlet.ServletRequest); Calificadores: [@ javax.enterprise.inject.Default ()]
cómo resolver este problema ???
public class HttpParamProducer {
@HttpParam("")
@Produces
String getParamValue(
InjectionPoint ip, ServletRequest request) {
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
Solución 2
parece que después de dos años, esta cuestión todavía está interesada
Este es un breve venida de la especificación CDI, donde no se requiere el contenedor para exponer HttpServletRequest como frijol inyectable
aquí es un trabajo razonable en torno
@WebListener
public class HttpServletRequestProducer implements ServletRequestListener {
private final static ThreadLocal<HttpServletRequest> holder = new ThreadLocal<HttpServletRequest>();
@Override
public void requestDestroyed(ServletRequestEvent sre) {
holder.remove();
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
holder.set((HttpServletRequest)sre.getServletRequest());
}
@Produces @RequestScoped HttpServletRequest get() {
return holder.get();
}
}
Ahora @Inject HttpServletRequest va a trabajar como se esperaba
feliz de codificación
Otros consejos
se inyecta cada parámetro en un método de productor, y ninguno de sus granos (incluyendo productores) proporciona la ServletRequest tipo API para satisfacer este punto de inyección.