2014-05-17 3 views
1

Google Guice로 작업하는 Google 클라우드 엔드 포인트를 가져 오는 데 문제가 있습니다. 엔드 포인트 라이브러리에서 사용 가능한 클래스에서 이것이 가능해야하지만, 필자에게 와이어 링하는 방법이 명확하지 않으며 문서가 없습니다.Google 클라우드 엔드 포인트 및 Guice

분명히 was a solution이지만 API는 그 이후로 변경된 것으로 보입니다.

com.google.api.server.spi.guice.SystemServiceModule을 확장하여 configure() 및 getServiceClasses()를 재정의하고 GuiceServletContextListener를 구현하려고했습니다. GuiceServletContextListeneris에 getInjector() 메소드가 호출

, 따라서 SystemServiceModule의 구성() 메소드하지만 "getServiceClasses() 메소드가 호출되지 않습니다. 서비스를 호출 할 때, 서비스 클래스는 종속성 주입 없었습니다 .

이 사람을 올바르게 철사하는 방법을 알고 있나요?

답변

1

키 guice와 엔드 포인트를 사용하면 서블릿 매핑 권리를 얻는 것입니다.

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 리스너를 추가하고 웹에 필터보십시오. 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> 
+0

검색 코드 샘플을 입력하면 어떤 지점에 연결해야하는지 알 수 있습니다. – Ashish

+0

모두/모든 모듈을 제공하는 getInjector() 메소드를 구현했으며 예상대로 작동합니다. – gruntled

0

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

관련 문제