RESTEasy Guice Provider
在试图将Guice和ContainerRequestFilter一起使用时,我遇到了一个小问题,它引发了一个NullPointerException异常。 我对RESTEasy进行了一些探索,由于@Context注释不存在,它似乎找不到MyFilter的构造函数,尝试实例化一个空构造函数时抛出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);
}
}
}
我已将筛选器添加到我的应用程序类中:
@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项目中删除了示例,添加了构造函数注入的过滤器,并将过滤器添加到模块联编程序中。 并且在向模块添加过滤器时有效,未添加时失败。
链接地址: http://www.djcxy.com/p/91281.html下一篇: how to make RMSE(root mean square error) small when use ALS of spark?