【问题标题】:Google Cloud Endpoints files generated, server not working生成了 Google Cloud Endpoints 文件,服务器无法正常工作
【发布时间】:2013-06-03 18:26:26
【问题描述】:

我运行 endpoints.sh get-client-lib com.my.app.FooService 并成功生成了 Google Cloud Endpoints[1] 的文件(2 个 .discovery 文件、1 个 .api 文件和 1 个 .zip 文件)。

该脚本没有向我的war 文件夹添加任何内容,因此我假设 服务器端已经由web.xml@Api 注释中配置的魔法处理(a'la Spring框架)。

但是http://localhost:8080/_ah/api/explorer 将我重定向到一个空白的谷歌云控制台。上传我的应用会产生相同的结果。

我错过了什么吗?我认为文档有点缺乏,它甚至没有解释生成的文件的用途。

我正在使用 Google App Engine Java。

[1]https://developers.google.com/appengine/docs/java/endpoints/gen_clients

【问题讨论】:

  • 生成的.api 文件应该出现在你的战争中。你能分享你的项目目录布局以及你用来生成文件的完整命令吗?

标签: google-app-engine google-cloud-endpoints


【解决方案1】:

要使端点正常工作,需要按照 Google GAE 页面中所述的步骤进行操作

  1. 首先编写您的 API 后端代码。

  2. 注释您的 API 后端代码,以便从中生成类和客户端库。 (或者,使用 Google Plugin for Eclipse,它会自动为您添加注释。)

  3. 使用 endpoints.sh 实用程序生成客户端库。 (或者,使用 Google Plugin for Eclipse 生成客户端库。)

  4. 编写您的客户端应用程序,在调用 API 后端时使用客户端库。

但是上面的步骤遗漏了一些重要的步骤,Google Plugins(Google Plugin for Eclipse)会自动为你生成。

  1. 在您的 web.xml 中配置 servlet。 (将 your-full-class-name 替换为您自己的班级名称)

    <servlet>
        <servlet-name>com.google.api.server.spi.SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>your-full-class-name</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>com.google.api.server.spi.SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>
    
  2. 您需要确保将 endpoints.sh 生成的文件 (.api) 复制到您的 Web 应用根文件夹中的文件夹 WEB-INF 中。

为了更好地理解,您可以调用 endpoints.sh 来查看所有可用选项,如下所示

可用命令: get-client-lib:生成客户端库 用法:get-client-lib ... 选项: --classpath=CLASSPATH 附加的类路径条目 -cp CLASSPATH(默认值:./war/WEB-INF/classes)。 --language=LANGUAGE 目标输出编程语言 -l 语言(java)(默认值:java)。 --output=OUTPUT_DIR 存放输出文件的目录 -o OUTPUT_DIR(默认值:./)。 --war=WAR_PATH 目录的路径或带有 WAR 的 .war -w WAR_PATH 目录布局(默认:./war)。 gen-api-config:从服务类生成 API 配置文件 用法:gen-api-config ... 选项: --classpath=CLASSPATH 附加的类路径条目 -cp CLASSPATH(默认值:./war/WEB-INF/classes)。 --output=OUTPUT_DIR 存放输出文件的目录 -o OUTPUT_DIR(默认值:./)。 --war=WAR_PATH 目录的路径或带有 WAR 的 .war -w WAR_PATH 目录布局(默认:./war)。 gen-discovery-doc:生成 API 发现文档 用法:gen-discovery-doc 选项: --format=FORMAT 请求的 API 协议类型 (rest|rpc) -f 格式(默认值:休息)。 --output=OUTPUT_DIR 存放输出文件的目录 -o OUTPUT_DIR(默认值:./)。 gen-client-lib:生成客户端库 用法:gen-client-lib 选项: --language=LANGUAGE 目标输出编程语言 -l 语言(java)(默认值:java)。 --output=OUTPUT_DIR 存放输出文件的目录 -o OUTPUT_DIR(默认值:./)。

然后您可以在资源管理器 UI 中查看服务,如下所示。

  • 当你访问http://localhost:8080/_ah/api/explorer时,会先重定向到developers.google.com .但内容来自本地主机。

  • 您始终可以依赖普通的 Google APE 本地开发服务器。例如 IntelliJ Google APE 插件启动 Google APE 本地服务器也可以支持“_ah/api/explorer”访问

【讨论】:

    【解决方案2】:

    正如 Dan Holevoet 在评论中提到的,脚本需要从 war 运行。至于我的情况,我只需要将文件复制到该目录中即可。

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 2014-06-11
      • 1970-01-01
      • 2014-03-13
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 2017-01-16
      相关资源
      最近更新 更多