AMG Solution

【エラー解決方法】JAXBでXMLファイルが解読できない!?を解決する方法

 
先日バッチでエラーが発生したとメールが送信されてきました。
どうやらXMLファイル取得後に、パースができなくてエラーとなっているようです。
メールの内容は以下になります。

javax.xml.bind.UnmarshalException
– with linked exception: [org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1;
プロローグにはコンテンツを指定できません。]

XMLファイルを取得し、JAXBを使ってオブジェクトにパースしている(unmarshal)のですが、そこでエラーとなっているようです。
エラーとなったファイル以外にも複数個ファイルを取得していますが、なぜか1つだけエラーとなっていました。

エラー発生時のプログラム

17行めでエラーとなっていました。

JAXBとは

JAXB(Java Acrchitecture for XML Binding)
XMLとJavaオブジェクトを相互変換するためのAPIで、Java SE6からは標準ライブラリに組み込まれています。

エラー発生時の環境

エラー発生時の開発環境は以下のとおりです。

言語
Java1.7.0_51

原因

取得したXMLファイルがBOM付きで保存されていたため、unmarshal時に先頭3バイトの文字列が読めずエラーとなっていた。

他にもいくつかファイルを取得しているのですが、エラーとなったファイルは1つだけなので、このファイルだけテキストエディタなどで一度開いてからBOM付きで保存したと思われます。

解決方法

・解決方法1
XMLファイル提供元に、BOM付きでファイルを作成しないように依頼をする。

・解決方法2
やっぱりシステム屋なので、BOM付きファイルに対応したプログラムを作りなおす。

ということでBOM付きファイルが来た場合に、先頭部分を読み飛ばすプログラムを作成しました。

これでunmarshal時にエラーにならなくなりました。

まとめ

仕様書にBOM付きか無しか書いていない場合には、どちらのファイルが来てもエラーとならないようにプログラム側で対応できるようにしておく必要があります。

エラーが出てから気がつくではなく、先に考えておけばよかったなと思います。

まあ今回はBOM無しでという仕様だったので対応していなかったんですけどね・・・。

INOUE'S BLOG

井上剛の記事

井上剛の記事の最新情報をお届けいたします。

SAME CATEGORY BLOG

この記事と同様のカテゴリー記事

新卒採用
はじめました。
LOADING