思わぬ所でバグ発覚

Java 6 Update 18(jump先がSunではなくOracleのロゴになっているのが....)

早速アップデートしてみたが、いきなりアプリケーションが例外を吐くようになってしまった。

箇所は今回のアップデートで変更の対象になっているStAX

XMLStreamReader reader = factory.createXMLStreamReader(ins);
try {
    while (reader.hasNext()) {
        //エレメントのパース処理
        
        reader.next();
    }
} finally {
    reader.close();
}

このようなコードがあるとしてreader.next()で落ちる。

java.util.NoSuchElementException: END_DOCUMENT reached: no more elements on the stream.
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:547)

XMLStreamReader#nextメソッドのドキュメントを見ると

例外: 
   NoSuchElementException - hasNext() が false を返したときに呼び出された場合 
   XMLStreamException - 基本となる XML ソースの処理にエラーが発生した場合

ということで、hasNext()がtrue真を返す場合はNoSuchElementExceptionはスローされないはずなので、デバッグして見ると、確かにfalseが戻っている。

ということは今まではEND_DOCUMENTに到達していても例外を投げていなかったのが、正しくFixされたということか。
SDKのバグだと思ったら自分のバグだった、というよくある光景。

それにしてもSwingで書いたアプリは起動も動作も本当に速く、機敏になったよな。
Androidエミュレータに付き合っていると殊更そう思う。