眼前多少难甘事,自古男儿当自强。这篇文章主要讲述在ExceptionMapper中注入单例相关的知识,希望能为你提供帮助。
我有一个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(无状态,单身)并且不工作
答案在JEE6(使用glassfish 3)你必须添加
@javax.annotation.ManagedBean
到提供者实现。可能这也适用于Glassfish 4
据我所知,这个问题来自以下几点。默认情况下,CDI不适用于管理restful服务和提供程序的依赖项。但是在添加@ManagedBean时,您可以启用CDI来创建实例。
这是一个example,我用CDE引入CDI到一个宁静的服务。
另一答案【在ExceptionMapper中注入单例】您可以在此处关注此问题的更新https://java.net/jira/browse/JERSEY-2393
另一答案您可以使用OmniFaces
Beans
在ExceptionMapper
中获取CDI托管bean实例:Beans.getInstance(Bean.class)
我正在使用含有
@javax.ejb.Stateless
的@javax.persistence.PersistenceContext
豆。推荐阅读
- java.lang.NoSuchMethodError(org.glassfish.jersey.server.ApplicationHandler。)
- Jersey(如何注册省略某些子类的ExceptionMapper())
- 在Jersey webapp中运行Angular2应用程序
- Jersey ExceptionMapper未被调用
- 找不到模块(无法解析'./AppRoutes')
- 将Redux SubApp与React Router配合使用
- 在android中获取位置地址时出错
- 接收广播Intent时出错{act = android.location.PROVIDERS_CHANGED flg = 0x10}
- 获取当前lat长的android