Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Google API Explorer不允许访问云端点V2方法_Google App Engine_Google Cloud Endpoints - Fatal编程技术网

Google app engine Google API Explorer不允许访问云端点V2方法

Google 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

我正在尝试将Java AppEngine从云端点迁移到云端点框架。从v1到v2

迁移进展顺利,新实例上的端点都可以访问。 “发现”展示了所有的方法

但是,当我使用appengine域时,虽然我仍然可以看到API方法,但当我深入研究它们时,我无法再提供参数并执行它们

查看AppEngine日志,我看到以下ClassCastException

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文档
端点获取客户端库

看起来你需要

  • 将云端点API管理添加到应用程序。 看
  • 生成API配置文件并在部署应用程序之前进行部署。 看

  • 使用生成客户端库

  • 步骤1意味着向web.xml中添加如下内容:

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