簡體   English   中英

RESTEasy Guice提供商

[英]RESTEasy Guice Provider

我在嘗試使用帶有ContainerRequestFilter的Guice時遇到一個小問題,它會拋出一個NullPointerException。 我對RESTEasy進行了一些挖掘,看起來由於@Context注釋不存在而無法找到MyFilter的構造函數,因此在嘗試實例化null構造函數時會拋出NullPointerException。

我的過濾器:

@Provider
@PreMatching
public class MyFilter implements ContainerRequestFilter {
    private Dependency d;

    @Inject
    public MyFilter(Dependency d) {
        this.d = d;
    }

    @Override
    public void filter(ContainerRequestContext containerRequestContext) throws IOException {
        if (d.doSomething()) {
            Response r = Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
            containerRequestContext.abortWith(r);
        }
    }
}

我已經將過濾器添加到我的Application類:

@ApplicationPath("")
public class Main extends Application {
    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> c = new HashSet<Class<?>>();

    public Main() {
        c.add(Dependency.class);
    }

    @Override
    public Set<Class<?>> getClasses() {
        return c;
    }

    @Override
    public Set<Object> getSingletons() {
        return singletons;
    }
}

我的Guice配置:

public class GuiceConfigurator implements Module {
    public void configure(final Binder binder) {
        binder.bind(Dependency.class);
    }
}

我的web.xml:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>My App</display-name>

    <context-param>
        <param-name>resteasy.guice.modules</param-name>
        <param-value>com.example.GuiceConfigurator</param-value>
    </context-param>

    <listener>
        <listener-class>
          org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener
        </listener-class>
    </listener>
</web-app>

此配置用於將依賴項注入資源,但在嘗試在提供程序上使用時會出現NullPointerException。

任何幫助,將不勝感激。

即使使用RESTeasy / JAX-RS組件,您仍然需要使用Guice活頁夾注冊它。 我一開始並不確定,但是看一下測試用例 ,似乎我們仍然需要向Guice注冊我們的資源和提供程序才能使它工作。

我在將過濾器添加到Guice模塊后測試它,它按預期工作。

public class GuiceConfigurator implements Module {
    public void configure(final Binder binder) {
        binder.bind(MyFilter.class);
        binder.bind(Dependency.class);
    }
}

為了測試,我從RESTeasy項目中刪除示例 ,添加了一個帶構造函數注入的過濾器,並將過濾器添加到模塊綁定器中。 它在將過濾器添加到模塊時起作用,在未添加時失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM