普段はpropertiesファイルを使ってますが、少し前にxmlファイルを扱う機会がありました。
そっちの処理はまたいずれ記事にするとして、今回はxmlファイルの読み込み時に以下のエラーが発生しました。
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
日本語環境だと「プロローグにコンテンツは許されません。」というエラーメッセージになります。
調べてみると、UTF-8
のxmlファイルを読み込もうとしたけどBOM付きだったため、という理由が多かったです。
ところが、複数のテキストエディタでxmlファイルを確認してもUTF-8
のBOM無しだし、バイナリエディタで見ても余計なデータは見つからず、果てにはShift-JIS
にしても同様のエラーでした。
話のオチとしてはつまらないもので、以下のようなコードを書いてて発生しました。
InputStream is = new FileInputStream("hoge.xml");
is.read();
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
xmlの相対パスがあっているかを確認するため、とりあえずreadしてみようと書いてた2行目がまさに原因でした。
このせいでファイルを変にロックしていたのか、表題のエラーが発生していました。消すと通ります。