我似乎无法通过 @EJB
或 @Inject
将任何内容注入(inject) Jersey。当我在 FilterFactory 中使用 @EJB/@Inject 时,该字段保持为空,但注入(inject)其他 bean 效果很好。
我可以使用FIlterFacory的@Context成功注入(inject)。
我在这里缺少什么?
public class FilterFactory implements ResourceFilterFactory{
@EJB
private MyFilter myFilter ;
@Override
public List<ResourceFilter> create(AbstractMethod am) {
List<ResourceFilter> filters = new ArrayList<ResourceFilter>();
filters.add(myFilter);
return filters;
}
我的 web.xml 的一部分:
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>com.jea.openxchange.rest.filter.FilterFactory</param-value>
</init-param>
我的过滤器
@Stateless
public class MyFilter implements ResourceFilter,ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
//todo
return response;
}
@Override
public ContainerRequestFilter getRequestFilter() {
return null;
}
@Override
public ContainerResponseFilter getResponseFilter() {
return this;
}
}
最佳答案
这可能是 Jersey 如何创建 FilterFactory 实例的问题。如果它不是由容器创建的,CDI 将无法工作,@EJB
也将无法工作。根据 Java EE6 CDI 规范,由 new 或反射创建的对象不受管理,因此不会发生注入(inject)。新的 CDI 规范将解决这个问题。
关于java - 如何将 EJB 注入(inject) ResourceFilterFactory ( Jersey ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584168/