webclient appengine在本地工作但在Google Cloud appengine上引发异常

时间:2017-05-11 01:43:13

标签: java google-app-engine google-drive-api google-cloud-platform google-api-java-client

webclient oauth2用于通过appengine访问谷歌驱动器工作在localhost appengine
但是在谷歌云应用引擎上抛出异常。

       static GoogleAuthorizationCodeFlow initializeFlow() throws IOException {

    Log.info("in initializeFlow oauthUtils");
    return new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT_REQUEST,
            JSON_FACTORY, getClientSecrets(), PERMISSION_SCOPES)
           getClientSecrets().getDetails().getClientId(), 
             getClientSecrets().getDetails().getClientSecret(), 
           PERMISSION_SCOPES)

            .setDataStoreFactory(DATA_STORE_FACTORY)
            .setAccessType("online").build();
    }


       AuthorizationCodeFlow authFlow = initializeFlow();
               Credential credential = 
            authFlow.loadCredential(getUserId(req));


     drive = new Drive.Builder(
            HTTP_TRANSPORT_REQUEST, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
    FileList result = null;
    try {
                    result = drive.files().list()
                .setPageSize(10)
                .setFields("nextPageToken, files(id, name)")
                .execute();
    } catch (IOException e) {
        Log.severe("for filelist");
        throw new IOException("not able to get files from service 
       OAuthUtils.getDataFromApi()");
    }

使用client_secrets.json

    {"web":{"client_id":"1006959462162-qmlxxxxxxxxxx.apps.googleusercontent.com","project_id":"ggledrvsrvcaccntxxxxxxxx","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"Z-GUR_uf2hfh_seMz","redirect_uris":["https://ggledrvsrvcaccnt.firebaseapp.com/__/auth/handler","https://www.getpostman.com/oauth2/callback","http://localhost:8080/oauth2callback","https://ggledrvsrvcaccntxxxxxxxx.appspot.com/oauth2callback"],"javascript_origins":["http://localhost","http://localhost:5000","https://ggledrvsrvcaccntxxxxxxxx.firebaseapp.com"]}}

这是google cloud appengine的例外

         result = drive.files().list()
                .setPageSize(10)
                .setFields("nextPageToken, files(id, name)")
                .execute();

并抛出异常。

  

com.google.api.client.googleapis.json.GoogleJsonResponseException:   401 {"代码" :401,"错误" :[{" domain" :"全球",         "位置" :"授权",

     

"的locationType" :"标题","消息" :"凭证无效","原因"   :" authError" }]," message" :"证书无效" } 在   com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)   在   com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)   在   com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)   在   com.google.api.client.googleapis.services.AbstractGoogleClientRequest $ 1.interceptResponse(AbstractGoogleClientRequest.java:321)   在   com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)   在   com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)   在   com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)   在   com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)   在   com.jagdiv.webapplication.backend.OAuthUtils.getDriveService(OAuthUtils.java:120)   在   com.jagdiv.webapplication.backend.OAuthUtils.getDataFromApi(OAuthUtils.java:404)   在   com.jagdiv.webapplication.backend.DriveServlet.doPost(DriveServlet.java:88)   在javax.servlet.http.HttpServlet.service(HttpServlet.java:637)at   com.google.api.client.extensions.servlet.auth.oauth2.AbstractAuthorizationCodeServlet.service(AbstractAuthorizationCodeServlet.java:130)   在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at   org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)   在   org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)   在   com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)   在   org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)   在   com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)   在   org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)   在   com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)   在   org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)   在   com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48)   在   org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)   在   org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)   在   org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)   在   org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)   在   org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)   在   org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)   在   com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:257)   在   org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)   在org.mortbay.jetty.Server.handle(Server.java:326)处   org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)   在   org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923)   在   com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)   在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)at   com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:145)   在   com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.dispatchServletRequest(JavaRuntime.java:644)   在   com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.dispatchRequest(JavaRuntime.java:604)   在   com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.run(JavaRuntime.java:574)   在   com.google.tracing.TraceContext $ TraceContextRunnable.runInContext(TraceContext.java:453)   在   com.google.tracing.TraceContext $ TraceContextRunnable $ 1.run(TraceContext.java:460)   在   com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293)   在   com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319)   在   com.google.tracing.TraceContext $ AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311)   在   com.google.tracing.TraceContext $ TraceContextRunnable.run(TraceContext.java:457)   在   com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run(ThreadGroupPool.java:238)   在java.lang.Thread.run(Thread.java:745)

代码链接 https://github.com/RupamShaw/GogleApplication/tree/master/backend/src/main   注意:在localhost访问屏幕上选择emailid,但是在googlecloud appengine上没有来自emailid的选择屏幕。 请帮忙纠正。

0 个答案:

没有答案