最近在使用javax.xml.parsers.DocumentBuilder解析xml文件的時候偶爾會出錯:
跟蹤了一下代碼,發現這個異常是在com.sun.org.apache.xerces.internal.parsers.DTDConfiguration.parse(DTDConfiguration.java:546)拋出來的。該段代碼結構如下:
從程序邏輯來看,如果當前DocumentBuilder對象正在轉換文檔,此時再次請求轉換文檔,那么直接拋出XNIException(“FWK005 parse may not be called while parsing.”);異常。
這個問題也比較好解決,一種是對轉換xml文檔的方法,增加synchronized關鍵字,這樣子不會有兩個線程同時訪問方法。
還有一種方法是創建一個DocumentBuilder類型的ThreadLocal變量,這樣子每個線程都擁有自己的DocumentBuilder對象,能夠同時轉換多個xml文件。代碼如下:
Powered by: BlogJava Copyright © wilesun