13F

備忘録

DbUnitとApache POI

2007-08-20 19:55:38 | Weblog
DbUnit 2.2 で XlsDataSet を使おうとしたら、どこもおかしいところが無いのに NoSuchColumnException が出て困った。

調べてみたら、XlsDataSet が内部で使っている Apache POI 2.5.1-final に 「セルから読み取った値の最後に空白が入ることがある」というバグ があり、このためにどこかカラム名の一致をとっているところで失敗しているらしいことがわかった。試しに POI を 3.0.1-FINAL に更新してみたら一応直ったみたい。時間が無くてどこでどう直ったのが見れてないからちょっと気持ち悪いんだけど。

ちなみに Maven2 だと DbUnit の transitive dependency(推移的依存性?)のために固定で 2.5.1-final が使われてしまう。これを回避するには、以下のように明示的に DbUnit の dependency を除外してから、自分で POI 3.0.1-FINAL の dependency を書けばいいようだ。
<dependency>
  <groupId>org.dbunit</groupId>
  <artifactId>dbunit</artifactId>
  <version>2.2</version>
  <scope>test</scope>
  <exclusions>
    <exclusion>
      <groupId>poi</groupId>
      <artifactId>poi</artifactId>
    </exclusion>
  </exclusions>
</dependency>

それにしても、DbUnit 関連で検索すると全く情報が無かったんだけど誰も困っていないんだろうか……。普通は POI の 3.0 系を使うから無問題で、Maven2 で依存関係の自動解決をしていることが逆にアダになったのかな?