2008/4/22

用支援UTF-8 BOM的Reader解決proxool設定檔UTF-8 with BOM的問題

在使用 proxool 的時候,如果用JAXPConfigurator來啟動proxool,通常會用 JAXPConfigurator.configure(new InputStreamReader(proxoolInputStream), false); 這種寫法,但是java.io.InputStreamReader在遇到UTF-8 with BOM的檔案編碼格式的設定檔時,就會產生問題。

在遇到BOM(byte-order mark)的時候,通常都是找個支援修改檔案編碼的Editor來處理,例如我們常用的Emeditor或是EditPlus(參考網站 BOM (Byte Order Mark) 的問題BOM BOM BOMUTF-8),我們的作法,原本就是採Emeditor來使用,但是程式交出去的時候,就常常會遇到客戶直接使用Windows預設的文字編輯器notepad來編輯proxool.xml設定檔的狀況,導致程式在啟動DB Connection Pool就會出問題。

ROME實作了com.sun.syndication.io.XmlReader這個類別,在文件一開始就提到,"It looks for the UTF-8 BOM first.",另外這個類別又是extend java.io.Reader,這就省事多了,因為JAXPConfigurator.configure正好是需要一個java.io.Reader,所以只要把 JAXPConfigurator.configure(new java.io.InputStreamReader(proxoolInputStream), false); 這種寫法,改為 JAXPConfigurator.configure(new com.sun.syndication.io.XmlReader(proxoolInputStream), false); 就可以讓proxool設定檔也相容於惱人的BOM問題。

不想使用ROME的話,也可以使用UnicodeReader and UnicodeInputStream提供的程式。