Java 通过应用程序引擎访问Google工作表导致异常
我有一个简单的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
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,问题就消失了(显然其他问题也会随之而来)