目次へ

English Version

アクシス・ボンバー: 激闘NB4編

NetBeans3.6でらっくらっくApache Axisの「アクシス・ボンバー」,御好評をいただいているようでございます。しかし今度出たNB4ではそうは問屋がおろさないようだ。ていうか卸せよコラ!ちくしょう意地でも卸させてやる。ということで変わり果てたNB4.0で 無理やり,Apache Axisを動かす!おそらくこれ以上積み上げられないほどの大ドラマになったので,書き下ろし。上から下にヨンさま

注意:NB4(rc1を使用)は,J2SE1.4で動かしています。
Axis1.1を使っていますが, JDK5.0では,マジでできませんでした。
最近出たAxis1.2なら,JDK5でもバッチシ。かどうかわからんが動きます。

/Axisプロジェクトの作成/jwsファイルによるWebサービス /Webサービスの開始/クライアントプログラムの作成:GUIの編集/クライアントプログラムの作成:クラスパスの設定/クライアントプログラムの作成:ソースコードの編集/jwsの利用はオケだ!/WSDLを使うためのプロジェクトとJavaプログラムの作成 /Axisツールを使うための設定ファイルの編集/尻馬Free-formプロジェクト/Java2WSDLを実行/WSDL2Javaを実行/AdminClientによるWebサービスデプロイの謎/より納得の行くAdminによるデプロイ /WSDLを使ったクライアント用ファイルの作成/GUIクライアントプログラムをもうひとつ作成//

Axisプロジェクトの作成

Apache Axisはバージョン1.1を使用。 バイナリプロダクトをもらってきて展開して"axis"ディレクトリを得るまでは,みなさんにおまかせヨ。
その"axis"ディレクトリを適当な場所に置く。 ここでは,e:\nonidata\nb4rcworks\axisというふうに置いた。

さてNB4だ。「既存のソースからのWebプロジェクト」てヤツを使う。

「ソースのある場所」はすなわちWebモジュールのドキュメントルートと考えてよいようだ。ここでは上の「axis」ディレクトリを選ぶ。

Project Nameはaxisproj.

あ。ごめんださい。Project Folder の設定これでは間違いです。E:\nonidata\nb4works\axisproj が正解ですね。

なお,rc1ではディレクトリを選ぶ際に日本語のファイルがオール豆腐化けしますが,今NB.ORGのおニイさんおネエさんたちが必死こいて直してくれているはずなので長い目で見てネ。

ちゃんと選ぶと,ウィザードはWebの構築に必要なものを自分で探してくれる。

J2EEは1.3でまあいいでしょう。ということでプロジェクト作成!できあがったaxisprojプロジェクトの階層がこれだ。「Projects」ウィンドウで見たものだが,むちゃくちゃでかい。

 まだ下に続く。


jwsファイルによるWebサービス

では,まずはAxisの必殺技,jwsファイルでお手軽Webサービスを行って見よう。NB4はやはりjwsファイルというものの素性を知らぬようだ。上の図で「Web Pages」 を右クリックして「New」->「Empty File」だ。

するとこのファイルはaxisディレクトリの直下にできてくれる。一番下にご注目いただきたし。

このwsone.jwsの中味はこうだ。

javaファイルと認識していないので,色分けも補完もしてくれないのが,ちょとさみしい。名前を送信すると「Go Go! 名前 」と励ましてくれるサービスである。


Webサービスの開始

AxisによるWebサービスを開始するには,この「axisproj」を右クリックして「Run Project」とやればよい。内蔵Tomcat5.0.28が立ち上がって,Axisにより用意された初期画面をブラウザで見ることができる。ブラウザはまあ,閉じてよいだろう。

AxisがTomcatに配備されたことは,「Runtime」ウィンドウで猫をひっくりかえしてみればわかる。


クライアントプログラムの作成:GUIの編集

実はWebサービスの勉強をするのにめんどっちいのはむしろクライアントプログラムの作成だ。おまけにNB4の場合コンソールから実行すると蟻がうるせえ。NB4には「蟻を黙らせろモード」を設定することもできるようだが,スクリプトが間違ったときはやはり原因を知りたい。ということで今回は,Webサービスの応答をコンソールではなく,作成したGUIプログラム上に出力させることにした。

