ここまでで、ローカル動作のTomcat上で動くウェブサービスを配備できているはず。
コアロジックの確認はしたものの、あくまで単一のJavaコード内に閉じていた。SOAP経由での疎通確認用ウェブサービスクライアントを作成する。

プロジェクト準備

  • プロジェクトを作成する。
    1. [ファイル]-[新規]-[プロジェクト]から、「/Java/Javaプロジェクト」を選択
      • この時点で作るクライアントはまだサービス利用者の立場で作成するわけではなくサービスの疎通確認用の意味合い。ゆえにインタフェース変更のセンもまだまだ捨てきれず、「/Webサービス/Webサービス・クライアント」ウィザードで作ってしまうと再度クライアントコードを生成するのが手間なのでplainなJavaプロジェクトを用いる。
    2. プロジェクト名を適当につけてプロジェクト作成。
  • Axisのライブラリを参照できるようにする
    1. プロジェクトのプロパティ→「/Javaのビルド・パス」→「ライブラリ」タブへ移動
    2. 「ライブラリーの追加」ボタン→「ユーザー・ライブラリ」を選択
    3. Axis導入時に設定した「AXIS_LIB」を選択

クライアントコード生成

  • WSDLからJavaコードを生成する。TomcatにデプロイされたWSDLを参照するのではなくローカルに生成したWSDLを直接参照する。前項同様、これから先WSDLを作り直すセンがまだあり得るので、デプロイしないでローカルでどんどん試せる方がよいと思う。
    <taskdef resource="axis-tasks.properties" />
    <target name="make_client_hinagata">
        <wsdl2java
            serverside = "no"
            output = "./src"
            url = "../KeitaisoWS/WebContent/wsdl/KeitaisoKaiseki.wsdl"
            deployscope="application"
        />
    </target>
    	
  • 生成した後は例のごとく「パッケージエクスプローラ」上で「更新」を忘れないようにする。既存のファイルの内容が更新されるだけであれば問題ないが、ファイルが増えたり減ったりした場合は明示的にプロジェクトに追加された状態を作らなければならない。これってAntタスクで書けないのかなー。

実装

  • サービスを呼び出すためのコードはWSDLから生成されているので、これを利用するコードを書く
  • 単純な例。
    public static void main(String[] args) throws Exception {
        KeitaisoKaiseki binding;
        try {
            binding = new KeitaisoKaisekiServiceLocator().getKeitaisoKaisekiService();
        } catch (javax.xml.rpc.ServiceException e) {
            throw new Exception( "" , e );
        }
    
        try {
            KeitaisoToken[] result = null;
            result = binding.analyze("やっとここまで来ましたね。");
    
            for (int i = 0; i < result.length; i++) {
                KeitaisoToken token = result[i];
                System.out.println(token.getToken() + ","
                        + token.getBasicString() + "," + token.getHinshi()
                        + "," + token.getReading() + ","
                        + token.getPronunciation());
            }
        } catch (java.rmi.RemoteException e) {
            throw new Exception( "" , e );
        }
    }
    
    		
  • サービスのバインディングを得る際、URLオブジェクトを渡すことで任意の場所にあるサービスにバインドできる。デフォルトではWSDLに書かれたURL。WSDLには最終的にサービスを公開するURLを書いてあるので、疎通用にバインドする。
    URL url = new URL("http://localhost:8080/KeitaisoWS/services/KeitaisoKaisekiService");
    binding = new KeitaisoKaisekiServiceLocator().getKeitaisoKaisekiService( url );
       
Powered by Google App Engine

このブログ記事について

このページは、tckzが2006年2月20日 03:44に書いたブログ記事です。

ひとつ前のブログ記事は「ウェブサービスを書いてみる - インタフェースとプロトタイプ」です。

次のブログ記事は「ウェブサービスを書いてみる - サーバに載せる」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.04