0

@EJBジャージーを介して、またはジャージーに何かを注入できないようです@Inject。FilterFactory で @EJB/@Inject を使用すると、フィールドは null のままですが、他の Bean への注入は正常に機能します。

FIlterFacoryに@Context を使用して正常に注入できます。

ここで何が欠けていますか?

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

This might be the issue of how Jersey creates an instance of FilterFactory. If it is not created by container, CDI will not work and @EJB will not also. As per Java EE6 CDI spec objects created by new or by reflection are not managed and thus no injection occures. New CDI spec will address this issue.

于 2012-11-27T12:30:34.850 に答える