2017-02-22 32 views
3

Я пытаюсь перенести Java AppEngine из облачных конечных точек в Cloud Endpoints Framework. Т.е. от v1 до v2.Проводник API Google не разрешает доступ к облачным конечным точкам Методы V2

Миграция идет хорошо, конечные точки доступны в новом экземпляре. И открытие показывает все методы https://myapp.appspot.com/_ah/api/discovery/v1/apis

Но когда я использую https://apis-explorer.appspot.com/apis-explorer для моего домена Appengine, в то время как я все еще могу видеть методы API, когда я пробурить на них я уже не может обеспечить Params и выполнять их.

Глядя на журнал 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 Explorer. Эти ошибки не встречаются с v1 облачных конечных точек.

ClassCast подразумевает, что AnnotationBoolen загружен в 2 разных загрузчика классов. Я сам не играю с загрузчиками классов, поэтому я предполагаю, что это нечто новое для Endpoints v2. Что я могу изменить, чтобы избежать ClassCast?

Разве API Explorer не полностью поддерживает инфраструктуру облачных конечных точек?

Есть ли какой-то дополнительный шаг, который мне нужно предпринять, чтобы включить выполнение метода через API-интерфейс для Cloud Endpoints Framework?

+0

Эта ошибка выглядит не связан с API Explorer. Используете ли вы быстрый запуск или свое приложение? – saiyr

+0

Мое приложение.Мне не нужно переносить старый быстрый старт. Я подозреваю, что инструкции по перенастройке неверны, что это не проблема API Explorer – William

+0

Есть ли внутреннее исключение? – saiyr

ответ

3

В соответствии с руководством по миграции Cloud EndPoint Frameworks эти цели maven больше не поддерживаются.

     <goal>endpoints_get_discovery_doc</goal> 
         <goal>endpoints_get_client_lib</goal> 

См https://cloud.google.com/appengine/docs/standard/java/endpoints/migrating

Это также выглядит, как вам нужно

  1. Добавить Облако Endpoints управление API для вашего приложения. См. https://cloud.google.com/endpoints/docs/frameworks/java/adding-api-management
  2. Создайте файл конфигурации API и разверните его ПРИОР для развертывания приложения. См https://cloud.google.com/endpoints/docs/frameworks/java/test-deploy

  3. Генерирование клиента, используя ... LIBS

См https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java

Шаг 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> 
0

ClassCastException, который вы испытали, связано с загрузкой старого SystemServiceServlet instea d нового EndpointsServlet. Настройте ваш 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> 

с

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

 Смежные вопросы

  • Нет связанных вопросов^_^