我无法使用Google guice获取谷歌云端点。从端点库中可用的类看来,这应该是可能的,但我不清楚如何连接它,我看不到任何文档。
显然was a solution,但从那时起API似乎发生了变化。
我尝试扩展com.google.api.server.spi.guice.SystemServiceModule,覆盖configure()和getServiceClasses(),并实现GuiceServletContextListener。
调用GuiceServletContextListeneris上的getInjector()方法,因此调用SystemServiceModule上的configure()方法,但从不调用" getServiceClasses()方法。调用服务时,服务类没有注入任何依赖项。
有人知道如何正确连线吗?
答案 0 :(得分:1)
使用guice端点的关键是使servlet映射正确。试试
public class YourGuiceListener extends GuiceServletContextListener {
static class ServletModule extends GuiceSystemServiceServletModule {
@Override
protected void configureServlets() {
super.configureServlets();
Set<Class<?>> serviceClasses = new HashSet<Class<?>>();
serviceClasses.add(YourEndpointsService1.class);
serviceClasses.add(YourEndpointsService2.class);
this.serveGuiceSystemServiceServlet("/_ah/spi/*", serviceClasses);//endpoints servlet mapping
...
}
}
public static class InjectionModule extends AbstractModule {
@Override
protected void configure() {
bind... //optional bindings
}
}
}
将Guice侦听器和过滤器添加到web.xml
<listener><listener-class>package.YourGuiceListener</listener-class></listener>
<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>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
答案 1 :(得分:1)
对于Endpoints Framework v2,您可以扩展EndpointsModule。
将此依赖项添加到项目中:
<dependency>
<groupId>com.google.endpoints</groupId>
<artifactId>endpoints-framework-guice</artifactId>
<version>2.0.9</version>
</dependency>
并像这样扩展模块:
public class EchoEndpointModule extends EndpointsModule {
@Override
public void configureServlets() {
super.configureServlets();
bind(Echo.class).toInstance(new Echo());
configureEndpoints("/_ah/api/*", ImmutableList.of(Echo.class));
}
}
完整示例:
附带文件: https://cloud.google.com/endpoints/docs/frameworks/java/using-guice