【问题标题】:java.io.EOFException GDrive API authorizationjava.io.EOFException GDrive API 授权
【发布时间】:2016-12-04 10:48:53
【问题描述】:

我目前正在关注https://developers.google.com/drive/v3/web/quickstart/java 教程以从 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.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)

我用来授权生成的潜在异常的教程代码如下:

* @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;
        }

错误可能在.setDataStoreFactory(DATA_STORE_FACTORY)

谁能指导我解决这个错误。

谢谢,

【问题讨论】:

  • 你还在遇到这个问题吗?
  • 有什么更新,你解决了吗?

标签: java google-app-engine google-drive-api


【解决方案1】:

异常表示end of file (EOF),或意外到达流的末尾。此外,此异常主要由DataInputStreams 使用,以表示流结束。但是,请注意,其他输入操作可能会在流结束时返回一个特殊值,而不是抛出 EOFException

EOFException 类扩展了 IOException 类,这是由失败或中断的 I/O 操作产生的一般异常类。此外,它实现了 Serializable 接口。此外,它被定义为检查异常,因此必须在方法或构造函数的 throws 子句中声明。

DataInputStreams 提供了可以以与机器无关的方式从底层输入流中读取原始 Java 数据类型的方法。应用程序通过使用 OutputStream 类或 DataOutputStream 类提供的方法写入数据。

有关更多信息,请查看讨论 EOFException 和 DataInputStream 的相关 SO 票证:java.io.EOFException when try to read from a socket

【讨论】:

  • 实际上,我在本地环境中遇到了这个异常,而在 Google App Engine 开发服务器上,我遇到了以下异常。你能指导我吗
  • java.security.AccessControlException:在 java.security.AccessControlContext.checkPermission(AccessControlContext.java:484) 在 java.security 的访问被拒绝 ("java.io.FilePermission" "/" "read") .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) at java.io.File.exists(File.java:877)
  • 谷歌应用引擎似乎不允许我创建和读取文件。可能是什么问题??
【解决方案2】:

我知道这是一篇旧帖子,但我有几乎完全相同的堆栈跟踪,唯一的答案不是很有帮助。所以,我发帖希望它能帮助那些追随我的人。

该问题似乎与文件/目录权限有关。一旦我将 FileDataStoreFactory 使用的文件路径更改为我的应用程序具有读/写权限的目录,OAuth2 就可以正常工作。因此,请确保您使用的是不受限制的文件路径,并且所有目录都具有正确的所有权和权限。

【讨论】:

    猜你喜欢
    • 2022-12-06
    • 2014-03-04
    • 2014-05-18
    • 2013-03-17
    • 1970-01-01
    • 2015-02-20
    • 2021-04-17
    • 2014-01-04
    • 2018-03-22
    相关资源
    最近更新 更多