9

Sto riscontrando uno strano comportamento durante la generazione di endpoint utilizzando il plug-in Google Appengine Eclipse. Ho una classe di endpoint con oltre 20 metodi di endpoint. Quando ho provato prima generazione gli endpoint per Android ottengo l'erroreInterferenze di metodo in Google Cloud Endpoint con Google Eclipse Plugin

Generating Cloud Endpoint has encountered errors and is not complete 

A titolo di risoluzione dei problemi, io commento tutti i metodi per trovare i colpevoli. Quello che ho trovato è un po 'sconcertante. Dopo aver decommentato il metodo 16, ottengo di nuovo l'errore. Ci sono due metodi che interferiscono l'uno con l'altro! Se commento l'uno o l'altro, l'endpoint viene generato correttamente. Ma se ho entrambi non commentato, ottengo l'errore sopra.

Qualcuno sa che cosa potrebbe causare questa interferenza?

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

Ho modificato i metodi fino al loro stub come mostrato sopra e ancora ottengo lo stesso problema di interferenza.

risposta

33

In primo luogo, quando si ottiene un errore con quel fastidioso messaggio undescriptive:

Generazione cloud Endpoint ha riscontrato errori e non è completo

si dovrebbe verificare il Registro errori sotto Window -> Show View -> Error Log per avere maggiori informazioni.


l'ho fatto, e ho trovato che l'eccezione reale è:

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

Quindi, il problema è che i tuoi 2 metodi hanno lo stesso percorso! L'aggiunta in modo esplicito un percorso per i metodi risolverà il problema:

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

NOTA: Come non è stata impostata percorsi per i metodi, GPE li sta generando automaticamente. Sembra che GPE genera lo stesso percorso per i 2 metodi, usando per formare il percorso del metodo HTTP (POST ) e il valore restituito (facelist), che non corrisponde a quanto detto in Google Cloud Endpoints Documentation:

"percorso:. il percorso URI da utilizzare per accedere a questo metodo se non si imposta questo, un percorso predefinito viene utilizzato basa sul metodo Java nome."

Si dice che il percorso venga generato automaticamente usando il nome del metodo, e in tal caso non si verificherà alcun errore, poiché i 2 metodi hanno nomi ovviamente diversi. Quindi suppongo che debba essere un bug (come molti altri) in Endpoint.

+0

Wow! Spero che la tua risposta diventi MOLTO! di voti positivi. 'Finestra -> Mostra vista -> Log degli errori' da solo è incredibile! Grazie mille! +1 e Controlla! Quando ho fatto quella domanda, in realtà non avevo speranza di ottenere una risposta.L'ho solo chiesto da quando ero completamente bloccato. – learner

+0

Nessun problema @ studente, sono felice che abbia aiutato! Avevo già suggerito * il trucco * prima (http://stackoverflow.com/questions/15945554/can-i-return-a-generic-in-google-cloud-end-point/15946690#15946690) e infatti era [at] bossylobster che me lo ha suggerito (http://stackoverflow.com/questions/15684837/eclipse-doesnt-generate-google-cloud-endpoint-client-library/15684863#15684863) Per quanto riguarda gli upvotes avrei in questo modo, ma io non la penso così, dal momento che questi tag non hanno troppi follower :) – MikO

+0

Complementare: https://cloud.google.com/appengine/docs/java/endpoints/paramreturn_types#path_parameters – GFPF

Problemi correlati