如何使用GAE初始化Drive Service

时间:2014-04-22 09:29:04

标签: google-app-engine oauth-2.0 google-api google-drive-api google-api-client

我需要在GAE应用程序中初始化Drive Service。我正在使用带有3条腿的OAuth 2.0。我使用常规Google帐户(无服务帐户)。我在尝试:

GoogleCredential credentials = usuarioService.getGoogleCredentials();
Drive service = new Drive.Builder(TRANSPORT, JSON_FACTORY, credentials).build();

我收到了这个错误:

Caused by: java.lang.NoSuchFieldError: MAJOR_VERSION
at com.google.api.services.drive.Drive.<clinit>(Drive.java:48)
at com.google.api.services.drive.Drive$Builder.build(Drive.java:8243)

OAuth 2.0流程授权正在运行,但访问云端硬盘我遇到上述错误。

我认为我的GoogleCredentials是错误的,因为我使用相同的方法获取授权才能使用Google Picker。

我从用户那里获得GoogleCredential的方式是:

GoogleCredential credentials = new GoogleCredential.Builder()
    .setClientSecrets(clientId, clientSecret)
    .setJsonFactory(JSON_FACTORY)
    .setTransport(HTTP_TRANSPORT)
    .build()

    .setRefreshToken(user.getOAuth2RefreshToken()) 
    .setAccessToken(user.getOAuth2AccessToken()); //previous Access Token

你能帮帮我吗?

迭。

更新 我已将驱动器库更新为the last one(v2)和google-api-client 1.18,但仍然无效。

现在我收到了这个错误:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.google.api.services.drive.Drive

更新2 当我重建GoogleCredential对象时,考虑到我做错了什么,当我从授权流程中请求原始凭证时,我试图调用Drive.Builder():

final GoogleTokenResponse response = flow.newTokenRequest(authCode).setRedirectUri(callback).execute();     
Credential credential = flow.createAndStoreCredential(response, null);
// Calling to Drive Service
Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build();

我得到同样的错误:

Caused by: java.lang.NoSuchFieldError: MAJOR_VERSION

我对日历执行相同的操作并收到相同的错误

我正在使用下一个库: google-api-client 1.18

google-api-client-servlet 1.18

谷歌-API服务驱v2-1.18

google-http-client 1.18

google-http-client-jackson 1.18

google-oauth-client 1.18

1 个答案:

答案 0 :(得分:0)

<强>解决方案:

喝了很多咖啡后,我发现了错误。

我已经清理了一些图书馆的项目,并且我使用的是1.15版本的Google库,它正在运行(相同的代码)。