演習: Webサービス基礎2
アプリケーションからのサービス利用
この演習では,JavaアプリケーションからのWebサービス呼び出しを実践します.
必要な環境・ツール等
Steps for Invoking Web Services in Java
Javaアプリケーションからのサービス呼び出しを行う手順を以下に示します. Webサービス基礎1と同様,機械翻訳WebサービスのJ-Serverを使用します.
- STEP1: スタブの生成
- Webサービスのためのフレームワーク Apache Axis 1 (推奨バージョン: 1.4 Final) をダウンロード・展開してください.ダウンロードしたパッケージのlibフォルダに含まれる .jarファイル (axis.jar, jaxrpc.jar, commons-logging-1.0.4.jar, commons-discovery-0.2.jar, saaj.jar, wsdl4j-1.5.1.jar) が必要です.
- Download J-ServerのWSDLをダウンロードしてください (KyotoUJServer.wsdl などと名前をつけて保存してください). ダウンロードダイアログが表示されない場合は,右クリックしてコンテキストメニューからセーブしてください (必要ならば拡張子を .wsdl に変更してください).
- Axisに含まれるWSDL2Javaを用いて,サービス呼び出しのためのスタブを生成します.下記のスクリプト (Windowsにおける.batスクリプト) を参考にしてください.
Sample File: stub.bat |
set LIB=./lib
set AXIS_CLASSPATH=%LIB%/axis.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/jaxrpc.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/commons-logging-1.0.4.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/commons-discovery-0.2.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/saaj.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/wsdl4j-1.5.1.jar
set CLASSPATH=%AXIS_CLASSPATH%;.
java -cp %CLASSPATH% org.apache.axis.wsdl.WSDL2Java KyotoUJServer.wsdl |
※このコマンドを実行すると,"警告: 要求されたクラス(javax.activation.DataHandler と javax.mail.internet.MimeMultipart)が見つかりません。Attachmentサポートが利用できません。 / [en]-(Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.) " と表示されますが,演習の実施に問題はありません.
- この演習のためのフォルダを作成し,上記のスクリプトとダウンロードしたWSDL,及びAxisのライブラリを含むフォルダを以下のように配置するのがよいでしょう.
- 上記スクリプトにおける変数LIBは,Axisのライブラリを含むフォルダを指すようにしてください.
- .jarファイルの名前は変更する必要がある場合があります (バージョンが変わるとファイル名も変更されます).
- WSDL2Javaの詳細については,Axis User's Guideを参照してください.
- STEP2: Webサービス呼び出しのJavaコード作成
- 生成したStubを用いてWebサービスが呼び出せます.サンプルコードを以下に示します(このサンプルコードは,先ほどのstub.batと同じフォルダに配置してください).
Sample File: Test.java |
import java.net.URL;
import org.apache.axis.client.Stub;
import Translation.nlp.nict.servicetype.Kyoto1LangridKyotoUJServerLocator;
import Translation.nlp.nict.servicetype.TranslationService;
public class Test{
public static void main(String[] args) throws Exception{
// Translation
Kyoto1LangridKyotoUJServerLocator jserverLoc =
new Kyoto1LangridKyotoUJServerLocator();
TranslationService transService = jserverLoc.getTranslation(
new URL("Input endpoint URL"));
Stub stub = (Stub)transService;
stub.setUsername("Your temporary ID or Language Grid ID");
stub.setPassword("Your temporary password or Language Grid password");
String ret = transService.translate("en", "ja", "Hello.");
System.out.println(ret);
}
} |
- 一時ID・パスワード(または言語グリッドユーザIDとパスワード)・サービスのエンドポイントURLをコード中に設定してください.エンドポイントURLは,WSDLの<wsdlsoap:address>タグのlocation属性に記述されています.
- この演習では様々な言語に翻訳する機械翻訳Webサービスを扱うため,ソースコードはUTF-8で作成することをお奨めします.
- STEP3: 作成したコードを実行する
- 上記のステップで作成したコードをコンパイル・実行してください.
- 以下にコンパイル・実行のためのサンプルスクリプトを示します ("java -Dhttp.proxyHost= ..." からの4行は,実際には1行で記述します.コピー&ペーストした場合には,改行を削除して1行にしてください).実行結果は,"output.txt"に出力されます.
Sample File: run.bat |
set LIB=./lib
set AXIS_CLASSPATH=%LIB%/axis.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/jaxrpc.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/commons-logging-1.0.4.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/commons-discovery-0.2.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/saaj.jar
set AXIS_CLASSPATH=%AXIS_CLASSPATH%;%LIB%/wsdl4j-1.5.1.jar
set CLASSPATH=%AXIS_CLASSPATH%;.
javac -encoding UTF-8 -cp %CLASSPATH% Test.java
java -Dhttp.proxyHost=YourProxy
-Dhttp.proxyPort=YourProxyPort
-Dhttp.nonproxyHost=localhost
-cp %CLASSPATH% Test > output.txt
pause
|
※スタブの生成と同様に,スクリプトを実行すると "警告: 要求されたクラス(javax.activation.DataHandler と javax.mail.internet.MimeMultipart)が見つかりません。Attachmentサポートが利用できません。 / [en]-(Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.) " と表示されますが,演習の実施に問題はありません.
- ソースコードをUTF-8にした場合には,コンパイルオプションにUTF-8の指定が必要です.
- プロキシの設定が必要な場合,上記のようにJava VMオプションとして設定してください.赤字で示した部分には,実行する環境で必要となるプロキシとそのポートを指定してください.プロキシが不要な場合は,-Dhttp.proxyHost=..., -Dhttp.proxyPort=..., -Dhttp.nonproxyHost=...の記述は削除してください.
発展課題
上記のステップに従って,J-Server以外のWebサービスも呼び出してみましょう.この演習では以下のサービスが使用できます.
- Google Translate
- Copyright: Google, Inc.
- 対応言語対: Service Profileに記載
- オペレーション: String translate (String sourceLang, String targetLang, String source)
- sourceLang: 翻訳元言語
- targetLang: 翻訳先言語
- source: 翻訳される文章