思わぬ所でバグ発覚
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のエミュレータに付き合っていると殊更そう思う。