読者です 読者をやめる 読者になる 読者になる

garbagetown

個人の日記です

[S2JDBC]Maven2 surefire レポート作成時に ArrayIndexOutOfBoundsException

まんま同じ事象にブツかったのですが、s2-tiger 2.4.38 の場合、ML に載っているパッチだけでは他の場所でも ArrayIndexOutOfBoundsException が出てしまったので、念のためにパッチを晒しておきます。
cobertura-maven-plugin がカバレッジ測定用のコードを埋め込んだクラスファイルに対して、getInterfaces() と getGenericInterfaces() を実行すると、取得できるインタフェース数が異なるという問題。
surefire:test ゴールを実行した場合には事象が発生しない事から、cobertura-maven-plugin のバグと思われるのですが、ソースを追ってもよく分からない。
暫定対処として s2-tiger 2.4.38 に下記のパッチを当てることで、期待通りレポートを作成できました。

Index: src/main/java/org/seasar/framework/util/tiger/GenericUtil.java
===================================================================
--- src/main/java/org/seasar/framework/util/tiger/GenericUtil.java	(revision 4376)
+++ src/main/java/org/seasar/framework/util/tiger/GenericUtil.java	(working copy)
@@ -266,7 +266,7 @@
 
         final Class<?>[] interfaces = clazz.getInterfaces();
         final Type[] interfaceTypes = clazz.getGenericInterfaces();
-        for (int i = 0; i < interfaces.length; ++i) {
+        for (int i = 0; i < interfaces.length &&
             interfaces.length == interfaceTypes.length; ++i) {
             gatherTypeVariables(interfaces[i], interfaceTypes[i], map);
         }
 
@@ -298,7 +298,7 @@
 
         final Class<?>[] interfaces = clazz.getInterfaces();
         final Type[] interfaceTypes = clazz.getGenericInterfaces();
-        for (int i = 0; i < interfaces.length; ++i) {
+        for (int i = 0; i < interfaces.length &&
             interfaces.length == interfaceTypes.length; ++i) {
             gatherTypeVariables(interfaces[i], interfaceTypes[i], map);
         }
     }

なんでこれで動くのかはよく分かっていませんが、とりあえずこれで mvn install -Dmaven.test.skip=true したら動きました。