Ich habe ein kleines Problem, wenn ich versuche, Guice mit ContainerRequestFilter zu verwenden, es wirft eine NullPointerException. Ich habe ein wenig in RESTEasy gegraben und es scheint, dass es keinen Konstruktor für MyFilter finden kann, da die @Context-Annotation nicht vorhanden ist. Die NullPointerException wird ausgelöst, wenn versucht wird, einen Null-Konstruktor zu instanziieren.RESTEasy Guice Provider
Mein Filter:
@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);
}
}
}
ich den Filter in meine Anwendungsklasse hinzugefügt haben:
@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;
}
}
Meine Guice Konfiguration:
public class GuiceConfigurator implements Module {
public void configure(final Binder binder) {
binder.bind(Dependency.class);
}
}
Mein 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>
Diese Konfiguration funktioniert, um meine Abhängigkeiten in Ressourcen zu injizieren, aber ich bekomme eine NullPointerException, wenn ich versuche, sie in einem Provider zu verwenden.
Jede Hilfe wäre willkommen.
_ "RESTEasy hat eine einfache Integration mit Guice 3.0. RESTEasy wird die Binding-Typen für ein Guice-Modul nach Pfad- und Provider-Annotationen scannen. Diese Bindungen werden mit RESTEasy registriert." _ (Https://docs.jboss.org /resteasy/docs/3.0.9.Final/userguide/html/Guice1.html). Mit anderen Worten, ja, Sie müssen sie binden. – Sam