まず,クライアントプログラムのためのプロジェクトを作る。これはフツーのJavaプロジェクトである。「axisclient」というものだ。フツーのプロジェクトの作成方法は,こちらをゴランクダサヒ。 このプロジェクトも,Main ProjectやMain クラスの作成については

よけいなお世話ダッ

と叫んでよろしい。作成したら,「axisclient」の「Source Packages」を右クリックして,新規JFrameフォームを作成する。

クラスの名前はClientOne,パッケージはclientにする。

Frameでどうもゆーづーがきかねえのはコンポーネントの割付だ。最終的にはこのようなウィンドウにしたい。

テキストフィールドに名前を入力してSendボタンを押すと,その名前がWebサービスに送信され,戻ってきた結果をテキストエリアに表示する,というものだ。

最低限の設定で優雅な割付ができればいいのだが,無骨なわたしはこのようにした。
JFrameはデフォルトでBorderLayoutをとるので,そのNorth, Center, SouthにJPanelをバシバシ割付ける。

割り付け方は,上のパレットから「JPanel」アイコンをクリックし,次にフォームをクリックする。このとき,上のほうをクリックするとNorth, 真ん中へんをクリックするとCenterに自動で設定される。Southがちょっと厄介だ。Centerに割り付けられたパネルがでかいので,下のほうをクリックしたつもりでもCenterのパネルの階層化に隠れてしまうかも知れない。

こういうときは,このノードをドラッグして[JFrame]ノードの真上で落とす。

それらのパネルにラベル,テキストフィールド+送信ボタン+,テキストエリアをそれぞれ載せるわけだ。JPanelはFlowLayoutつまり,横に並べていって並びきらなければ下に,というのがデフォルトだから,テキストフィールドとボタンはただ放り込んでやれば横に並ぶ。

コンポーネントの名前も,それぞれわかりやすいものに変える。

デフォルトでは,各コンポーネントを詰めるだけ詰めるという方針だ。だから,ラベルが「ボ」だけのボタンは一字分の大きさしか与えられないし,空白のテキストフィールドやテキストエディタは表示すらされない。それでは困るのでまずJFrameの大きさを一定にしておく。JFrameのプロパティウィンドウで「Code」画面を出し,「Form Size Policy」を「Generate pack()」から「Generate Resize Code」に変更する。

これでJFrameのサイズは幅400,高さ300に決定する(そして変えたい場合は変えられる)。

そして,各コンポーネントの大きさを指定すれば,それが載っているJPanelはそれに合わせてくれるようだ。たとえばテキストエリアの大きさはこのようにpreferredSizeで指定する。

テキストフィールドの大きさも同様適当に指定する。ラベルやボタンは元から文字を設定するので適当な大きさになる。たとえばラベルの文字は

どっしぇえ。日本語入れるとトーフ化けするし。でもTooltipにちゃんと現れてくれるからちょっと助かる。そして上記のようにフォーム上にはちゃんと日本語で出てくれる。

だいぶハショりましたが,GUI編集についてはまたどこかで。早くWebサービスにつながるかどうかやってみないとね。


クライアントプログラムの作成:クラスパスの設定

Webサービスに接続して応答文字列を得るためのコードを書く必要がある。そのためにはWebサービス関係のクラスパスを設定しておかなければならない。

この試みでは他にもいくつかプロジェクトを作る予定である。そこで,共通のクラスライブラリを作ることにする。

メニューバーから「Tools」->「Library Manager」というものを選ぶ。

Library Managerというウィンドウが出てくるので,まずこの大き目のウィンドウの下のほうにある「New Library」というボタンをクリックして,「AxisLibrary」というライブラリを新規作成する。

 もう作っちゃってあるけど。

この「AxisLibrary」について,「Add JAR/folders」で導入するWebサービス関係のjarファイルを設定する。豆腐化けにめげず,axis/WEB-INF/lib内のファイルを全部選ぼう。

このように共通のライブラリを作ったら,以後はプロジェクトを作るたびにこのライブラリをクラスパスに指定すればよい。

