2010-08-10 1185 views
0

我在寫一個servlet,它接收一個xml文件,將它提供給另一個類,並給出一個帶有一些註釋的html文件給客戶端。 我發現了輸入的XML的東西,如:servlet:將ServletInputStream轉換爲FileInputStream

input = request.getInputStream();

但這種輸入是一個ServletInputStream和其他類(評論)需要一個FileInputStream。

如果我給的XMLEventReader(在其他類)的ServletInputStream,我得到一個解析錯誤:

ParseError at [row,col]:[1,1] 
Message: Content is not allowed in prolog. 

,我認爲這是因爲servletinputstream代替的FileInputStream的。

問候 我希望有人能夠幫助我:)

回答

0

您應該從ServletInputStream中讀取數據,並將其轉儲到FileOutputStream中。通過這種方式,您可以查看正在發送的數據,然後使用FileInputStream和您描述的需要它的類分別測試數據。我的猜測是同樣的事情會像現在發生的一樣發生,因爲像上一張海報中提到的那樣,數據可能是錯誤的格式。

+0

如果我用類似input = FileInputStream(「xml文件的本地路徑」)的方式啓動「comment-class」,一切正常,但是如果我通過servlet(servletinputstream)給這個類同樣的xml,解析錯誤。 所以xml文件應該是正確的。 也許這有助於解析錯誤在第二個節點上引發。第一個<?xml version =「1.0」encoding ='UTF-8'standalone ='no'?>'明顯工作 – Graslandpinguin 2010-08-10 11:08:26

+0

您可能沒有考慮到響應中的http標頭。 – aepurniet 2013-09-28 16:08:34

3

我認爲這是不可能的,後者的問題是,由於它是一個ServletInputStream。解析器不應該關心數據的來源。

我認爲這很有可能是輸入流中的數據不正確。

你的類,它目前需要FileInputStream需要重構與InputStream工作,如果在所有可能......否則,你將不得不將數據寫入到實際的文件首先,這顯然是不理想的。

+0

好吧,我在「的InputStream」,但同樣的問題 改變的輸入是否有可以ServletInputStream轉換爲字符串,我可以看看是否有它和原來的差小的可能性xml文件? – Graslandpinguin 2010-08-10 11:13:30

+0

使用'InputStreamReader'。不要忘記考慮字符編碼。更進一步,我認爲現在是通過[Java IO教程](http://java.sun.com/docs/books/tutorial/essential/io/)的時候了。它解釋了你需要知道的要點。 – BalusC 2010-08-10 12:01:00

+0

@CaptnLenz:我建議你只是將數據寫入磁盤,然後在那裏查看。打開一個'FileOutputStream',然後從輸入流中一次讀取一個塊,將其寫入輸出流。然後你可以看看這個文件。 – 2010-08-10 12:30:18

0

好吧,我現在有點聰明:) 問題是:在ServletInputStream是在開始(和結束一行)一些頭信息(作爲內容類型等..)。 是否有切割這些信息的智能解決方案?

問候

+1

新問題應該出現在新問題中,而不是新答案**。這不是一個論壇。你應該刪除這個「答案」,否則它可能會被低估。你最初的問題已經得到解答。不要忘了標記*實際*答案,實際*通過點擊左邊的複選標記來幫助解決問題。另見http://stackoverflow.com/faq。 – BalusC 2010-08-10 12:02:31