Google app engine Google API Explorer不允许访问云端点V2方法
我正在尝试将Java AppEngine从云端点迁移到云端点框架。从v1到v2 迁移进展顺利,新实例上的端点都可以访问。 “发现”展示了所有的方法 但是,当我使用appengine域时,虽然我仍然可以看到API方法,但当我深入研究它们时,我无法再提供参数并执行它们 查看AppEngine日志,我看到以下ClassCastExceptionGoogle app engine Google API Explorer不允许访问云端点V2方法,google-app-engine,google-cloud-endpoints,Google App Engine,Google Cloud Endpoints,我正在尝试将Java AppEngine从云端点迁移到云端点框架。从v1到v2 迁移进展顺利,新实例上的端点都可以访问。 “发现”展示了所有的方法 但是,当我使用appengine域时,虽然我仍然可以看到API方法,但当我深入研究它们时,我无法再提供参数并执行它们 查看AppEngine日志,我看到以下ClassCastException Uncaught exception from servlet javax.servlet.UnavailableException: java.lang.C
Uncaught exception from servlet
javax.servlet.UnavailableException: java.lang.ClassCastException: com.google.api.server.spi.config.AnnotationBoolean cannot be cast to com.google.api.server.spi.config.AnnotationBoolean
at org.mortbay.jetty.servlet.ServletHolder.makeUnavailable(ServletHolder.java:415)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:458)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58)
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:257)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:145)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:559)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:519)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:489)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:238)
at java.lang.Thread.run(Thread.java:745)
这似乎与在API资源管理器中深入研究方法的尝试相匹配。这些错误不会发生在v1云端点上
ClassCast意味着AnnotationBoolen已加载到两个不同的类加载器中。我自己并不是在玩类加载器,所以我认为这对于端点v2来说是新的东西。我应该做些什么来避免类演员
API Explorer是否不完全支持云端点框架
通过API Explorer for Cloud Endpoints Framework启用方法执行是否需要额外的步骤?根据《Cloud Endpoints Framework迁移指南》,这些maven目标不再受支持
<goal>endpoints_get_discovery_doc</goal>
<goal>endpoints_get_client_lib</goal>
端点\u获取\u发现\u文档
端点获取客户端库
看
它也看起来你需要
<!--
EndPoints management API. See https://cloud.google.com/endpoints/docs/frameworks/java/adding-api-management
-->
<filter>
<filter-name>endpoints-api-configuration</filter-name>
<filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
</filter>
<!--
EndPoints management API. See https://cloud.google.com/endpoints/docs/frameworks/java/adding-api-management
-->
<filter>
<filter-name>endpoints-api-controller</filter-name>
<filter-class>com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter</filter-class>
<init-param>
<param-name>endpoints.projectId</param-name>
<param-value>your-appengine-projectid</param-value>
</init-param>
<init-param>
<param-name>endpoints.serviceName</param-name>
<param-value>your-appengine-project-url.appspot.com</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>endpoints-api-configuration</filter-name>
<servlet-name>EndpointsServlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>endpoints-api-controller</filter-name>
<servlet-name>EndpointsServlet</servlet-name>
</filter-mapping>
端点api配置
com.google.api.control.ServiceManagementConfigFilter
端点api控制器
com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter
端点投影
你的外表投射
endpoints.serviceName
your-appengine-project-url.appspot.com
端点api配置
端点服务器
端点api控制器
端点服务器
您遇到的ClassCastException
是由于加载旧的SystemServiceServlet
而不是新的EndpointServlet
。配置要替换的web.xml
<servlet>
<servlet-name>SystemServiceServlet</servlet-name>
<servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
...
</servlet>
<servlet-mapping>
<servlet-name>SystemServiceServlet</servlet-name>
<url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>
SystemServiceServlet
com.google.api.server.spi.SystemServiceServlet
...
SystemServiceServlet
/_ah/spi/*
与
端点服务器
com.google.api.server.spi.EndpointsServlet
...
端点服务器
/_空气污染指数/*
此错误看起来与API资源管理器无关。你是在使用quickstart还是你自己的应用程序?我自己的应用程序。我真的不需要迁移旧的快速启动。我怀疑迁移说明不正确,这不是API资源管理器问题。是否存在内部异常?AppEngine日志(以及API资源管理器)中提供的就是这些。它没有通过我的任何代码,所以我看不出如何注入任何异常处理来进行更深入的挖掘。Willian,我也遇到了同样的问题,你明白了吗?
<servlet>
<servlet-name>EndpointsServlet</servlet-name>
<servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
...
</servlet>
<servlet-mapping>
<servlet-name>EndpointsServlet</servlet-name>
<url-pattern>/_ah/api/*</url-pattern>
</servlet-mapping>