javagoogle-app-enginememcachedgcloudgoogle-cloud-kms

Caused by: com.google.apphosting.api.ApiProxy$FeatureNotEnabledException: app_identity_service.GetAccessToken


We are upgrading from java8 to java17. The application runs in google-app-engine. we are using AppIdentityServiceFactory to get access tokens for google kms services. The sample code is working in java8 but it is throwing the following errors after upgrading the runtime to java17. Could we have a solution for this ?

sample code

public String getAppAccessToken() {
    ArrayList <String> scopes = new ArrayList<String>();
    scopes.add( "https://www.googleapis.com/auth/cloud-platform" );
    scopes.add( "https://www.googleapis.com/auth/cloudkms" );
    final AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
    final AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken( scopes );
    String accessTokenStr = accessToken.getAccessToken();
    return accessTokenStr;
}

Errors occured

Error 1

Service error in memcache com.google.appengine.api.memcache.MemcacheServiceException: Memcache get: exception getting 1 key (_ah_app_identity_['https://www.googleapis.com/auth/cloud-platform','https://www.googleapis.com/auth/cloudkms']) 
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:94) 
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.handleApiProxyException(MemcacheServiceApiHelper.java:78) 
    at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.absorbParentException(MemcacheServiceApiHelper.java:143) 
    at com.google.appengine.api.utils.FutureWrapper.handleParentException(FutureWrapper.java:70) 
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:109) 
    at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:40) 
    at com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:63) 
    at com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessToken(AppIdentityServiceImpl.java:317) 
    at com.ls.services.KMSservice.getAppAccessToken(KMSservice.java:130) 
    at com.ls.services.KMSservice.decryptByAPI(KMSservice.java:111) 
    at com.ls.services.KMSservice.getDecryptedSecrets(KMSservice.java:78) 
    at com.ls.services.KMSservice.getSecretMap(KMSservice.java:34) 
    at com.ls.services.KMSservice.getSecretByKey(KMSservice.java:51) 
    at com.ls.services.filters.AuthenticationFilter.<clinit>(AuthenticationFilter.java:67) 
    at com.ls.services.filters.RegisterAuthenticationFilter.configure(RegisterAuthenticationFilter.java:19) 
    at org.jboss.resteasy.core.ResourceMethodInvoker.<init>(ResourceMethodInvoker.java:113) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.processMethod(ResourceMethodRegistry.java:354) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.register(ResourceMethodRegistry.java:277) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:228) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:201) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:187) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:164) 
    at org.jboss.resteasy.core.ResourceMethodRegistry.addSingletonResource(ResourceMethodRegistry.java:103) 
    at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:516) 
    at org.jboss.resteasy.spi.ResteasyDeployment.startInternal(ResteasyDeployment.java:293) 
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:98) 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:140) 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:42) 
    at org.eclipse.jetty.servlet.ServletHolder$Wrapper.init(ServletHolder.java:1345) 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:632) 
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486) 
    at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:759) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:549) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
    at com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler.handle(ParseBlobUploadHandler.java:125) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) 
    at com.google.apphosting.runtime.jetty9.AppEngineWebAppContext.doHandle(AppEngineWebAppContext.java:289) 
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) 
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:113) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
    at org.eclipse.jetty.server.handler.SizeLimitHandler.handle(SizeLimitHandler.java:96) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
    at org.eclipse.jetty.server.Server.handle(Server.java:516) 
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) 
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) 
    at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:269) 
    at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:100) 
    at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:184) 
    at com.google.apphosting.runtime.RequestRunner.dispatchServletRequest(RequestRunner.java:262) 
    at com.google.apphosting.runtime.RequestRunner.dispatchRequest(RequestRunner.java:227) 
    at com.google.apphosting.runtime.RequestRunner.run(RequestRunner.java:193) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:273) 
    at java.base/java.lang.Thread.run(Thread.java:833) 
Caused by: com.google.apphosting.api.ApiProxy$FeatureNotEnabledException: memcache.Get 
    at com.google.apphosting.utils.runtime.ApiProxyUtils.convertApiError(ApiProxyUtils.java:81) 
    at com.google.apphosting.utils.runtime.ApiProxyUtils.getApiError(ApiProxyUtils.java:198) 
    at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:684) 
    at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:581) 
    at com.google.apphosting.runtime.http.HttpApiHostClient.receivedResponse(HttpApiHostClient.java:296) 
    at com.google.apphosting.runtime.http.JettyHttpApiHostClient$Listener.onComplete(JettyHttpApiHostClient.java:206) 
    at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218) 
    at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210) 
    at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481) 
    at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461) 
    at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:374) 
    at org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:596) 
    at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1723) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1552) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:208) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:148) 
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:80) 
    at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131) 
    at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:172) 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) 
    at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) 
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) 
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) 
    ... 1 more

