【发布时间】:2015-09-03 07:32:47
【问题描述】:
尝试访问 Google 电子表格。但是,上面的错误正在显示。我使用developers.google.com 的客户端ID 创建了.p12 文件。请让我知道是什么问题。完整错误如下:
线程“main”中的异常 java.io.IOException: toDerInputStream 拒绝标签类型 53 在 sun.security.util.DerValue.toDerInputStream(未知来源)在 sun.security.pkcs12.PKCS12KeyStore.engineLoad(未知来源)在 java.security.KeyStore.load(未知来源)在 com.google.api.client.util.SecurityUtils.loadKeyStore(SecurityUtils.java:82) 在 com.google.api.client.util.SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.java:115) 在 com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.setServiceAccountPrivateKeyFromP12File(GoogleCredential.java:670) 在 testExcelAuth.testExcelAuth.main(testExcelAuth.java:27)
下面是我正在使用的代码:
package testExcelAuth;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.gdata.data.spreadsheet.SpreadsheetEntry;
import com.google.gdata.data.spreadsheet.SpreadsheetFeed;
import com.google.api.services.drive.DriveScopes;
public class testExcelAuth {
public static void main(String[] args) throws Exception {
ArrayList scopes = new ArrayList();
scopes.add(0, DriveScopes.DRIVE);
scopes.add(1, "https://spreadsheets.google.com/feeds");
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(new NetHttpTransport())
.setJsonFactory(new JacksonFactory())
.setServiceAccountId("rkulkarni@securet.in")
.setServiceAccountPrivateKeyFromP12File(newFile(
".\\src\\testExcelAuth\\key.p12"))
.setServiceAccountScopes(scopes).build();
credential.refreshToken();
SpreadsheetService service = new SpreadsheetService("tmp");
service.setOAuth2Credentials(credential);
// Define the URL to request. This should never change.
URL SPREADSHEET_FEED_URL = new URL(
"https://spreadsheets.google.com/feeds/spreadsheets/private/full");
// Make a request to the API and get all spreadsheets.
SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL,
SpreadsheetFeed.class);
List<SpreadsheetEntry> spreadsheets = feed.getEntries();
// Iterate through all of the spreadsheets returned
int i = 0;
for (SpreadsheetEntry spreadsheet : spreadsheets) {
++i;
System.out.println(spreadsheet.getId());
}
System.out.println("Done " + i);
}
}
【问题讨论】:
-
创建后是否关闭了文件。还要检查你是否对文件有读/写访问权限。有时第三方创建的文件有一些设置使其无法访问
标签: java