このクライアント用プロジェクトaxisclientに,それをやろう。「Projects」ウィンドウでコードを右クリックして「Properties」を選ぶ。プロパティーウィンドウが出るので左のリストで「Compiling Source」をクリック。右側の「Classpath for Compiling Sources」の横のボタン「Add Library」ボタンをクリック,リストから「AxisLibrary」を選ぶ。「OK」でクラスパスの設定は完了だッ。

 


クライアントプログラムの作成:ソースコードの編集

というわけでここらでクライアントプログラムのソースコードを編集する。それには上のほうにあるこのタブ?を切り替える。

記述するのは,まずWebサービスに接続して文字列を送信,応答文字列を得るためのメソッド。まあ適当な場所に書く。

public String getOutputString(String inputString){

String outputString="";

try{

String endpoint="http://localhost:8084/axis/wsone.jws";
Service service=new Service();
Call call=(Call)service.createCall();

call.setTargetEndpointAddress(new URL(endpoint));

outputString=(String)call.invoke("getString", new Object[]{inputString});

}

catch(Exception ex){

outputString=ex.toString();
ex.printStackTrace();

}

return outputString;

}

ここの編集では,コードを全部書いてから,アレをやった。適当なところを右クリックして「Fix Imports」

すると,インポートするもののリストが表示される。気をつけて選ぼう。

応答文字列を取得したら,またGUI編集モードに戻って,Sendボタンをダブルクリックする。
すると,ソースコード編集に自動で切り替わり,Sendボタンがクリックされたときのイベント処理を記述するように促される。

ここに一行,

outputText.setText(getOutputString(inputField.getText()));

と入れてやる。

これでクライアントプログラムは完成だ。


jwsの利用はオケだ!

ではコンパイルして実行してみよう。Webサービスはさっき立ち上げてある。「Project」ウィンドウで「ClientOne」ノードを右クリック,「Run File」を選べばよい。

「のに子」と入力して送信ボタンを押した結果である。オッケー。動いたッゼー。


WSDLを使うためのプロジェクトとJavaプログラムの作成

 次は, WSDLを使ったサービスだ。そのためのプロジェクトを立ち上げる。名前はaxiscommandsプロジェクト,プロジェクトの種類はフツウのJavaアプリケーションかJavaクラスライブラリである。両者の違いはどうやらmainクラスをプロジェクト中に用意するかしないかの違いだけのようだ。

作成したら,そこにws2local.WSTwoというJavaクラスを新規作成する。

この中味をこう書く。

package ws2local;

public class WSTwo {

public String getString2(String name){

return null;

}

}

そう。戻り値はここで編集しても,結局WSDLに変換してまたJavaプログラムに戻したときnullになってしまうから,最初からかかない。


Axisツールを使うための設定ファイルの編集

次に,AxisのWSDL関係のツールをNetBeans上で実行するための設定をする。3.6だと非常にカンタンであることは拙著「はじめてのNetBeans(工学社)」に書いたとおりである。それが4.0になると,ソースのないクラスを実行することができなくなってしまった。これについては「じゃじゃ蟻ならし」に書いたとおりである。

しかしなんとか右クリックでJava2WSDLとかWSDLJavaとかを実行できるようにする。

まず,このプロジェクトの「Properties」の「Runnning Project」について項目を設定する。

まず,作業用ディレクトリの設定だ。クラスWsTwoは実行するためのものではないので関係ない。Axisのツールを実行するためのディレクトリということだ。axisWebモジュールのWEB/INFディレクトリで行うように設定する。

また,上記クライアントプログラムでやったように,ライブラリ「AxisLibrary」をクラスパスに加えておく。

いよいよ設定ファイルの編集だ。「Project」ウィンドウじゃなくて「Files」ウィンドウを表示させ,「axiscommands」プロジェクトの「nbproject」ノードを見てみよう。

 「Files」ウィンドウでないと「nbproject」ディレクトリは見れない。

このproject.propertiesを編集。ファイルの末尾に,これから使おうというAxisのクラスとその引数を書く。

上の3つの「main」は,Axis中のクラスのなんつーのフルネームだ。間違いやすいと思ったら,こうすればよい。

