まずは、準備として、Eclipse + WTPとAxis2をダウンロード。これは単純にダウンロードするだけ。あと、WTPのテストサーバーとしてTomcatもダウンロードし、Eclipseから動かせるようにしておく。
まず、Elipseの設定からAxis2を設定する。メニューの[Window]-[Preferences]を選択し、左のツリーから[Web Services]のツリーを開き、[Axis2 Preferences]をクリックする。右側のペインに、Axis2のRuntime locationを入力する場所が出てくるので、ダウンロードし、展開したAxis2のディレクトリを選びOKをクリック。これで終了。
あとは、Rational Application developerで解説した方法と同じ。[File]-[New]-[Other...]をクリックして出た来たダイアログボックスから、[Web Services]-[Web Service]を選択。ウィザードが起動するので、適当に選んでFinishとすると、Web Serviceのスケルトンが作成される。
Web ServiceはDynamic Web Projectに作成されるので、Eclipseのプロジェクトを見てみると、ソースファイルと、いくつかの設定ファイルが出来ているのがわかる。ソースファイルの中に、
WebContentにもいろいろとファイルが出来ている。
まず、WebContentの下にaxis2-webディレクトリがある。これは、Axis2の管理用のWebアプリケーションで、サーバーを起動させた後、axis2-webにアクセスして、使うことができる。Web Serviceがきちんとインストールされているかどうか確認したり、エラーメッセージを確認したり、開発時には有用。
WebContent/WEB-INF以下はもっといろいろ追加されている。
confディレクトリには、axis2で使用する設定ファイルであるaxis2.xmlが入っている。Axis2を動かすためにはとりあえず必須のファイル。
また、lib以下に、必要なjarファイル群がコピーされている。数が多いので、バッティングしないように注意。特に、commons系でバージョン違いには要注意。
modulesディレクトリが出てきており、中にAxis2で使用するモジュールが入っている。
servicesディレクトリには、Web Serviceが格納されている。version.aarというファイルは、Axis2用のWeb Serviceを格納したもの。これと、
最後に、web.xml。これもAxis2用に書き換えられている。
さて、では実際に独自のWeb Serviceを任意のWebアプリケーションとともにインストールした場合はどうすれば良いか?必要なのは、web.xmlとconf/axis2.xml、それにバイナリとしてAxis2のライブラリ(jarファイル)とmoduleファイル(modules以下のmarファイル)。それに加えて、実装したWeb Serviceがあればよい。
web.xmlでは、Axis2のライブラリをロードするようにする。これは単純に、自動生成されたweb.xmlから、Axis2関連の以下のところをコピー&ペーストしてくれば良い。
ライブラリ(libディレクトリ)とモジュール(modulesディレクトリ)も自動生成されたDynamic Web Projectからそのままコピーしてくる。ライブラリはともかく、モジュールはいるのか?と思うが、とりあえずなかったら動かなかったので必要なのだろう。必須だったら、jarファイルの中にいれて欲しいのだが。
そして、このAxis2のライブラリを動かすために、conf/axis2.xmlが必要。いろいろと設定ができるが、とりあえず動かすだけなら、コピーすればOK。
ちなみに、WebContent直下に出来たaxis2-webディレクトリは管理アプリケーションなので、Web Serviceを動かすだけなら必要ない。
ここまできたら、後はWEB-INF/servicesディレクトリにWeb Serviceを入れていけば良い。Web Serviceは
これで、Web Serviceは完成。あとは、Serverを起動すれば、Web Serviceが公開され、Axis2からだけでなく、Axis、JAX-WS、.netからも接続できるようになる。ただし、エラーが出ることもあるので、そういうときは長いデバッグ作業が待っている。
ちなみに、良くあるエラーはNull Pointer Exception。リクエストとしてオブジェクトを受け取る場合、クライアント側でちゃんと初期化を行わないと、すなわち、Nullのところにデータを入れておかないと、Axis2のフレームワークのところでNull Pointer Exceptionが発生する。あとは、Classが見つからないこと。lib以下のクラスを使用して、そのままそっちに処理を投げて、いろいろ処理を仕様とすると、aarにあるクラスが読み込めない。結果として、Class not found(ドキュメントを精読していないからなんともいえないけど、servicesディレクトリを読むクラスローダーの親がWebアプリケーションのクラスローダーだから?。
0 コメント:
コメントを投稿