2013-01-02 56 views
0

我正在編寫一個測試和舊代碼的junit測試。此代碼適用於我們的iplanet web服務器和我們的本地Tomcat服務器,並且運行時沒有任何問題。但是,當通過JUNIT測試運行時,我得到這個異常。SAXParseException只發生在本地。在WebServers上工作

背景:它從JAR中提取XSL文件,然後使用從資源文件讀入的xml文檔進行轉換。

我曾嘗試更改變壓器工廠,更改編碼,並使用十六進制編輯器檢查所有文件爲空字符。有任何想法嗎?

[致命錯誤]:2251:46:在屬性「test」的值中找到無效的XML字符(Unicode:0x0),並且元素爲「xsl:when」。 SystemId未知; #2251行;第46列; org.xml.sax.SAXParseException; lineNumber:2251; columnNumber:46;在屬性「test」的值中找到無效的XML字符(Unicode:0x0),元素爲「xsl:when」。

* * UPDATE 我發現,如果我用項目的類所在的文件夾XSL保持並移動其對罐子的依賴它的工作原理,但如果它使用XSL出來的罐子它打破

+0

確保您的JUnit測試主機中的庫版本與您的Tomcat和iPlanet服務器上的版本完全匹配:) – paulsm4

+0

他們這樣做。這是我看到的第一件事。 – user1943539

回答

0

這是因爲我試圖轉換的XSL文件仍然在JAR中。我必須讓Maven先將文件解壓到目標目錄中。

0

建議:

1)確保您的圖書館版本全部匹配。

2)我懷疑「發現一個無效的XML字符(Unicode:0x0)」可能是由幾個完全不同的東西中的任何一個造成的。你應該調查他們每個人。

3)首先,最明顯的 - 檢查你輸入一個空字符:)

4)其次,檢查你的編碼 - 也許你的發件人寫UTF-16,但你的讀者期待UTF- 8。這裏有一個很好的鏈接:

* Error about invalid XML characters on Java

這是一個編碼問題。要麼你把它看作是UTF8 的輸入流,它不是或者相反。

您應該在閱讀內容時明確指定編碼。 例如通過

new InputStreamReader(getInputStream(), "UTF-8")

另一個問題可能是tomcat的。嘗試在server.xml文件中

5)的根本原因也可能是一個失敗的讀取或某種形式的缺失對象添加URIEncoding="UTF-8"在 你的tomcat的連接器設置。也許是一個缺失的定義。

問:什麼是「SystemId」?什麼可能導致它「失蹤」?

6)一種可能性是, 「resolveEntity()」 失敗:

InputSource resolveEntity(String publicId, String systemId)

這裏有一些關於這個問題的鏈接:

7)這兩個鏈接都暗示「resolveEntity()可能會失敗,因爲您無法連接到指定的主機。檢查XML中列出的網絡主機名,並確保可以「ping」它們。

+0

我不確定systemId是什麼意思。我已經看到在其他地方列出了這個錯誤。我不認爲有什麼遺漏,因爲確切的代碼在服務器上運行良好。我將檢查我的代碼,以確保在測試代碼之前沒有可能導致它的一小段代碼。 – user1943539

0

如果直到第2251行爲止,則強烈建議該位置周圍的文件內容出現問題。如果該位置的文件沒有問題,我的下一個建議是解析器出現問題。我知道這聽起來很瘋狂,但內置於JDK的XML解析器非常麻煩,如果您將Apache版本的Xerces安裝到位,我會檢查問題是否消失。在許多情況下,這只是將相關的JAR文件放入JDK安裝的lib/endorsed目錄中的問題。

+0

謝謝,這清除了一些錯誤。現在又引發了另一個問題:「元素類型」xsl:text「的結束標記必須以'>'分隔符結束。」我查了一下,'>'位於它說的不是的地方。 – user1943539

+0

我接受了xsl文件及其轉換後的XML文件,並使用了一個在線轉換器,它完美運行。 – user1943539

+0

很明顯,有一些奇怪的事情發生,如果沒有更完整的信息,我們將無法幫助識別它。 –

相關問題