首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移到云端点2.0 -在本地主机上工作,但不在App Engine上工作

迁移到云端点2.0 -在本地主机上工作,但不在App Engine上工作
EN

Stack Overflow用户
提问于 2017-10-14 23:03:34
回答 1查看 100关注 0票数 1

我正在将我的GAE Java应用程序迁移到Google Cloud Endpoints 2.0。我遵循迁移指南(https://cloud.google.com/endpoints/docs/frameworks/legacy/v1/java/migrating)迁移到Endpoints v2.0。

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

我的web.xml中的相关部分如下所示:

代码语言:javascript
复制
<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

代码语言:javascript
复制
public class MyAppGuiceServletContextListener extends GuiceServletContextListener { 
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new GuiceServletModule(), new EPServletModule());
    }
}

EPServletModule.java

代码语言:javascript
复制
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:

代码语言:javascript
复制
public class GuiceServletModule extends ServletModule {
    @Override
    protected void configureServlets() {
    super.configureServlets();
    serve("/myapp/servlet1").with(Servlet1.class);
    serve("/myapp/servlet2").with(Servlet2.class);
    }
}

我可以在以下路径调用常规的servlet:

代码语言:javascript
复制
https://[version]-dot-myapp-id.appspot.com/myapp/servlet1

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

但我无法访问端点。它总是返回404错误代码。我尝试通过我的Javascript客户端,也通过API资源管理器,并得到相同的错误。

我还检查了日志,奇怪的是,日志显示POST请求如下所示:

代码语言:javascript
复制
"POST /_ah/spi/com.xyz.myapp.server.endpoints.MyEP1.myEPMethod HTTP/1.1" 404

当我的客户端通过/_ah/api/调用它时,为什么它以/_ah/spi/开头?

注意:我可以调用Endpoints 1.0,它部署在同一个应用程序的不同版本上,没有任何问题。但是Endpoints 2.0版本不起作用。

我是不是遗漏了什么?

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

EN

回答 1

Stack Overflow用户

发布于 2018-02-03 22:14:45

我通过将Android Studio更新到最新版本并更新SDK修复了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46745954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档