2012-01-17 69 views
2

我想讀取存儲在我的Tomcat服務器上的XML文件,該文件位於與我的GWT項目不同的位置。這如何輕鬆完成?我應該進行遠程過程調用嗎?也許通過HTTP檢索JSON數據?我看到this page,但我不確定這是否是我的問題的解決方案,或者如果像RPC這樣的東西使這比需要更難。我是一個新手,所以如果我對這一切都做錯了,請引導我朝着正確的方向前進。使用GWT讀取XML文件的最簡單方法是什麼?

我也看過this page,它解釋瞭如何解析XML文件。我理解解析,但我無法弄清楚如何首先從服務器獲取XML文件。我已經試過這樣:

try { 
     new RequestBuilder(RequestBuilder.GET, 
       "http://localhost:8180/Videos/testFile.xml"). 
       sendRequest("", new RequestCallback() { 

       @Override 
       public void onResponseReceived(Request req, Response resp) { 
       String text = resp.getText(); 
       // This method parses the XML file, but is never getting any data to parse 
       parseMessage(text); 
       } 

       @Override 
       public void onError(Request res, Throwable throwable) { 
       // handle errors 
        System.out.println("Error occurred"); 
       } 
      }); 
    } catch (RequestException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

但是當我嘗試這一點,parseMessage(text)從來沒有得到任何數據來分析,它只是得到一個空字符串。

+0

你回來的狀態碼是什麼('resp.getStatusCode()')?你能否確認請求有一個正文,將它提交給服務器並返回一些數據? – 2012-01-17 15:57:42

回答

2

試試這個:

String url = "http://localhost:8180/Videos/testFile.xml"; 
// typically it would be a good idea to URL.encode(url); 
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 
try { 
    builder.sendRequest(null, new RequestCallback() { 

      @Override 
      public void onResponseReceived(Request req, Response resp) { 
      String text = resp.getText(); 
      parseMessage(text); 
      } 

      @Override 
      public void onError(Request res, Throwable throwable) { 
      // handle errors 
       System.out.println("Error occurred"); 
      } 
     }); 
} catch (RequestException e) { 
    e.printStackTrace(); 
} 

如果您仍然遇到問題,開始調試響應。

+0

當我嘗試這個時,我得到這個錯誤:調度傳入的RPC調用時出現[WARN]異常,然後出現'com.google.gwt.user.server.rpc.UnexpectedException:Service方法'public abstract java.lang.String com .google.gwt.sample.client.GreetingService.readXML(java.lang.String)拋出java.lang.IllegalArgumentException'拋出一個意外的異常:java.lang.UnsatisfiedLinkError:com.google.gwt.http.client.URL.encodeImpl (Ljava/lang/String;)Ljava/lang/String;' – Steph 2012-01-17 19:07:51

+0

@Steph Ah。你在服務器端進行這個調用。你不能在服務器上使用GWT的URL類。不管 - 你在這裏提到的URL是安全的,所以你可以在這種情況下跳過編碼。不過,您應該記住,編碼可能會成爲更復雜URL的問題。 – 2012-01-17 19:42:28

0

我認爲你很可能會違反跨站點腳本規則。

由於奇怪的歷史原因,與安全無關,客戶端應用程序可以從主站點以外的主機檢索JSON數據,但無法檢索XML數據。

1

確保你的文件真的在war/Videos/testFile.xml。然後,開發和調試的技巧,將+ "?uid=" + Math.random()添加到您的文件名,否則您的瀏覽器可能會緩存文件,總是給你相同的(在這種情況下爲空)文件。

可能是一個相同的原產地問題,但如果你在本地運行它(你的服務器在端口8180上),應該不是。但請確保它是從同一臺服務器上獲取你的xml和應用程序,否則它們將運行在不同的端口上,從而導致SOP問題。

相關問題