首页 文章

谷歌 Cloud endpoints 和guice

提问于
浏览
1

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

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

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

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

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

2 回答

  • 1

    使用guice endpoints 的关键是使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

    对于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

相关问题