Java 通过应用程序引擎访问Google工作表导致异常

Java 通过应用程序引擎访问Google工作表导致异常,java,google-app-engine,google-sheets,Java,Google App Engine,Google Sheets,我有一个简单的Java应用程序,它试图访问Google工作表,但每当我运行它时,就会出现一个异常。代码是: public class SheetsIntegration { private static HttpTransport transport; private static JacksonFactory jsonFactory; private static AppEngineDataStoreFactory dataStoreFactory; private Sheets servic

我有一个简单的Java应用程序,它试图访问Google工作表,但每当我运行它时,就会出现一个异常。代码是:

public class SheetsIntegration {
private static HttpTransport transport;
private static JacksonFactory jsonFactory;
private static AppEngineDataStoreFactory dataStoreFactory;
private Sheets service;
private static final String APPLICATION_NAME = "My App";

private static List<String> scopes = Arrays.asList(SheetsScopes.SPREADSHEETS);

public SheetsIntegration() {
    try {
        transport = GoogleNetHttpTransport.newTrustedTransport();
        dataStoreFactory = AppEngineDataStoreFactory.getDefaultInstance();
        jsonFactory = JacksonFactory.getDefaultInstance();
        service = getSheetsService();
    } catch (Exception e) {
        // handle exception
    }
}

public static Credential authorize() throws IOException {
    InputStream in = AccessSheet.class.getResourceAsStream("/client_secret_access.json");
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow =
            new GoogleAuthorizationCodeFlow.Builder(
                    transport, jsonFactory, clientSecrets, scopes)
                    .setDataStoreFactory(dataStoreFactory)
                    .setAccessType("offline")
                    .build();
    AuthorizationCodeInstalledApp app = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver());
    Credential credential = app.authorize("user");// This is line 55
    return credential;
}

public static Sheets getSheetsService() throws IOException {
    Credential credential = authorize();
    return new Sheets.Builder(transport, jsonFactory, credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
}
公共类表单集成{
专用静态http传输;
私人静电千斤顶厂;
私有静态AppenginedDatastoreFactory数据存储工厂;
私人床单服务;
私有静态最终字符串应用程序\u NAME=“我的应用程序”;
私有静态列表范围=Arrays.asList(SheetsScopes.SPREADSHEETS);
公共页合并(){
试一试{
transport=GoogleNetHttpTransport.newTrustedTransport();
dataStoreFactory=AppenginedDataStoreFactory.getDefaultInstance();
jsonFactory=JacksonFactory.getDefaultInstance();
服务=getSheetsService();
}捕获(例外e){
//处理异常
}
}
公共静态凭据授权()引发IOException{
InputStream in=AccessSheet.class.getResourceAsStream(“/client\u secret\u access.json”);
GoogleClientSecrets clientSecrets=GoogleClientSecrets.load(jsonFactory,新的InputStreamReader(in));
//生成流并触发用户授权请求。
GoogleAuthorizationCodeFlow=
新的GoogleAuthorizationCodeFlow.Builder(
传输、jsonFactory、客户端机密、范围)
.setDataStoreFactory(数据存储工厂)
.setAccessType(“脱机”)
.build();
AuthorizationCodeInstalledApp app=新的AuthorizationCodeInstalledApp(流程,新的LocalServerReceiver());
Credential=app.authorize(“用户”);//这是第55行
返回凭证;
}
公共静态工作表getSheetsService()引发IOException{
凭证=授权();
返回新图纸。生成器(运输、jsonFactory、凭证)
.setApplicationName(应用程序名称)
.build();
}
我在实例化SheetsIntegration时遇到以下异常

java.lang.NoClassDefFoundError:无法初始化类 org.mortbay.jetty.Server位于 com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver.getRedirectUri(LocalServerReceiver.java:98) 在 com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp.authorization(AuthorizationCodeInstalledApp.java:76) 在 com.google.appengine.demos.SheetsIntegration.authorize(SheetsIntegration.java:55) 在 com.google.appengine.demos.SheetsIntegration.getSheetsService(SheetsIntegration.java:60) 在 com.google.appengine.demos.SheetsIntegration(SheetsIntegration.java:37)

java:55是我尝试创建凭证对象的地方——我在这一行添加了注释

在我的pom中,我有以下条目:

<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.26</version>
</dependency>

org.mortbay.jetty
码头
6.1.26

有人能解释一下我在这里做错了什么吗?谢谢。

我设法想出了一个解决问题的办法,所以我将在这里发布,以防其他人也有类似的问题。在我的例子中,我使用的是servlet api的3.1.0。一旦我降级到2.5,问题就消失了(显然其他问题也会随之而来).

我设法找到了我的问题的解决方案,所以我将在这里发布,以防其他人有类似的问题。在我的例子中,我使用的是servlet api的3.1.0。一旦我降级到2.5,问题就消失了(显然其他问题也会随之而来)