Ответ 1
Оказывается, существует GuiceSystemServiceServletModule, который обрабатывает именно это.
public class GuiceSSSModule extends GuiceSystemServiceServletModule {
@Override
protected void configureServlets() {
super.configureServlets();
Set<Class<?>> serviceClasses = new HashSet<Class<?>>();
serviceClasses.add(MyEndpoint.class);
serviceClasses.add(AnotherAndpoint.class);
this.serveGuiceSystemServiceServlet("/_ah/spi/*", serviceClasses);
}
}
Включите этот модуль в конструкцию Injector в ServletContextListener:
public class MyGSCL extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new GuiceSSSModule(), new BaseModule());
}
}
и используйте этот прослушиватель в вашем web.xml:
<listener>
<listener-class>de.mypkg.MyGSCL</listener-class>
</listener>
Также включите фильтр Guice в свой web.xml:
<!-- GUICE -->
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Ваши конечные точки будут доступны снова в /_ah/api/..., и вы можете использовать @Inject в своих классах конечных точек.