これはたとえばAdminClientのクラス名を書き出す方法だ。Webアプリケーションプロジェクト「axisproj」はlibフォルダにaxis.jarを持っている。それを解析するところまでは,NB4でもできる。AdminClient.classのノードのプロパティを出してみよう。設定できるものはほとんどないが,Class Nameを参照することはできる。これをそっくりコピーして,プロパティファイル上にペーストしてやればタイプミスはない。

吉野家で豚丼を食っているような一抹のさみしさがあるがなッ。

下の3つの「args」はそれぞれのクラスを使用するときの引数だ。ここではみなさんAxisの使い方はご存知と仮定していて,ただそれをNB上でどのようにGUI化するかを提案するという主旨なので詳しい説明はゴメーヌ。ちなみにこのサービスの名前はWS2Serviceとしたのを,引数からご確認いただき鯛。

次にbuild-impl.xmlを書き換える。実はNBではこのbuild-impl.xmlは絶対に編集しないでbuild.xmlのほうにオーバーライドするカタチで書いてくださいと書いてあるが

御意見無用自己責任

デコトラの電飾風に宣言して得意になっていたら,このページの英語版を御覧くださったNetBeansのエライ人でsun.COMのメアドを持つ方にメールをいただき

「なぜbuild-impl.xmlを編集する必要があるのかい。build.xmlを編集しても何も問題はないじゃないか」と

しかられた

スイマセン。そそくさと直します。

「じゃじゃ蟻馴らし」を御参照いただけるとありがたいデス。<-参照しやすいように別ウィンドウが開くようにしたゾ。

だって〜。build-impl.xmlの

<!--
=================
EXECUTION SECTION
=================
-->

にある記述をすぐ下にコピペするほうがラクだったんだも〜ん。でもbuild.xmlのほうにペーストして編集する。

ターゲットrunj2w, runw2j, deployserviceはそれぞれ以下のようなコマンドを実行するためのものだ。

org.apache.axis.wsdl.Java2WSDL -o ws2.wsdl -lhttp://localhost:8084/axis/services/WS2Service -n urn:ws2ws ws2local.WSTwo

org.apache.axis.wsdl.WSDL2Java --server-side --output classes ws2.wsdl

org.apache.axis.client.AdminClient -p 8084 classes/ws2ws/deploy.wsdd

「classes」というのは相対パスだ。「WEB-INF/classes...」と考えればピンと来るデショ。「ws2ws」というのは新しく作成されるJavaファイル群のパッケージ名と考えていただければよいが,「ws2local」に対してWebサービスで使うためのws2...というニュアンスです。
また,内部Tomcatのポートは8084なので,AdminClientにはポートを指定する引数がついています。

「ははーん,だんだん魂胆がわかってきたぞ」と皆さん,ももわれましたでしょうか?


尻馬Free-formプロジェクト

このようにすばらしく設定を書き換えたプロジェクトだが,このままでは全然使えねえことがこれまでの経験により判明している。バグか?仕様か?フツーのプロジェクトは設定をどう変えてもフツーの動きしかしようとしないのだ。加えた設定をフルに使うには,このプロジェクトを元にした「Free-formプロジェクト」をさらに作成しなければならない。「じゃじゃ蟻」にも出したが再掲しよう。

プロジェクトの名前はaxiscommandprojにした。まぎらわしくてスミマセン!

大事なのは,「Location」と「Build Script」だ。前者は元になる「axiscommands」の「nbproject」ディレクトリ,後者は「axiscommands」直下の「build.xml」にする。そしたらまあプロジェクトフォルダはどこにやっても構わない。ここでは間違ってヘンナところにやってしまった。axiscommandsのnbproject内に寄生させることになるとは・・・でもこうしておけばむしろ「axiscommand」ディレクトリをバックアップしておけばどっちのプロジェクトもバックアップされるわけだからいいのか!?!?!?とにかく作っちまったものは仕方がない。二足歩行の蟻(に見えない?)アイコンを右クリしてプロパティを出せッ!

「Build and Run」の項目設定だ。親プロジェクト,と言おうか参照元プロジェクト,と言おうか,「axiscommands」プロジェクトに作った各俺ターゲットに,いかにもメニューアイテム風なラベルをつける。

