2012-06-14 52 views
0

我使用的Xerces2 Java和有XMLGrammarCachingConfiguration。我正在使用它通過調用parseGrammar來將XML模式(xsd)解析到語法池中。它很好地解析了xsd文件,但是它向stderr報告了所有錯誤和警告(我正在使用Eclipse,因此它在控制檯中被捕獲)。我設法改變我的xsd,以便它會有一個致命錯誤,並且如預期的那樣拋出了我的應用程序可能捕獲的XNIException。當我調用XMLGrammarCachingConfiguration.parseGrammar()時,如何捕獲stderr輸出?

我一直在使用該方法XMLGrammarCachingConfiguration.setErrorHandler(),並通過它,我用我自己的PrintWriter構造DefaultErrorHandler嘗試。我也嘗試傳遞自己的實現XMLErrorHandler接口的自定義錯誤處理程序。它仍然出現在控制檯中,而不是在我的PrintWriter正在使用的文件中。

這似乎應該是這麼簡單。有人能告訴我我做錯了什麼嗎?

- 編輯: 我應該補充一點,我使用自定義的XMLEntityResolver,並且我想捕獲的錯誤消息是當我的解析器無法解析實體,並且從其resolveEntity返回null( )方法,這意味着默認實體解析器正在嘗試解析它。即錯誤消息來自底層默認實體解析器。

回答

0

OK,我設法解決這個問題。我需要做的是創建我自己的XMLErrorHandler,然後這個技巧就是如何註冊它。

它需要與XMLGrammarCachingConfiguration的XMLErrorReporter進行登記,但以訪問,你需要調用

XMLGrammarCachingConfiguration.getProperty("http://apache.org/xml/properties/internal/error-reporter") 

然後抹上你回到一個XMLErrorReporter的對象,然後調用

XMLErrorReporter.setProperty("http://apache.org/xml/properties/internal/error-handler", customHandler); 

就這麼簡單。

相關問題