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?
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