これでサーバ側の準備は整ったゾ!!


Java2WSDLを実行

ではJava2WSDLを実行しよう。二足歩行の蟻「axiscommandproj」プロジェクトアイコンを右クリックする。すると,今ラベルをつけた三つのメニューアイテムが現れる。そこで「Java2WSDL」を選ぶ。

コンソールの応答はただ「Build SUCCESSFUL」だろう。だがこんなものは信用できない」。蟻としてはとにかくコマンドを出せば自分の仕事は終わったものとして「Build SUCCESSFUL」を出してくるわけだからな。本当にWSDLファイルはできたのか?

おお,できている。中味もちゃんと書いてあるかどうか確認してクダサヒ。


WSDL2Javaを実行

ならこんどはWSDL2Javaだ。先ほどのようにメニューから実行してみよう。蟻が終了宣言を出したら,「WEB-INF/classes」を開いてみる。

ホラ,ws2wsパッケージができている・・・といいたいところだが,実はちょっとコイツのリフレッシュは遅いかも知れない。出てこない場合は,「Projects」じゃなく「Files」ウィンドウで見ればすぐに確認できる。ついでだから中味も開けたショットを。

Webサービス関係のクラスが全部できたッ。ではこのWS2ServiceSoapBindingImpl.javaを編集。

return null; とあるのを,今度は実際の応答文字列を返すようにするだけだ。

ではこのws2wsパッケージを全てコンパイル。「ws2ws」ノードを右クリックして,「Compile Package」を選ぶ。beta2にはなかったメニューだ。開発者さんたち,忘れていたんだネ・・・人の子だネ・・・とにかく,全部コンパイルされましたでショーカッ!?


AdminClientによるWebサービスデプロイの謎

ではAdminClientを使ってこのWebサービスをデプロイする。せっかく作ったんだからなッ。右クリックイェーだ!じゃわからねえって。「axiscommandproj」プロジェクトアイコンを右クリックして「Deploy Service」を選んでイェーだ!

今度は蟻以外のものも答えたらしい。このコマンドが成功すると,axisのWEB/INF/server-config.wsddファイル(なければ新規作成される)にWS2Serviceに関係する記述が・・・あれ?

server-config.wsddファイルがない。

だが,これで,下記に示すようなクライアントファイルを作って接続を試みたところ,ちゃんとWS2Serviceから応答が帰ってきた。なぜなぜなぜ?と思って探したら,実はこんなところにあった。

そう。axisprojの「build」ディレクトリ・・・正確には「E:\nonidata\nb4rcworks\axisproj\build\web」ディレクトリに,「E:\nonidata\nb4rcworks\axis\」ディレクトリのコピーができていた。

このめんどくさいディレクトリ構造を見やすくするには,「Favorites」ウィンドウを使えばよいだろう。使い方は「じゃじゃ蟻」に書いてあるので御参照いただきたい。ここに,今回一連のプロジェクトディレクトリを置いてあるオオモト「nb4rcworks」ディレクトリを登録すれば,このようにディレクトリ構造が明確になる。これはよい。OSの使えねえファイルブラウザを使っていたときよりずっと便利になった。

いや,全く同じではない。後者にはTomcat5.dpfなんちゅう謎なファイルができている・・・AdminClientが,そこにserver-config.wsddを作った,ということは,NetBeansの内蔵Tomcatで動いているWebモジュールの正体は,どうやらこっちらしい。


より納得の行くAdminによるデプロイ

もしかすると,Linuxなんかでは上のAdminClient

Unauthorised(401)

というエラーが出るかも知れない。拙著「はじめてのNetBeans」で同じことをやったときはSUSE LINUX 9.1でやって問題なくうまく行ったのだが,今度はダメだった。Axisのバージョンは同じだから,Tomcatのせいなのかな?わかーんなーい。だが,解決法はある。

org.apache.axis.util.Admin

というのを使うのだ。実は,WSDL2Javaで作成されたdeploy.wsdd(WEB-INF/classes/ws2/にある)を見てみたまへ。こんなことが書いてある。

