2011-02-24 61 views
0

我有一個使用本地主機在本地windows機器上運行的servlet。我們已經成功地抓住了我們在美國的一位現在將其託管在Linux機器上的同事,因此我們現在可以在一個模擬的真實世界環境中測試該程序。Servlet,寫數據

但是,我似乎得到一個錯誤,我現在不能調試寫,因爲我的主管已經去了一天,我沒有訪問。我們在理解時會留下來做一些調查。

就在他離開之前我把範圍縮小到這些代碼行

file = File.createTempFile("temp", Long.toString(System.nanoTime())); 
      out.print("Managed to make temp file in trst_servlet"); 
      FileWriter writer = new FileWriter(file); 
      ObjectOutputStream oos = xstream.createObjectOutputStream(writer, "ProcessedInformation"); 
     oos.writeObject(returnedSearchData); 
     oos.flush(); 
     oos.close(); 

     out.print("object Persisted"); //PROGRAMME MAKES IT TO HERE 
     response.setContentLength((int)(file.length())); 
     FileInputStream in = new FileInputStream(file); 

     OutputStream ops = response.getOutputStream(); 

     byte[]buf = new byte[1024]; 
     int count = 0; 
     while((count = in.read(buf)) >= 0) 
     { 
      ops.write(buf, 0, count); 
     } 
     in.close(); 
     ops.close(); 
    } 

    catch(IOException ex) 
      //EXCEPTION CAUGHT HERE 

我想知道,沒有任何人有任何想法,如果這是一個問題可能與在Linux中的緩衝區大小,或寫大例如文件大小,然後嘗試將其發送回線路。

基本上這個基於Java的servlet將xml寫入我的c#程序。

謝謝

+0

你能提供一些關於錯誤的細節嗎? – biziclop 2011-02-24 16:30:56

+0

我沒有時間在我的老闆離開前打印出錯誤,所有我新的是它是這些行中的一個,導致異常,因爲我在那裏卡住了一個快速println,並且在這組代碼執行前的println也 – tom 2011-02-24 16:32:32

+1

@tom當然,你不能期望在沒有訪問的情況下調查任何事情,或者至少是異常的堆棧跟蹤。沒有看到任何東西,我可能會猜測文件的路徑包含\而不是/,這就是爲什麼你會得到一個異常。但這只是一個瘋狂的猜測。 – biziclop 2011-02-24 16:38:31

回答

0

什麼是錯誤?如果您在瀏覽器中加載網址,它會起作用嗎?

可能出現的問題:

  1. 鑑於它在另一臺電腦前工作,現在一個新的箱文件coud不會被發現,因爲它是在不同的相對位置。

  2. 在Windows機器上工作,但不是在Linux上?您是否在文件的路徑中使用了Windows路徑分隔符? 「path \ to \ file」而不是「path/to/file」?

  3. 您沒有將Content-type設置爲「application/xml」,並且C#客戶端由於某種原因拒絕了它。 (在瀏覽器中測試)。

+0

只是爲了添加我目前正在通過瀏覽器進行測試,當我看到它在那裏工作時,我將開始通過我的程序再次嘗試。只需添加file = File.createTempFile(「temp」,Long.toString(System.nanoTime()));這是做得很好,因爲例外不​​會發生另外6或7行。我已經更新了OP來顯示這個 – tom 2011-02-24 16:44:09

+0

我相信你應該在完成寫入操作後添加'writer.flush()'和'writer.close()',以便將數據發送到操作系統。 – 2011-02-24 17:11:17