我有一个ExceptionMapper定义如下
@Provider
public class MyExceptionMapper implements ExceptionMapper<Throwable> {
@Inject
private Manager myManager;
@Override
public Response toResponse(Throwable exception) {
// My implementation
}
}
在glassfish 4上部署此代码的结果如下:
org.glassfish.hk2.api.UnsatisfiedDependencyException:
There was no object available for injection at
Injectee(requiredType=Manager,parent=MyExceptionMapper,qualifiers {}),position=-1,optional=false,self=false,unqualified=null,955636053)
当我使用@Context而不是@Inject时,我没有看到异常,但myManager为null 我尝试将MyManager设为@ManagedBean,@ Singleton或EJB(无状态,单例)和非工作
答案 0 :(得分:0)
在JEE6(使用glassfish 3)中,您必须添加
@javax.annotation.ManagedBean
到提供者实现。可能这也适用于Glassfish 4
据我所知,这个问题来自以下几点。默认情况下,CDI不适用于管理restful服务和提供程序的依赖项。但是在添加@ManagedBean时,您可以启用CDI来创建实例。
这是一个example我在那里使用球衣将CDI引入了一个宁静的服务。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用OmniFaces Beans
在ExceptionMapper
中获取CDI托管bean实例:
Beans.getInstance(Bean.class)
我在包含@javax.ejb.Stateless
的{{1}} bean中使用它。