У меня есть стандартная среда GAE, работающая с ktor. Теперь я пытаюсь получить доступ к sql RESTApi для импорта из GAE, и поэтому мне нужен токен доступа ...
При попытке получить этот токен с помощью AppIdentityServiceFactory.getAppIdentityService().getAccessToken
создается исключение, указывающее на ApiProxy.getCurrentEnvironment()
NULL, что я проверил: это ... (похожая проблема с getAccessTokenUncached
)
У меня создается впечатление, что это как-то связано с Ktor, так как я нашел здесь что application.conf
от ktor может иметь некоторое влияние на настройку среды GAE:
Вам нужно будет удалить блок развертывания из application.conf, в противном случае при запуске в Google App Engine сервлет не будет правильно настроена среда, в результате чего API Google Cloud не будет работать.
Буду признателен за любую помощь
com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call app_identity_service.GetAccessToken in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:847)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:124)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:75)
at com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessTokenUncached(AppIdentityServiceImpl.java:233)
at com.moregames.playspot.service.DataImportManager$token$2.invoke(DataImportManager.kt:47)
at com.moregames.playspot.service.DataImportManager$token$2.invoke(DataImportManager.kt:36)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.moregames.playspot.service.DataImportManager.getToken(DataImportManager.kt)
at com.moregames.playspot.service.DataImportManager.triggerRevenuesImport(DataImportManager.kt:124)
at com.moregames.playspot.service.DataImportManager.triggerRevenuesImportAndWaitForResponse(DataImportManager.kt:103)
at com.moregames.playspot.service.DataImportManager.processLoad(DataImportManager.kt:78)
at com.moregames.playspot.service.DataImportManager$processLoad$1.invokeSuspend(DataImportManager.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:313)
at kotlinx.coroutines.DispatchedCoroutine.afterResume(Builders.common.kt:254)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:113)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:216)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:172)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:122)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:216)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:172)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:122)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(PipelineContext.kt:216)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:172)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:67)
at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(PipelineContext.kt:122)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:561)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:727)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:667)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:655)