2012-06-26 33 views
1

我的目標是嘗試從我的GWT應用程序中的servlet中讀取位於服務器上的csv文件。使用requestbuilder從GWT應用程序中獲取csv文件 - 獲取異常:java.lang.UnsatisfiedLinkError:

我試過這種方法最初

public String[] convertFileToStringArrays(String pathToCSV) 
{ 
    BufferedReader br = null; 
    try 
    { 
     br = new BufferedReader(new FileReader(pathToCSV)); 
    } 
    catch (FileNotFoundException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    String currLine; 
    String [] string_arrays = null; 
    int i = 0; 
    try { 
     while ((currLine = br.readLine()) != null) 
     { 
      System.out.println(currLine); 
      string_arrays[i] = currLine; 
      i++; 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return string_arrays; 
} 

但是,我得到一個Java IO類型的異常。我發現使用上述方法是不可能的,因爲GWT應用程序不能訪問Java IO庫。 所以我搜索了一下,發現人們說在服務器上的GWT應用中讀取文件的方式是使用Request Builder。所以我嘗試了使用我在網絡上看到的一些示例的以下方法。在這片文件位於我的本地文件系統和Im傳遞路徑通過PathToCSV變量:

public String[] convertFileToStringArrays(final String pathToCSV) 
{ 
    RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, pathToCSV); 
    try 
    { 
     rb.sendRequest(null, new RequestCallback() 
     { 
      @Override 
      public void onError(Request request, Throwable exception) 
      { 
       System.out.println("Failed to load file:"+ pathToCSV); 

      } 

      @Override 
      public void onResponseReceived(Request request,Response response) 
      { 
       //TO DO currently just using this until the method is functional and can retrieve the file 
       String resp = response.getText(); 

      } 

     }); 
    } 
    catch (Exception e) 
    { 
     System.out.println(e.getMessage()); 

    } 

    return null; 



} 

}

但是這個代碼是拋出另一個異常:

異常堆棧跟蹤:

Jun 26, 2012 7:29:41 AM com.google.appengine.tools.development.ApiProxyLocalImpl log 

SEVERE:javax.servlet.ServletContext日誌:調度傳入的RPC調用時發生異常 com.google.gwt.user.se rver.rpc.UnexpectedException:Service方法'public abstract java.lang.String [] cs310.client.CsvFileParserService.convertFileToStringArrays(java.lang.String)'拋出一個意外的異常:java.lang.UnsatisfiedLinkError:com.google.gwt。 xhr.client.XMLHttpRequest.create()LCOM /谷歌/ GWT/XHR /客戶/ XMLHttpRequest的; at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 在com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 在COM。 google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 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.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler。 java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60) at 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) 在com.google。 appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) at org.mortb ay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 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) 在com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78) 在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在com.google.appengine。 tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:369) 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) 在org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:938) 在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser .java:218) 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) 引發:java.lang.UnsatisfiedLinkError:com.google.gwt.xhr.client.XMLHttpRequest.create()Lcom/google/gwt/xhr/client/XMLHttpRequest; at com.google.gwt.xhr.client.XMLHttpRequest.create(Native Method) at com.google.gwt.http.client.RequestBuilder.doSend(RequestBuilder.java:369) at com.google.gwt.http .client.RequestBuilder.sendRequest(RequestBuilder.java:256) 在cs310.server.CsvFileParserServiceImpl.convertFileToStringArrays(CsvFileParserServiceImpl.java:60) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl。在com.google.appengine的java.lang.reflect.Method.invoke(Method.java:597) 處調用(NativeMethodAccessorImpl.java:39) (在DelegatingMethodAccessorImpl.java:25) 。 tools.development.agent.runtime.Runtime.invoke(Runtime.java:115) 在com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) ...... 34多個

我想知道如果有人能幫助我瞭解林是否在正確的軌道上使用此代碼將csv文件讀入我的應用程序?如果是這樣,那麼我能做些什麼來解決這個異常。如果沒有,那麼是否有任何相同的代碼樣本?


試圖URL connectin方法之後

添加了新的代碼

public String[] convertFileToStringArrays(final String pathToCSV) 
{ 
    String [] string_arrays = null; 
    try { 
      URL url = new URL(pathToCSV); 
      BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); 
      String currLine; 

      int i = 0; 
      while ((currLine = br.readLine()) != null) 
       { 
        System.out.println(currLine); 
        string_arrays[i] = currLine; 
        i++; 
       } 
      br.close(); 

     } 
catch (MalformedURLException e) { 
      // ... 
     } catch (IOException e) { 
      // ... 
     } 
    if(string_arrays == null) 
     System.out.println("CsvFilePasrserServiceImpl says that string_arrays is null"); 
     return string_arrays; 

} 

這導致了這個堆棧跟蹤:

SEVERE: javax.servlet.ServletContext log: Exception while dispatching incoming RPC call 
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String[]  cs310.client.CsvFileParserService.convertFileToStringArrays(java.lang.String)' threw an  unexpected exception: java.security.AccessControlException: access denied  (java.io.FilePermission /Users/AM/Sites/new_food_vendor_locations2.csv read) 
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) 
at  com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
at  com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
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.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:35) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
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:78) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:369) 
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.content(HttpConnection.java:938) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
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) 
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /Users/AM/Sites/new_food_vendor_locations2.csv read) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
at java.security.AccessController.checkPermission(AccessController.java:546) 
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:252) 
at java.lang.SecurityManager.checkRead(SecurityManager.java:871) 
at java.io.File.isDirectory(File.java:752) 
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:65) 
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) 
at java.net.URL.openStream(URL.java:1010) 
at cs310.server.CsvFileParserServiceImpl.convertFileToStringArrays(CsvFileParserServiceImpl.java:99) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) 
... 34 more 

回答

2

java.io被遇到的問題是因爲GWT的,而是因爲的AppEngine。 GWT是客戶端,這就是爲什麼當你嘗試在服務器端使用RequestBuilder時它現在失敗了。

要從AppEngine上的服務器端獲取URL,請使用URL Fetch service

+0

請在帖子中看到我上面編輯過的部分。我根據您的建議嘗試了該代碼。但是,我現在正在獲取fileaccess異常。:( – banditKing

相關問題