Error 2

com.google.apphosting.api.ApiProxy$FeatureNotEnabledException:app_identity_service.GetAccessToken
at java.lang.Thread.getStackTrace(Thread.java:1610)
at com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:362)
at com.google.apphosting.runtime.ApiProxyImpl.lambda$makeSyncCall$0(ApiProxyImpl.java:284)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:283)
at com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:81)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:120)
at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:81)
at com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessTokenUncached(AppIdentityServiceImpl.java:250)
at com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessToken(AppIdentityServiceImpl.java:327)
at com.ls.services.KMSservice.getAppAccessToken(KMSservice.java:130)
at com.ls.services.KMSservice.decryptByAPI(KMSservice.java:111)
at com.ls.services.KMSservice.getDecryptedSecrets(KMSservice.java:78)
at com.ls.services.KMSservice.getSecretMap(KMSservice.java:34)
at com.ls.services.KMSservice.getSecretByKey(KMSservice.java:51)
at com.ls.services.filters.AuthenticationFilter.<clinit>(AuthenticationFilter.java:67)
at com.ls.services.filters.RegisterAuthenticationFilter.configure(RegisterAuthenticationFilter.java:19)
at org.jboss.resteasy.core.ResourceMethodInvoker.<init>(ResourceMethodInvoker.java:113)
at org.jboss.resteasy.core.ResourceMethodRegistry.processMethod(ResourceMethodRegistry.java:354)
at org.jboss.resteasy.core.ResourceMethodRegistry.register(ResourceMethodRegistry.java:277)
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:228)
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:201)
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:187)
at org.jboss.resteasy.core.ResourceMethodRegistry.addResourceFactory(ResourceMethodRegistry.java:164)
at org.jboss.resteasy.core.ResourceMethodRegistry.addSingletonResource(ResourceMethodRegistry.java:103)
at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:516)
at org.jboss.resteasy.spi.ResteasyDeployment.startInternal(ResteasyDeployment.java:293)
at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:98)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:140)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:42)
at org.eclipse.jetty.servlet.ServletHolder$Wrapper.init(ServletHolder.java:1345)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:632)
at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486)
at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:759)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:549)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler.handle(ParseBlobUploadHandler.java:125)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at com.google.apphosting.runtime.jetty9.AppEngineWebAppContext.doHandle(AppEngineWebAppContext.java:289)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:113)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.SizeLimitHandler.handle(SizeLimitHandler.java:96)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:269)
at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:100)
at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:184)
at com.google.apphosting.runtime.RequestRunner.dispatchServletRequest(RequestRunner.java:262)
at com.google.apphosting.runtime.RequestRunner.dispatchRequest(RequestRunner.java:227)
at com.google.apphosting.runtime.RequestRunner.run(RequestRunner.java:193)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:273)
at java.lang.Thread.run(Thread.java:833)
Caused by: com.google.apphosting.api.ApiProxy$FeatureNotEnabledException: app_identity_service.GetAccessToken 
at com.google.apphosting.utils.runtime.ApiProxyUtils.convertApiError(ApiProxyUtils.java:81)
at com.google.apphosting.utils.runtime.ApiProxyUtils.getApiError(ApiProxyUtils.java:198)
at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:684)
at com.google.apphosting.runtime.ApiProxyImpl$AsyncApiFuture.success(ApiProxyImpl.java:581)
at com.google.apphosting.runtime.http.HttpApiHostClient.receivedResponse(HttpApiHostClient.java:296)
at com.google.apphosting.runtime.http.JettyHttpApiHostClient$Listener.onComplete(JettyHttpApiHostClient.java:206)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:218)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:210)
at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:481)
at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:461)
at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:424)
at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:374)
at org.eclipse.jetty.http.HttpParser.handleContentMessage(HttpParser.java:596)
at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1723)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1552)
at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:208)
at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:148)
at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:80)
at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:131)
at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:172)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
... 1 more


Solution

  • The bundled services in Java 11/17 are not activated by default, unlike Java 8, thus you have to enable them if you want to use any of them. Please use the appengine-web.xml file as directed, especially in accordance with Access legacy bundled services for Java.