<!-- Use this file to deploy some handlers/chains and services -->
<!-- Two ways to do this: -->
<!-- java org.apache.axis.client.AdminClient deploy.wsdd -->
<!-- after the axis server is running -->
<!-- or -->
<!-- java org.apache.axis.utils.Admin client|server deploy.wsdd -->
<!-- from the same directory that the Axis engine runs -->

二つの方法があり,axisサーバが動いているときはAdminClient, あるいはAxisエンジンが動いているサーバにチョクでかましたければorg.apache.axis.utils.Adminを使いタマヘと書いてあるのだ。

そこでこれを使ってみよう。さきほどのaxiscommandsプロジェクトのproject.propertiesファイルにこう追記する。

main.admin=org.apache.axis.utils.Admin
args.admin=server classes/ws2ws/deploy.wsdd

org.apache.axis.utils.Adminにはserverとclientという二つの引数の取り方がある。このうち引数をserverにすればserver-config.wsddにサービスが登録される。clientにするとclient-config.wsddというものにサービスが登録されるらしい。これは使ったことがないが,クライアント側でもWebサービスの利用に関する詳細な設定をするためのもののののようだ。

同様,build-impl.xmlファイルをヤッちまえッ。

<target name="deploydirect" depends="init,compile" description="Using Admin">

<j2seproject:java xmlns:j2seproject="http://www.netbeans.org/ns/j2se-project/1"
classname="${main.admin}">

<customize>

<arg line="${args.admin}"/>

</customize>

</j2seproject:java>

</target>

と,書く。そして,これを参照するFree-formプロジェクト「axiscommandproj」 のメニューに,作成したターゲットdeploydirectを登録,ラベルは「Deploy directly(ディレクトリじゃなくてダイレクトリ〜)」 にする。

「axiscommandproj」ノードを右クリックしてメニューから「Deploy directly」を実行してみよう。これはちょうど

org.apache.axis.utils.Admin server classes/ws2ws/deploy.wsdd

を実行したことになる。すると

ややややや

今までなかったものができている。

そう。今度はちゃんとWebモジュールのほうにserver-config.wsddができているのだ。LinuxでUnauthorizedをヤラれた人もこちらでは大丈夫なはず(ワタシは大丈夫だった)。この違いは,やはりAdminClientが8084(外部Tomcatなら8080だね)ポートにアクセスしてなにやらなしているのに対し,こっちではディレクトリに直接作業をするという違いであろう。

ちなみに,というかだから,というか,これをWebアプリケーションに登録するためには,「Build Project」->「Redeploy Project」をやらないといけないヨ。

Build Projectをやったときの応答例だ。Webプロジェクトの作業場つまりここでは「E:\nonidata\nb4rcworks\axis\」の内容が,「E:\nonidata\nb4rcworks\axisproj\build\web」にコピーされているようだ。このことからも,実際のWebアプリケーションとして動いているのは,後者buildディレクトリ下の内容であることが推察される。

まぎらわしい!?

ああ!俺もつくづくそう思うヨ!


WSDLを使ったクライアント用ファイルの作成

なんとかWebサービスを動かすところまでは行ったようなので,今度はクライアントの作成。もちろんせっかくWSDLファイルを作ったんだから,これを使うんだヨ。つまり,WSDL2Javaをクライアントサイドで使うんダ!

さきほど作ったaxisclientプロジェクトにその仕事をさせよう。まず,Webプロジェクトaxisproj中に作成されたws2.wsdlファイルを,このプロジェクト中に置く。srcディレクトリの直下つまり「Source Packages/default Package」でよいだろう。

axisclientのnbproject/project.propertiesファイルにこう書き込む。

また,buildl.xmlファイルにこう書き込む。

ちとタグの位置がずれたりしているあたりに,こう,うんざりしながら編集している様子が現れているでせう。

また,いままで作業用ディレクトリを明示しなかったこのaxisclientプロジェクトのプロパティを編集し,作業ディレクトリを指定する。

これで,WSDL2Javaコマンドにより作成されるファイルは,axisclientプロジェクトのsrc(「Projects」ウィンドウ上で「Source Package」ノードとして表示される)ディレクトリの下に置かれるであろう。

