Previous topic

サービス定義XML

Next topic

SOAPで呼び出す

This Page

ProtocolBuffersで呼び出す

ここでは, 各種のネットワーク呼び出しプロトコルに対応させる で用意したRaSCサービスを,ProtocolBuffers経由で呼び出す 方法について説明します.呼び出し用のクライアントは,Java で作成します.

起動済みのRaSCサービスを使用しますので, 各種のネットワーク呼び出しプロトコルに対応させる を実施して,RaSCサービスを起動しておきます.

まず,RaSCクライアントサンプルパッケージをダウンロードして,解凍します.

$ wget https://alaginrc.nict.go.jp/rasc/resources/rasc-client-1.0.0.zip
$ unzip rasc-client-1.0.0.zip

RaSCクライアントサンプルパッケージを解凍すると,以下のファイルが展開されます.

rasc-client-1.0.0/
 + lib/
   + … (必須ライブラリ群)
 + ClientProtcolBuffers/
   + build.xml (クライアント用 build.xml)
     + src/ (クライアント用Javaソースフォルダ)
       + ClientProtcolBuffers.java (クライアント用ソース)

以下のファイルについて説明します.

  • ClientProtcolBuffers/build.xml
  • ClientProtcolBuffers/src/ClientProtcolBuffers.java

まず,ClientProtcolBuffers/src/ClientProtcolBuffers.java の内容を説明します. ClientProtocolBuffers.javaは,Javaで実装したProtocolBuffersクライアントのサンプルコードです.

ClientProtcolBuffers/src/ClientProtcolBuffers.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  import java.net.MalformedURLException;
  import java.net.URL;
  import jp.go.nict.langrid.client.impl.protobuf.PbClientFactory;
  import jp.go.nict.wisdom.wrapper.api.TextAnalysisService;

  public class ClientProtcolBuffers {
   /**
   * ProtocolBuffers クライアントサンプル.
   *
   * @param args args[0] ユーザプログラムに渡す文字列
   */
   public static void main(String[] args) {
     try {
       if(args.length <= 0){
         System.out.println("引数にユーザプログラムに渡す文字列を指定してください.");
         return;
       }

       TextAnalysisService s = new PbClientFactory().create(TextAnalysisService.class,
         new URL("http://localhost:8080/___WAR_NAME___/pbServices/___SERVICE_NAME___"));
       System.out.println(args[0]);
       System.out.println("--- result ---");
       System.out.println(s.analyze(args[0]));

     } catch (MalformedURLException e) {
       e.printStackTrace();
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
 }
  • PbClientFactory#create()を使用して,TextAnalysisServiceを作成します.
    • 今回用いるRaSCサービスは, TextAnalysisService Interface クラスを実装しています.
    • クライアントからは,RaSCサービスのTextAnalysisService#analyze()を呼び出します.
    • PbClientFactory#create()の引数である,サービスclassには,TextAnalysisService.class を指定します.
    • Endpoint (サービスを呼び出すアドレス) は, http://localhost:8080/___WAR_NAME___/pbServices/___SERVICE_NAME___ を指定します.これは, 各種のネットワーク呼び出しプロトコルに対応させる の手順で設定した ___WAR_NAME___, ___SERVICE_NAME___ に基づいて設定してください.
  • サービスのanalyze()を呼び出して,結果を標準出力へ出力します.
    • クライアント起動時の引数, args[0] にユーザプログラムに渡す文字列が格納されている前提とします.

(参考) jp.go.nict.wisdom.wrapper.api.TextAnalysisService Interface クラス

1
2
3
4
5
6
package jp.go.nict.wisdom.wrapper.api;

public interface TextAnalysisService {
        String analyze(String text) throws Exception;
        String[] analyzeArray(String[] text) throws Exception;
}

次に,ProtocolBuffersクライアント用build.xmlの内容を説明します.

ClientProtcolBuffers/build.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<project name="rasc_client" default="client">

  <target name="init">
    <mkdir dir="build" />
  </target>

  <target name="clean" depends="init">
    <delete dir="build" />
  </target>

  <target name="client" depends="init">
    <mkdir dir="build/client" />
    <javac destdir="build/client" encoding="UTF-8"
      includeantruntime="false" debug="true">
      <src path="./src" />
      <classpath>
        <fileset dir="../lib" includes="*.jar" />
      </classpath>
    </javac>
    <jar jarfile="build/clientProtocolBuffers.jar">
      <fileset dir="build/client" includes="**/*.class" />
      <fileset dir="./src" includes="**/*.java" />
      <manifest>
        <attribute name="Main-Class" value="ClientProtcolBuffers" />
        <attribute name="Class-Path"
          value=". ../../lib/jp.go.nict.langrid.client.ws_1_2.protobuf.jar
          ../../lib/wrapper-api.jar ../../lib/jp.go.nict.langrid.client.jar
          ../../lib/protobuf-java-2.2.0.jar ../../lib/jp.go.nict.langrid.commons.jar
          ../../lib/jp.go.nict.langrid.commons.cs.jar ../../lib/jp.go.nict.langrid.commons.protobufrpc.jar
          ../../lib/jp.go.nict.langrid.commons.beanutils.jar ../../lib/jp.go.nict.langrid.language.jar" />
      </manifest>
    </jar>
  </target>
</project>
  • build フォルダを作成します.
  • javaファイルをコンパイルし,build/clientProtocolBuffers.jar を作成します.
  • clientProtocolBuffers.jar は,実行可能Jarファイルとして作成します.
  • 実行に必要なライブラリは, ../../lib を参照するようにマニフェストを設定します.

次に,ProtocolBuffersクライアントのビルド方法を説明します.

$ cd rasc-client-1.0.0/ClientProtcolBuffers/
$ ant
  • rasc-client-1.0.0/ClientProtcolBuffers/ に移動します.
  • ant を実行してビルドします.

最後に,ProtocolBuffersクライアントを実行します.

$ cd build/
$ java -jar clientProtocolBuffers.jar "今日の天気はどうですか"

今日の天気はどうですか
--- result ---
今日    名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
天気    名詞,一般,*,*,*,*,天気,テンキ,テンキ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
どう    副詞,助詞類接続,*,*,*,*,どう,ドウ,ドー
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
か      助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
  • build/ に移動します.
  • javaコマンドでProtocolBuffersクライアントを起動します.
  • ProtocolBuffersクライアントの引数にユーザプログラムに渡す文字列を指定します.