企業提供API呼出クラスとSAStrutsを併用する際には要注意
現在、某グループウェア大手の製品をスマートデバイスから扱うアプリを開発しているんですが、これが上手く動かなくてしばらく悩んだのでメモ書き。
SAStruts上で、この企業から提供されたAPI呼出jarを用いて呼び出そうとしたら、実行時にNoClassDefFoundErrorが発生していました。「com.xxxxxx.xxxxxx.common.Action」というクラスが無いと言われるんですね。jarにはちゃんとパスが通っている、jarの中を開いてもちゃんとクラスが確認できる、でもクラスが無いと怒られる。なんなんだいったい!?
で、結論なんですが、無いと言われているクラスを「com.xxxxxx.xxxxxx.common.XXXAction」のように名前を変更→再コンパイル→jar化して参照するようにしたら事態を解決できました。
要するに、SAStrutsとAPI呼出jarで「Action」というクラス名が被ってて、一方しか参照できなくなっていたようです。
今回の対処法はいくつか問題があります。
一応は解決を見たけど今後運用まで考えると、あんまり円満解決ともいえない事例でした。あー、すっきりしない。
追記
この後もNoSuchClassExceptionだのNoSuchMethodErrorだのが出まくっててるので、名前の衝突とかじゃなくてjarのつくりが悪いだけな気がしてきた。この企業はサポートも非常に悪いので、おそらく二度と使わないと思う。