2017-10-14 72 views
1

我正在迁移我的GAE Java应用到Google Cloud Endpoints 2.0。我遵循迁移指南(https://cloud.google.com/endpoints/docs/frameworks/legacy/v1/java/migrating)迁移到Endpoints v2.0。迁移到云终端2.0 - 使用本地主机但不使用App Engine

端点服务调用在本地主机上工作,但在上传到App Engine时返回404(未找到)。我正在使用Guice。

从我的web.xml中的相关章节看起来与此类似:

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

<listener> 
    <listener-class>com.xyz.myapp.server.guice.MyAppGuiceServletContextListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>EndpointsServlet</servlet-name> 
    <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class> 
    <init-param> 
    <param-name>services</param-name> 
    <param-value>com.xyz.myapp.server.endpoints.MyEP1,com.xyz.myapp.server.endpoints.MyEP2</param-value> 
    </init-param> 
</servlet> 

<servlet-mapping> 
    <servlet-name>EndpointsServlet</servlet-name> 
    <url-pattern>/_ah/api/*</url-pattern> 
</servlet-mapping> 

MyAppGuiceServletContextListener.java

public class MyAppGuiceServletContextListener extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new GuiceServletModule(), new EPServletModule()); 
    } 
} 

EPServletModule.java

public class EPServletModule extends EndpointsModule { 
    @Override 
    protected void configureServlets() { 
     super.configureServlets();  
     Set<Class<?>> serviceClasses = new HashSet<Class<?>>(); 
     serviceClasses.add(MyEP1.class); 
     serviceClasses.add(MyEP2.class); 
     configureEndpoints("/_ah/api/*", serviceClasses);  
    } 
} 

GuiceServletModule:

public class GuiceServletModule extends ServletModule { 
    @Override 
    protected void configureServlets() { 
    super.configureServlets(); 
    serve("/myapp/servlet1").with(Servlet1.class); 
    serve("/myapp/servlet2").with(Servlet2.class); 
    } 
} 

我能够在路径调用标准的servlets:

https://[version]-dot-myapp-id.appspot.com/myapp/servlet1 

https://[version]-dot-myapp-id.appspot.com/myapp/servlet2 

但我不能够访问端点。它总是返回404错误代码。我尝试通过我的Javascript客户端,并通过API浏览器,并获得相同的错误。

我也查了日志和奇怪的日志显示这样的POST请求:

"POST /_ah/spi/com.xyz.myapp.server.endpoints.MyEP1.myEPMethod HTTP/1.1" 404 

为什么它开始/ _ah/SPI /当我的客户是通过/ _ah/API调用它/?

注意:我可以调用部署在同一应用的不同版本上的Endpoints 1.0,而不会出现任何问题。但终结点2.0版本不起作用。

我错过了什么吗?

我也有一个非常基本的问题。我的客户是基于Javascript的。它真的使用发现文档吗?

回答

0

我通过更新Android Studio到最新版本并更新SDK来解决此问题。

+0

我没有使用Android Studio。但是我被GCE团队告知,他们已经做了一些事情来解决问题。我还没有时间去测试它。 – DFB

相关问题