Guice - Jersey - Servlet-Bindung
Ich habe vor kurzem umgeschaltet, um zwei-Phasen-Einspritzung und dadurch entstand ein Fehler in meinem servlet verbindlich. Ich bin derzeit Umschaltung zwischen zwei Fehler-Modi und sind nicht sicher, welche Richtung ist am besten zu verfolgen.
Den ersten Fehler, den ich gestoßen war:
com.Sonne.jersey.api.container.ContainerException: Die ResourceConfig
Instanz enthält keine root-Ressource-Klassen.
Mein servlet-Modul wie folgt aussah:
public class MyServletModule extends JerseyServletModule {
@Override
protected void configureServlets() {
bind(MyServlet.class).asEagerSingleton();
serve("/*").with(GuiceContainer.class);
}
}
War ich in der Lage, entfernen Sie diese Fehler, indem Sie explizit die Bereitstellung der com.Sonne.jersey.config.Eigenschaft.Pakete-parameter.
public class MyServletModule extends JerseyServletModule {
@Override
protected void configureServlets() {
bind(MyServlet.class).asEagerSingleton();
Map<String,String> parameters = new HashMap<String, String>();
parameters.put(PackagesResourceConfig.PROPERTY_PACKAGES, MyServlet.class.getPackage().getName());
serve("/*").with(GuiceContainer.class, parameters);
}
}
Aber wenn ich das mache, Guice versucht, eine Just-in-Time-Bindung, die nicht respektieren die @Inject auf meinem servlet-Konstruktor.
com.google.injizieren.ConfigurationException: Guice Konfiguration-Fehler:
1) konnte Nicht erstellt werden, verbindlich für MyServlet. Es wurde bereits konfiguriert
auf einem oder mehreren Kind Injektoren oder private Module
gebunden an MyServletModule.configureServlets(MyServletModule.java:44), Wenn es war
in einem PrivateModule, haben Sie vergessen machen, dass das verbindlich? während
Auffinden MyServlet1 Fehler bei
com.google.injizieren.intern.InjectorImpl.getBinding(InjectorImpl.java:150)
Mein servlet hat eine @Inject Konstruktor, der Argumente nicht gebunden werden kann nur in der Zeit. Nach dem Debuggen in InjectorImpl, ich glaube, das ist der Grund, dass Dinge scheitern, wenn ich PROPERTY_PACKAGES.
Ich bin nur nicht sicher, ob mit PROPERTY_PACKAGES ist richtig, und ich brauche, um zu beheben einige Bindungen? Oder wenn, dass ist die falsche Richtung und ich muss fix die original-ResourceConfig Fehler in einer anderen Weise.
Hilfe oder einen Impuls in die richtige Richtung, wird sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage zum binden Jersey Ressourcen zu Guice, ohne mit der bind-Parameter (ohne Sie explizit die Bereitstellung der com.Sonne.jersey.config.Eigenschaft.Pakete-parameter), durch Bindung von Ressourcen getrennt
Die Ressourcen sind wie folgt
Vielleicht dies hilft Ihnen zu vermeiden, die letztere problematisch verbindlich.
Aktualisiert die Antwort für die Arbeit mit zwei-Phasen-Einspritzung auf.
GuiceContainer
. Ich extrahierten Beispiel aus dem Projekt, aus dem der obige code-Schnipsel sind. Vielleicht hilft Ihnen das problem zu lösen (wenn das problem wird dadurch verursacht, zum Beispiel durch eine version von Jersey oder Guice) Beispiel ist bei Github: github.com/reap/jetty-guice-jersey-exampleGuiceContainer
enthält nicht die Jersey-Ressource, und mir scheint, dass der Injektor gegebenGuiceContainer
ist in der Tat die Eltern-Injektor (der createad vonGuice.createInjector(new BindServicesModule())
und nicht die childInjector), weil der Injektor endet inGuiceModule
keine übergeordnete.GuiceContainer
vor der Bindung der Ressourcen. Ich aktualisiert die Beispiel in github, die funktioniert jetzt mithilfe der zwei-Phasen-Injektion (änderung ist in der eigenen Filiale zu finden). Ich auch aktualisiert, die Antwort.GuiceContainer
bevor Ressourcen, aber es muss explizit verpflichtet, in gleichen Injektor, wo die Ressourcen eingesetzt werden. Dies hat wahrscheinlich etwas zu tun mit der Art und Weise Jersey gräbt Ressource Bindungen von Injektor (es durchsucht alle Bindungen und wählt Ressourcen aus Ihnen) anstatt zu Fragen, Guice zu injizieren Sie.Java-Teil
web.xml
Unten ist meine keynote darüber, Wie Sie REST mit Guice
http://www.slideshare.net/nuboat/lightweight-javaee
Hier ist ein Artikel über, wie zu tun, die Bindung (einschließlich source code):
Umsetzung-distributed-Zähler