不明点が多いだけに、これから先もTry&Errorを繰り返すことになるはず。
繰り返されることを前提とした手順を検討する。
  1. サービスのInterfaceとやり取りするデータの入れ物を作成する。このとき、最終的な出来上がりとはパッケージを分けておく。
  2. インタフェースからWSDLを生成する。
  3. 生成したWSDLからサーバサイドのコードを生成する。
  4. 生成されたコード中の実装すべき部分を実装する。
  5. デプロイしないで、ローカルで完結し動作するまで繰り返す。
  6. サーバにデプロイして動作確認する。
  • cc.breeze.ws.keitaiso.prototype:Interfaceとデータの入れ物
    • KeitaisoToken.java([1]手書き)
    • KeitaisoKaiseki.java([1]手書き)
  • cc.breeze.ws.keitaiso:最終的な出来上がり
    • KeitaisoKaisekiServiceLocator.java([3]生成)
    • KeitaisoKaisekiServiceSoapBindingImpl.java([3]生成→[4]手書き)
    • KeitaisoKaisekiServiceSoapBindingSkeleton.java([3]生成)
    • KeitaisoKaisekiServiceSoapBindingStub.java([3]生成)
    • KeitaisoToken.java([3]生成)
    • KeitaisoKaiseki.java([3]生成)
    • KeitaisoKaisekiService.java([3]生成)

インタフェース

  • 次のような単純なインタフェースとした。最終的には生成した結果しか使わないので、あまりこだわらないでおく。
    package	cc.breeze.ws.keitaiso.prototype
    
    public interface KeitaisoKaiseki {
        public  KeitaisoToken[]  analyze( String text )  ; 
    }
    		
  • 入れ物は以下の通り。senのnet.java.sen.Tokenとほぼ同じ。WSDL生成→サーバサイドコード生成の過程でgetter/setter/コンストラクタは自動生成され、コメント含めてその他の内容は引き継げないので、フィールド(わざわざpublicにしているのはprivateだと生成対象にならないから)とコンストラクタだけ定義する。
    package	cc.breeze.ws.keitaiso.prototype
    
    public class KeitaisoToken {
        /// 分割されたトークン
        public String  token;
        /// 品詞
        public String  hinshi;
        /// 基本語(活用前、みたいなイメージか)
        public String  basicString;
        /// 元の文字列中における本トークンの開始位置
        public int     beginPosition;
        /// 元の文字列中における本トークンの終了位置
        public int     endPosition;
        /// トークンの長さ
        public int     tokenLength;
        /// トークンの読み
        public String  reading;
        /// トークンの発音
        public String  pronunciation;
        /// 付加情報
        public String  additionalInfo;
        /// 活用??
        public String  conjugationalForm;
        /// コスト
        public int     cost;
        /// ??
        public String  surface;
        
        KeitaisoToken()
        {
        }
    }
    		

WSDL生成

  • 次のようなAntターゲットを使用してWSDLを生成する。
    最初の一行目(taskdef)は、Antタスクを使用するための定義(build.xmlの先頭で宣言しておく)。axis-ant.jar内にあるaxis-tasks.propertiesで定義されている(わかりにくい)
    <taskdef resource="axis-tasks.properties" />
    	
    <target name="java2wsdl">
        <mkdir dir="WebContent/wsdl"/>
        
        <axis-java2wsdl 
            namespace = "http://breeze.cc/KeitaisoWS" 
            classname = "cc.breeze.ws.keitaiso.prototype.KeitaisoKaiseki"
            output = "./WebContent/wsdl/KeitaisoKaiseki.wsdl"
            location = "http://passing.breeze.cc/KeitaisoWS/services/KeitaisoKaisekiService"
        >
            <classpath>
                <pathelement path="build/classes"/>
            </classpath>
        </java2wsdl>
    </target>
    		

サーバサイドソース生成

  • 次のようなAntターゲットを使用してWSDLからjavaソースを生成する。
    <target name="make_server_hinagata" depends="java2wsdl">
        <axis-wsdl2java
            serverside = "yes"
            output = "./src"
            url = "./WebContent/wsdl/KeitaisoKaiseki.wsdl"
            skeletonDeploy="yes"
            deployscope="application"
        />
    </target>
    	

実装

  • コアロジックを記述する。「最初に作ったインタフェース名+ServiceSoapBindingImpl.java」が実装すべきソース。
  • ローカル確認用のMainメソッドも作っておく。実際に配備して確認する前に、ローカルなjavaアプリとして動作を確認する。
    • senに辞書その他の位置を通知しなければならないのでローカル実行時のVMオプションに「-Dsen.home=sen導入ディレクトリ」を指定すること。
  • ソース生成は何回行ってもよく、****ServiceSoapBindingImpl.javaは(上記Antターゲットの場合)既に存在する場合は上書きされない。

サービスデプロイ(ローカルTomcat)

  • サーバサイドのソース生成を行った際、サービスを配備するための「deploy.wsdd」が同時に生成されている。
  • これを用いてAxisにサービスを登録する。以下のようなAntターゲットを実行する。
    <target name="deploy_ws_local">
        <axis-admin
            port="8080"
            hostname="localhost"
            failonerror="true"
            servletpath="/KeitaisoWS/services/AdminService"
            debug="true"
            xmlfile="./src/cc/breeze/ws/keitaiso/deploy.wsdd"
        />
    </target>
    		
  • サービスのデプロイが正しく完了すれば、http://localhost:8080/コンテキスト名/→「リスト」で登録したサービス名と公開オペレーションが表示される。
       
Powered by Google App Engine

このブログ記事について

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

ひとつ前のブログ記事は「ウェブサービスを書いてみる - プロジェクト作成」です。

次のブログ記事は「ウェブサービスクライアント - 疎通用Java版」です。

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

Powered by Movable Type 5.04