我似乎无法通过@EJB
或@Inject
向泽西岛注入任何内容。当我在FilterFactory中使用@ EJB / @Inject时,该字段保持为null,但是注入其他bean工作正常。
我可以使用@Context成功注入FIlterFacory。
我在这里缺少什么?
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;
}
}
答案 0 :(得分:1)
这可能是Jersey如何创建FilterFactory
实例的问题。如果它不是由容器创建的,则CDI将不起作用,@EJB
也不会。根据Java EE6 CDI规范,由new或反射创建的对象不受管理,因此不会发生注入。新的CDI规范将解决这个问题。