使用Google Eclipse插件干扰Google Cloud Endpoints

使用Google Appengine Eclipse插件生成端点时,我遇到了一种奇怪的行为。 我有一个端点类,有超过20个端点方法。 当我第一次尝试为android生成端点时,我得到了错误

Generating Cloud Endpoint has encountered errors and is not complete 

通过故障排除,我注释掉所有找到罪魁祸首的方法。 我发现有点莫名其妙。 取消注释第16个方法后,我再次收到错误。 有两种方法相互干扰! 如果我注释掉一个或另一个端点生成正常。 但如果我同时取消注释,我会得到上面的错误。

有谁知道可能导致这种干扰的原因是什么?

 @ApiMethod(name = "getOrangers", httpMethod = HttpMethod.POST) public FaceList getOrangers(UserRequest request) throws NotFoundException { FaceList list = new FaceList(); return list; } @ApiMethod(name = "getMangoers", httpMethod = HttpMethod.POST) public FaceList getMangoers(UserRequest request) throws NotFoundException { FaceList list = new FaceList(); return list; } 

我已经将方法编辑到它们的存根,如上所示,仍然会遇到相同的干扰问题。

首先,当您收到有关令人讨厌的不良消息的错误时:

生成Cloud Endpoint遇到错误但未完成

你应该检查Window -> Show View -> Error Log下的Window -> Show View -> Error Log以获取更多信息。


我这样做了,我发现实际的例外是:

 java.lang.IllegalArgumentException: Multiple methods with same rest path "POST facelist": "getOrangers" and "getMangoers" 

所以,问题是你的2种方法有相同的路径 ! 明确添加方法的路径将解决问题:

 @ApiMethod(name="getOrangers", path="get_oranges", httpMethod=HttpMethod.POST) public FaceList getOrangers(UserRequest request) throws NotFoundException { //... } @ApiMethod(name="getMangoers", path="get_mangoers", httpMethod=HttpMethod.POST) public FaceList getMangoers(UserRequest request) throws NotFoundException { //... } 

注意 :由于您没有为方法设置路径,因此GPE会自动生成它们。 似乎GPE为这两种方法生成相同的路径,用于形成HTTP方法( POST )和返回值( facelist )的路径,这与Google Cloud Endpoints文档中的内容不一致:

path :用于访问此方法的URI路径。如果未设置此路径,则根据Java 方法名称使用默认路径。”

它表示使用方法名称自动生成路径,在这种情况下,您不会收到任何错误,因为您的2种方法明显有不同的名称。 所以我想它一定是端点中的一个bug(和许多其他人一样)。