Axis2でサービス公開するプロジェクトを別プロジェクトで利用する時に嵌まった。。。

タイトル通りなのですが、事の経緯をば。。。

 

まず、1つのワークスペース内にプロジェクトAとBを作成します。もちろん、両方のプロジェクトとも、Axis2によるWebサービス構築をしておきます。

で、Aのクラスで公開しているPOJOをA1とします。Bのクラスで、このA1を参照しようとすると、通常はEclipseのプロジェクトファセットに設定すれば、上手く参照できます。ところが、このAプロジェクト内に定義したデータクラス(サービス公開しない、独自定義のクラスなど)をBのクラス内で戻り値、つまり、Bのクラス内のサービスの応答として定義すると、ビルド時点では問題無いものの、EclipseのTomcatを起動したときに、ClassNotFoundを吐きやがります。

すご~~~~~~く悩んで、色々やって、わかったのは、Eclipse上での参照がAxis2のビルドでTomcatから参照できなくなるらしいということ。上記の例で、Bのwarを作成してサーバーにデプロイすると、もちろん、AのwarがBのlibに存在して、エラーにはならない。しかし、Eclipse上でのTomcatだと、これが参照できずにエラーとなる。色々いぢったけど、上手くいかなかった。。。

 

と、ここで考えたんだけど、他サービスのデータクラスって必要かな?ということ。う~ん、実際にあるプロジェクトを複数プロジェクトに分割していった過程で起きたことなので、よ~~~く考えてみると、こんな使い方はするべきではないかなと。別サービスの関数を内部的に利用する事はあっても、別サービスのデータクラスで返すことはしないほうがいい。

 

なので、とりあえず、この問題は放置して、クラスの構成を考えなおして対応しました。

ではでは~。

コメントを残す