2017-10-14 6 views
1

Je migre mon application Java GAE vers Google Cloud Endpoints 2.0. J'ai suivi le guide de migration (https://cloud.google.com/endpoints/docs/frameworks/legacy/v1/java/migrating) pour migrer vers Endpoints v2.0.Migration vers Cloud Endpoints 2.0 - Utilisation de localhost mais pas de App Engine

Les appels de service des points de terminaison fonctionnent sur localhost mais retournent 404 (non trouvé) lorsqu'ils sont téléchargés dans App Engine. J'utilise Guice.

La section pertinente de mon web.xml ressemble à ceci:

<filter> 
    <filter-name>guiceFilter</filter-name> 
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>guiceFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>com.xyz.myapp.server.guice.MyAppGuiceServletContextListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>EndpointsServlet</servlet-name> 
    <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class> 
    <init-param> 
    <param-name>services</param-name> 
    <param-value>com.xyz.myapp.server.endpoints.MyEP1,com.xyz.myapp.server.endpoints.MyEP2</param-value> 
    </init-param> 
</servlet> 

<servlet-mapping> 
    <servlet-name>EndpointsServlet</servlet-name> 
    <url-pattern>/_ah/api/*</url-pattern> 
</servlet-mapping> 

MyAppGuiceServletContextListener.java

public class MyAppGuiceServletContextListener extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new GuiceServletModule(), new EPServletModule()); 
    } 
} 

EPServletModule.java

public class EPServletModule extends EndpointsModule { 
    @Override 
    protected void configureServlets() { 
     super.configureServlets();  
     Set<Class<?>> serviceClasses = new HashSet<Class<?>>(); 
     serviceClasses.add(MyEP1.class); 
     serviceClasses.add(MyEP2.class); 
     configureEndpoints("/_ah/api/*", serviceClasses);  
    } 
} 

GuiceServletModule:

public class GuiceServletModule extends ServletModule { 
    @Override 
    protected void configureServlets() { 
    super.configureServlets(); 
    serve("/myapp/servlet1").with(Servlet1.class); 
    serve("/myapp/servlet2").with(Servlet2.class); 
    } 
} 

Je suis en mesure d'invoquer les servlets réguliers sur les chemins:

https://[version]-dot-myapp-id.appspot.com/myapp/servlet1 

https://[version]-dot-myapp-id.appspot.com/myapp/servlet2 

Mais je ne suis pas en mesure d'accéder aux points d'extrémité. Il renvoie toujours le code d'erreur 404. J'ai essayé via mon client Javascript et aussi via l'API Explorer, et j'ai la même erreur.

J'ai aussi vérifié les journaux et étrangement les journaux montrent la requête POST comme ceci:

"POST /_ah/spi/com.xyz.myapp.server.endpoints.MyEP1.myEPMethod HTTP/1.1" 404 

Pourquoi faut-il commencer par/_ah/spi/quand mon client invoque via/_ah/api /? REMARQUE: je suis en mesure d'invoquer les points de terminaison 1.0, qui sont déployés sur une version différente de la même application, sans aucun problème. Mais la version Endpoints 2.0 ne fonctionne pas.

Ai-je raté quelque chose?

J'ai aussi une question très simple. Mon client est basé sur Javascript. Utilise-t-il vraiment le document de découverte?

Répondre

0

J'ai corrigé ceci en mettant à jour Android Studio vers la dernière version et en mettant à jour le SDK.

+0

Je n'utilise pas Android Studio. Mais l'équipe de la CME m'a dit qu'ils ont fait quelque chose pour résoudre le problème. Je n'ai pas encore trouvé le temps de le tester. – DFB