で・・・そう。さらに,このプロパティとビルドファイルを利用する尻馬プロジェクト(「尻馬に乗る」は「けんもほろろ(漢字すらわかんねえ)」よりはポピュラーな日本語でしょう)を立ち上げる。その名もaxisclientcommand...

ゴメヌ。もう命名めちゃくちゃ。

とにかく作るんだヨ!そしてメニューに上のターゲットcreate_client_filesを「Create Client Files」という名前でメニューに登録する。
そしたら右クリックイェ〜だヨ!

さあaxisclientプロジェクトに戻ってSource Packages を見てみよう。なにができたかなッ。

おお,できてるできてる。これは編集する必要はまったくない。ただ全てをコンパイルするだけだ。


GUIクライアントプログラムをもうひとつ作成

まあ・・・ひとつのGUIプログラムで,接続するWebサービスを切り替えられたりしたらすごくステキなのだが,もういい加減疲れてきているので,それはまたいつかこの次にシマショ。

ClientOneと同じようなプログラムで,ただ接続先と送信のしかたが違うClientTwoを作るには,ClientOneをそのまま隣にコピーしてやるのヨ。するとClientOne_1.javaというのができるから,

生まれ変わったNetBeans4.0の「リファクタリング機能」ダッ

あっそ,それがじまん(近所のマセガキ,いえ,大人びたお子様がよくお口にされる)

あ。上のでかいショットは,ws2wsパッケージを作る前のものです。前後してすみません。とにかく名前を「ClientTwo」にする。

すると,下のウィンドウにこんなしゃれたものが現れる。

おお!ドゥザハッソー!ドゥザリファクタリング!するとおんなじソースでクラス名だけが違うものができあがる。そうしたらコードを修正するんだヨヨヨヨン。

public String getOutputString(String inputString){

String outputString="";

try{

String endpoint="http://localhost:8084/axis/services/WS2Service";
Service service=new Service();
WS2ServiceSoapBindingStub wsstub=new WS2ServiceSoapBindingStub(

new URL(endpoint), service

);
outputString=(String)wsstub.getString2(inputString);

}

catch(Exception ex){

outputString=ex.toString();

ex.printStackTrace();

}

return outputString;

}

Webサービスの呼び出し方が変わってますね?

クラスパスについては,すでに「AxisLibrary」を設定してあるし,
WS2ServiceSoapBindingStub など,WSDLから作成されたクライアントファイルは,これと同じプロジェクトにあるからクラスパスは顔パスだ。

ではこいつをコンパイルてかさっさと実行だ(Tomcatが動いているのを確認しようね)!

あれっ

たぶんこのとおりにやったら,なぜかwsone.jwsで動いているWebサービスに接続してしまうはずだ。つまり,Go Go!ナントカという応答が・・・・

ソースを調べてわかった。コンストラクタは書き換えられていたが,mainメソッド中でClientOneを呼び出すクダリは,書き換えられていなかったのだ。

さらになぜか。これは一度ClientOne.javaをコピーして作っている。そのときmainメソッド中の表記はClientOne()のまま,ファイル名(とたぶんクラス宣言とコンストラクタ)だけがClientOne_1に書き換えられてしまったのだ。だとしたら,メインメソッド中の表記は,取り残されるよなア。

もし,ClientOneをそのままClientTwoに名前変更していれば,このように

mainメソッド中も書き換えてもらえたはずなのだ。

うううううーん

これは,NetBeansが悪いのか!?わたしが悪いのか!?・・・まあいい!とにかく,mainメソッドは手修正して実行だ!

いや,ときどきNonikiと呼ばれるのも,まあ悪くないんじゃないかな。もともとのに子ていうのはロニ子(ロニー・ジェームズ・ディオの大ファンだった)を友人が聞き違えたものだがそっちのほうが悪くないなと思ってそう名乗るようになったわけだし・・・てそれはいい。無事,WSDLを用いたWebサービス構築も,立派にNetBeansでできました。

立派に。

なんか3.6ではもう少し,もう少しカンタンに無理なく自分にいろいろなことを言い聞かせたりする必要なく,作れたんじゃないかなという気がするのだが・・・