あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

XMLスキーマ変換ツール trang を使ってみた。

スキーマの種別は指定する拡張子で判断してくれるようだ。
比較的単純な XML だと問題なくスキーマを作成してくれたが
巨大で複雑な(1500行くらいある)XMLを指定すると、ConcurrentModificationException が発生した。

$ java -jar trang.jar foobar.xml foobar.dtd
Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
        at java.util.AbstractList$Itr.next(Unknown Source)
        at com.thaiopensource.relaxng.input.xml.Inferrer.<init>(Unknown Source)
        at com.thaiopensource.relaxng.input.xml.Inferrer.infer(Unknown Source)
        at com.thaiopensource.relaxng.input.xml.XmlInputFormat.load(Unknown Source)
        at com.thaiopensource.relaxng.input.AbstractMultiInputFormat.load(Unknown Source)
        at com.thaiopensource.relaxng.translate.Driver.doMain(Unknown Source)
        at com.thaiopensource.relaxng.translate.Driver.main(Unknown Source)

java.util.ConcurrentModificationException
イテレーション中にコレクションが変更された場合に発生する例外
なので、XMLの要素を繰り返し処理する部分で別スレッドから更新されて
発生しているのかもしれない。