4

我一直在使用 Google Cloud Endpoints (Java),但在部署到 App Engine(同时使用 Eclipse + Google Plugin 和 Android Studio)后,我无法更新 API。

我基于一个名为 Process 的类(使用 JPA 注释)创建了一个端点。它位于我的包中(比如说:com.example)。第一次部署它时,我不小心导入了错误的类(java.lang.Process 而不是我的 com.example.Process)。因此,当我在 API 资源管理器中测试其中一种方法时,我得到了这个错误:

com.google.api.server.spi.SystemService invokeServiceMethod: cause={0}
javax.persistence.PersistenceException: No meta data for java.lang.Process.  Perhaps you need to run the enhancer on this class?

然后我更正了导入,重新生成了客户端库并将应用程序重新部署到 App Engine,但我一直收到同样的错误。好像 App Engine 仍然认为我使用的是 java.lang.Process 而不是我的 Process 类。

我还进行了其他更改。像类成员变量类型和方法名一样重新部署。但 App Engine 似乎没有注意到这些变化。

我读到了 API Explorer 如何“暴力缓存”,所以我尝试清除缓存,在另一个浏览器甚至另一台 PC 上打开。依然没有。

此外,我打开了位于 https://.appspot.com/_ah/api/discovery/v1/apis//v1/rest 的 api 的发现文件,我注意到我更改的变量类型仍列为旧的类型。

我检查了我的部署日志。他们看起来都很好:

2013-07-06 18:59:59.960 /_ah/spi/BackendService.getApiConfigs 200 291ms 14kb
I 2013-07-06 18:59:59.706 com.google.api.server.spi.BackendService getApiConfigs: apiConfigDir=/base/data/home/apps/s~<my-app>/1.368601601499931812/WEB-INF
I 2013-07-06 18:59:59.707 com.google.api.server.spi.BackendService getApiConfigs: apiConfigFile=/base/data/home/apps/s~<my-app>/1.368601601499931812/WEB-INF/<my-api-name>-v1.api
I 2013-07-06 18:59:59.713 com.google.api.server.spi.BackendService getApiConfigs: apiConfigFile=/base/data/home/apps/s~<my-app>/1.368601601499931812/WEB-INF/messageEndpoint-v1
I 2013-07-06 18:59:59.740 com.google.api.server.spi.BackendService getApiConfigs: apiConfigFile=/base/data/home/apps/s~<my-app>/1.368601601499931812/WEB-INF/deviceinfoendpoint

并在管理日志中:

2013-07-06 18:59:35 <me>    Successfully updated API configuration  version=1
2013-07-06 18:59:35 <me>    Completed update of a new default version   version=1.2013-07-06T21:59:30Z
2013-07-06 18:59:32 <me>    Deployed a new version  version=1.2013-07-06T21:59:30Z

有人有什么想法吗?提前致谢。

4

1 回答 1

1

您的 .api 文件似乎没有正确重新生成。如果您删除 .api 文件,它们是否会在加载到 dev 或 App Engine 时重新生成?

使用更新信息重新创建 .api 文件的常见原因(即,我过去犯的错误):

  • 不允许使用基元和枚举。你必须传回一个 Bean。
  • API 方法没有注释
  • API 方法是“私有的”而不是“公共的”
于 2016-07-13T03:24:27.097 回答