0

我似乎无法通过泽西岛@EJB@Inject向泽西岛注射任何东西。当我在 FilterFactory 中使用 @EJB/@Inject 时,该字段仍然为空,但注入其他 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;
    }  
}
4

1 回答 1

1

这可能是 Jersey 如何创建FilterFactory. 如果它不是由容器创建的,CDI 将不起作用,@EJB也不会。根据 Java EE6 CDI 规范,由 new 或反射创建的对象不受管理,因此不会发生注入。新的 CDI 规范将解决这个问题。

于 2012-11-27T12:30:34.850 回答