谷歌云端点和guice

时间:2014-05-17 01:54:01

标签: guice google-cloud-endpoints

我无法使用Google guice获取谷歌云端点。从端点库中可用的类看来,这应该是可能的,但我不清楚如何连接它,我看不到任何文档。

显然was a solution,但从那时起API似乎发生了变化。

我尝试扩展com.google.api.server.spi.guice.SystemServiceModule,覆盖configure()和getServiceClasses(),并实现GuiceServletContextListener。

调用GuiceServletContextListeneris上的getInjector()方法,因此调用SystemServiceModule上的configure()方法,但从不调用" getServiceClasses()方法。调用服务时,服务类没有注入任何依赖项。

有人知道如何正确连线吗?

2 个答案:

答案 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://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/appengine/endpoints-frameworks-v2/guice-example

附带文件: https://cloud.google.com/endpoints/docs/frameworks/java/using-guice

相关问题