Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Method interference in Google Cloud Endpoints with Google Eclipse Plugin

I am experiencing a strange behavior while generating endpoints using the Google Appengine Eclipse plugin. I have an endpoint class with over 20 endpoint methods. When I first tried generating the endpoints for android I get the error

 Generating Cloud Endpoint has encountered errors and is not complete

By way of troubleshooting, I comment out all the methods to find the culprits. What I found is a bit baffling. After uncommenting the 16th method, I get the error again. There are two methods that are interfering with each other! If I comment out one or the other the endpoint is generated fine. But if I have both uncommented, I get the error above.

Does anyone know what may be causing this interference?

@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;
}

I have edited the methods down to their stubs as shown above and still get the same interference problem.

like image 488
learner Avatar asked Jun 08 '13 19:06

learner


People also ask

What is ESPv2?

The Extensible Service Proxy V2 (ESPv2) is an Envoy-based proxy that enables Cloud Endpoints to provide API management features. ESPv2 replaces the NGINX-based Extensible Service Proxy (ESP). This document describes how to migrate an existing Endpoints API deployment from ESP to ESPv2.

What are Google Cloud Endpoints?

Endpoints is an API management system that helps you secure, monitor, analyze, and set quotas on your APIs using the same infrastructure Google uses for its own APIs.

How do I download Google Plugin for Eclipse?

Installing Cloud Tools for Eclipse To install the plugin: Drag the install button into your running Eclipse workspace: Or from inside Eclipse, select Help > Eclipse Marketplace... and search for Google Cloud Tools for Eclipse. Restart Eclipse when prompted.


1 Answers

Firstly, when you get an error with that annoying undescriptive message:

Generating Cloud Endpoint has encountered errors and is not complete

you should check the Error Log under Window -> Show View -> Error Log to get more info.


I did so, and I found that the actual exception is:

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

So, the problem is that your 2 methods have the same path! Adding explicitly a path for your methods will solve the problem:

@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 {
    //...
}

NOTE: As you didn't set paths for your methods, GPE is generating them automatically. It seems that GPE is generating the same path for the 2 methods, using to form the path the HTTP method (POST) and the returned value (facelist), which doesn't correspond with what is said in Google Cloud Endpoints Documentation:

"path: The URI path to use to access this method. If you don't set this, a default path is used based on the Java method name."

It says that the path is automatically generated using the method name, and in that case you'd not getting any error, since your 2 methods have obviously different names. So I guess it must be a bug (as many others) in Endpoints.

like image 167
MikO Avatar answered Sep 23 '22 00:09

MikO