0

次のコードを書きました。

                     FileService fileService = FileServiceFactory
                 .getFileService();

                 // Create a new Blob file with mime-type "text/plain"
                 AppEngineFile file = fileService.createNewBlobFile(
                 "image/jpeg", name);

                 if(null!=file)
                 log.warn(file.toString());

                 FileReadChannel readChannel =
                 fileService.openReadChannel(
                 file, true);

                 // Again, different standard Java ways of reading from
                 // the
                 // channel.
                 BufferedReader reader = new BufferedReader(Channels
                 .newReader(readChannel, "UTF8"));
                 String line = reader.readLine();

                 resp.setContentType("text/plain");
                 resp.getWriter().println(line);

                 readChannel.close();

しかし、残念ながら、次の例外が発生します。

com.google.appengine.api.files.FileServiceImpl.makeSyncCall の com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:597) でのサーブレット com.google.appengine.api.files.FinalizationException からのキャッチされない例外(FileServiceImpl.java:574) com.google.appengine.api.files.FileServiceImpl.open(FileServiceImpl.java:496) com.google.appengine.api.files.FileServiceImpl.openForRead(FileServiceImpl.java:456) でcom.google.appengine.api.files.FileServiceImpl.openForRead(FileServiceImpl.java:447) で com.google.appengine.api.files.FileServiceImpl.openReadChannel(FileServiceImpl.java:202) で com.myfileshost.MyfileshostServlet.doGet( MyfileshostServlet.java:362) で javax.servlet.http.HttpServlet.service(HttpServlet.java:617) で javax.servlet.http.HttpServlet で。サービス (HttpServlet.java:717) で org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) で org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) で com .google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.runtime.jetty .SaveSessionFilter.doFilter(SaveSessionFilter.java:35) の org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) の com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java) :43) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) で org.mortbay.jetty.servlet.org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) の ServletHandler.handle(ServletHandler.java:388) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) の org .mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) の org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) の com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle (AppVersionHandlerMap.java:249) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) で org.mortbay.jetty.Server.handle(Server.java:326) で org.mortbay.jetty. org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) の HttpConnection.handleRequest(HttpConnection.java:542) com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76) の org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) の com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135) の com.google .apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:446) at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449) at com.google.tracing.TraceContext$TraceContextRunnable$1.run( TraceContext.java:455) com.google.tracing.TraceContext.runInContext(TraceContext.java:695) com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333) com.google.tracing.TraceContext $AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325) com.google.com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) で java.lang.Thread.run(Thread.java:679) で trace.TraceContext$TraceContextRunnable.run(TraceContext.java:453)

4

1 に答える 1

1

ファイルが GAE FileService を介して作成される場合、ファイルを読み取る前にファイナライズする必要があります。

Javadoc には、ファイルがファイナライズされていない場合openReadChannel(..)にこのメソッドがスローされることが明確に記載されています。FinalizationException

ファイルを作成し、ファイナライズしてから読み取る方法の完全な例を次に示します。

于 2012-05-06T20:41:55.763 に答える