2008年2月21日木曜日

Content is not allowed in prolog.エラー

あるアプリケーションでiBATISを使用しているのですが、いつの間にかXMLで書かれた設定ファイルを読み込む際に例外が発生するようになり、動かなくなってしまいました。
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:215)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:386)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1438)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(XMLDocumentScannerImpl.java:899)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:250)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:292)
at com.ibatis.common.xml.NodeletParser.createDocument(NodeletParser.java:157)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:50)
... 16 more

XML自体に問題はなく、なぜ例外が発生するようになったのかまったくわかりませんでした。

で、Webを調べているうちにUTF-8で保存している場合の注意点を見つけました。BOM付きのUTF-8で保存した場合に上記例外が発生するようです。早速、BOM無しで保存すると、何事もなかったかのように、正常に動き出しました!左の画像は、サクラエディタの場合です。ファイルを保存するときにBOMのチェックボックスがあるので、これを外すとBOM無しになります。

同じような問題で悩んでいる方、是非お試しください。

0 件のコメント: