java.io.EOFException GDrive API授权
我目前正在按照教程从doogle驱动器获取文件列表。在我得到以下异常java.io.EOFException GDrive API授权,java,google-app-engine,google-drive-api,Java,Google App Engine,Google Drive Api,我目前正在按照教程从doogle驱动器获取文件列表。在我得到以下异常 Caused by: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) at java.io.ObjectInputS
Caused by:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at com.google.api.client.util.IOUtils.deserialize(IOUtils.java:171)
at com.google.api.client.util.store.FileDataStoreFactory$FileDataStore.<init>(FileDataStoreFactory.java:102)
at com.google.api.client.util.store.FileDataStoreFactory.createDataStore(FileDataStoreFactory.java:73)
at com.google.api.client.util.store.AbstractDataStoreFactory.getDataStore(AbstractDataStoreFactory.java:55)
at com.google.api.client.auth.oauth2.StoredCredential.getDefaultDataStore(StoredCredential.java:171)
at com.google.api.client.auth.oauth2.AuthorizationCodeFlow$Builder.setDataStoreFactory(AuthorizationCodeFlow.java:736)
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.setDataStoreFactory(GoogleAuthorizationCodeFlow.java:209)
at com.demo.gapps.server.FetchNewFilesCron.authorize(FetchNewFilesCron.java:233)
at com.demo.gapps.server.FetchNewFilesCron.getDriveService(FetchNewFilesCron.java:244)
at com.demo.gapps.server.FetchNewFilesCron.doGet(FetchNewFilesCron.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:511)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
错误可能在.setDataStoreFactory(数据存储工厂)
谁能告诉我这个错误吗
谢谢,异常表示文件结束(EOF),或者意外到达流结束。此外,此异常主要由
DataInputStreams
使用,以发出流结束的信号。但是,请注意,其他输入操作可能会在流结束时返回特殊值,而不是抛出EOFException
EOFEException
类扩展了IOException类,IOException类是由失败或中断的I/O操作产生的一般异常类。此外,它还实现了可序列化接口。此外,它被定义为已检查异常,因此必须在方法或构造函数的throws子句中声明
DataInputStreams
提供了一些方法,这些方法可以以独立于机器的方式从底层输入流中读取基本Java数据类型。应用程序使用OutputStream类或DataOutputStream类提供的方法写入数据
有关更多信息,请查看讨论EOFEException和DataInputStream的相关SO票证:异常表示文件结束(EOF),或意外到达流结束。此外,此异常主要由
DataInputStreams
使用,以发出流结束的信号。但是,请注意,其他输入操作可能会在流结束时返回特殊值,而不是抛出EOFException
EOFEException
类扩展了IOException类,IOException类是由失败或中断的I/O操作产生的一般异常类。此外,它还实现了可序列化接口。此外,它被定义为已检查异常,因此必须在方法或构造函数的throws子句中声明
DataInputStreams
提供了一些方法,这些方法可以以独立于机器的方式从底层输入流中读取基本Java数据类型。应用程序使用OutputStream类或DataOutputStream类提供的方法写入数据
有关更多信息,请查看此相关的SO票证,其中讨论了EOFEException和DataInputStream:我知道这是一篇旧文章,但我有几乎完全相同的stacktrace,唯一的答案没有多大帮助。所以,我在这里发帖,希望它能帮助那些在我之后的人
该问题似乎与文件/目录权限有关。只要我将FileDataStoreFactory使用的文件路径更改为我的应用程序具有读/写权限的目录,OAuth2就会正常工作。因此,请确保您使用的是非受限文件路径,并且所有目录都具有正确的所有权和权限。我知道这是一篇旧文章,但我有几乎完全相同的stacktrace,唯一的答案不是很有帮助。所以,我在这里发帖,希望它能帮助那些在我之后的人
该问题似乎与文件/目录权限有关。只要我将FileDataStoreFactory使用的文件路径更改为我的应用程序具有读/写权限的目录,OAuth2就会正常工作。因此,请确保您使用的是非受限文件路径,并且所有目录都具有正确的所有权和权限。实际上,我在本地环境中遇到了此异常,而在Google App Engine development server上遇到了以下异常。您能在java.security.AccessControlException.java.security.AccessControlContext.checkPermission(AccessControlContext.java:484)的java.security.AccessController.checkPermission(AccessController.java:698)的java.lang.SecurityManager.checkPermission中为我提供指导吗com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55)java.lang.SecurityManager.checkRead(SecurityManager.java:888)java.io.File.exists(File.java:877)google app engine似乎不允许我创建和读取文件。可能的问题是什么?实际上,在google app engine开发服务器上,我在本地环境中遇到了此异常,但我遇到了以下异常。您能用java.security.AccessControlException:access denied指导我吗(java.security.AccessControlContext.checkPermission(AccessControlContext.java:484)处的java.security.AccessController.checkPermission(AccessController.java:698)处的java.lang.SecurityManager.checkPermission(SecurityManager.java:549)com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55)java.lang.SecurityManager.checkRead(SecurityManager.java:888)java.io.File.exists(File.java:877)google app engine似乎不允许我创建和读取文件。可能的问题是什么?您是否仍遇到此问题?是否有更新,您是否已设法解决此问题?是否仍遇到此问题?是否有更新,您是否已设法解决此问题?
* @return an authorized Credential object.
* @throws IOException
*/
public static Credential authorize() throws IOException {
System.out.println("file path is "+DATA_STORE_DIR.getPath());
// Load client secrets.
InputStream in =
FetchNewFilesCron.class.getResourceAsStream("/client_secrets.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("user");
System.out.println(
"Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}