本章では、Information Quality WebサービスAPIを利用したアプリケーション開発方法を説明します。
6.1 動作環境
Java EE 実行環境(*1) 富士通製 Interstage Application Server V10.0/V11.0(Java EE実行環境でJava SE 6を使用す
る必要がある)
Oracle製 GlassFish Server V2(Open Source Edition)(Java SE 6を使用する必要がある)
環境変数 ISIQ_HOME
Java VM引数 -Djava.library.path=%ISIQ_HOME%\bin
配備ライブラリ 「%ISIQ_HOME%\lib」配下の以下のライブラリ 必須ライブラリ
Java API:cleanser.jar 選択ライブラリ
基本クレンジングWebサービス用:wscharcleanser.jar 住所クレンジングWebサービス用:wsjaddresscleanser.jar 氏名クレンジングWebサービス用:wsjpersonalnamecleanser.jar 法人名クレンジングWebサービス用:wsjcorporatenamecleanser.jar 置換クレンジングWebサービス用:wsreplacecleanser.jar
*1 製品が32ビット版の場合、32ビット版が必要です。製品が64ビット版の場合、64ビット版が必要です。ただし、GlassFishの実行環境 は、32ビット版のみです。
注意
・ あらかじめ「第1章 開発前に知っておくべきこと」を参照しておいてください。
・ プロセス起動方法によっては、システムの環境変数を引き継がない場合があります。JavaプロセスからISIQ_HOMEが参照できるよ うにしてください。
6.2 クライアントアプリケーションの作成方法例
6.2.1 注意事項
・ 本節での手順やプログラムコードは、簡単な例です。本番運用のアプリケーション開発にそのまま利用しないでください。
・ クライアントアプリケーションの作成をするにあたり、前提として以下の知識が必要です。
- SOAP 1.1
- WSDL 1.1
- Interstage Application ServerのJava EE実行環境 または JAX-WS または Microsoft Visual Studio 2010(C#)を用いたSOAP クライアント開発の知識
6.2.2 Interstage Application Serverの場合
「6.2.3 JAX-WSの場合」とほとんど同じですが、Interstage Application Serverの仕様に従って、読み替えたり作業を補足したりする必要 があります。(例:wsimportコマンド→ijwsimportコマンド、コンパイル/実行時のライブラリの準備が必要など)
詳しくは、Interstage Application Serverのマニュアルを参照してください。
6.2.3 JAX-WSの場合
6.2.3.1 Stub を作成する
1. wsimportコマンドで、WebサービスのStubを生成します。
> [JAVAのインストールフォルダ]\bin\wsimport -d [Stubの出力先フォルダ] http://localhost/wscleanser/CharCleanserService?
wsdl
2. [Stubの出力先フォルダ]配下にStubが生成されていることを確認します。
6.2.3.2 Stub を使って、 Web サービスを呼び出すサンプルアプリケーションを作成する
1. 任意のJava開発環境を起動します。
2. [Stubの出力先フォルダ]をクラスパスに通します。
3. test.Testクラスを作成し、以下のコード(基本クレンジングの半角/全角の統一を行うプログラム例)を記述します。
package test;
import com.fujitsu.informationquality.cleansing.api.CharCleansingOptionCharWidthType;
import com.fujitsu.informationquality.cleansing.api.CharCleansingResult;
import com.fujitsu.informationquality.cleansing.webservice.charcleanserservice.CharCleanserService;
import com.fujitsu.informationquality.cleansing.webservice.charcleanserservice.CharCleanserService_Service;
public class Test {
public static void main(String[] _args) throws Exception {
CharCleanserService svc = new CharCleanserService_Service().getCharCleanserPort();
CharCleansingResult res = svc.formatCharWidth("123", CharCleansingOptionCharWidthType.FULL);
System.out.println(res.getResult());
} }
4. test.Testをコンパイルします。
6.2.3.3 サンプルアプリケーションを実行する
1. アプリケーションを実行し、標準出力に「123」(全角)が表示されることを確認します。
6.2.4 Microsoft Visual Studio 2010の場合
6.2.4.1 Stub を作成する
1. Visual Studioを起動します。
2. [ファイル]メニュー-[新規作成]-[プロジェクト]で、[Windows フォーム アプリケーション]を選び、プロジェクトを作成します。
名前 WindowsFormsApplication1
メインフォーム Form1.cs
3. [ソリューションエクスプローラー]のコンテキストメニュー-[サービス参照の追加]を選び、ダイアログを表示させます。
4. [アドレス]に、「運用ガイド クレンジング編」の「6.2.2.4 配備完了を確認する」の各WSDLへのURLを入力し、[移動]ボタンを押し
ます。[サービス]フィールドにサービス情報が表示されたら、[名前空間]を入力して、[OK]ボタンを押し、WebサービスのStubを 生成します。
アドレス域 http://localhost/wscleanser/CharCleanserService?wsdl 名前空間域 CharCleanserServiceRef
5. [クラスビュー]で、生成されたStubを確認します。
名前空間 WindowsFormsApplication1.CharCleanserServiceRef
6.2.4.2 Stubを使って、Webサービスを呼び出すサンプルアプリケーションを作成する
1. デザイナー画面で、Form1.csに2つのTextBoxと、1つのButtonを配置します。
TextBox:Name属性 textBox1, textBox2
Button:Name属性 button1
2. button1のClickアクションにイベントハンドラーを割り当て、以下のコード(基本クレンジングの半角/全角の統一を行うプログラ
ム例)を記述します。
private void button1_Click(object sender, EventArgs e) { CharCleanserService svc = new CharCleanserServiceClient();
formatCharWidthRequest req =
new formatCharWidthRequest(this.textBox1.Text, charCleansingOption_charWidthType.FULL);
formatCharWidthResponse res = svc.formatCharWidth(req);
this.textBox2.Text = [email protected];
}
3. アプリケーションをビルドします。
6.2.4.3 サンプルアプリケーションを実行する
1. アプリケーションを実行し、Form1.csダイアログを起動します。
2. textBox1に、「123」(半角)を入力してbutton1を押し、textBox2に「123」(全角)が表示されることを確認します。
6.3 注意事項
6.3.1 クレンジングサービスへの接続数について
・ 各クレンジングWebサービスは、Java APIの各クレンジング処理機能プロバイダインスタンスを一つ持ち、Webサービス起動時にプ ロバイダ接続を開き、Webサービス終了時にプロバイダ接続を閉じます。Java APIのクレンジング処理機能プロバイダ接続におい ては、接続回数や接続中インスタンス数の上限制約があるため、注意してください。
詳しくは、「運用ガイド クレンジング編」の「5.3.1 APIからの利用数について」を参照してください。
・ クレンジングサービスを再起動した場合は、Webサービスも再起動する必要があります。
6.3.2 文字列の制約について
・ 「7.3 入出力文字列の仕様について」のとおり、文字列型に対する制約がJava APIとは異なるので、注意してください。
・ 制約に違反した文字列を、WebサービスAPIのリクエストに指定した場合、クライアントあるいはサーバのSOAPランタイムのレイヤ でエラーになり、製品のWebサービスのレイヤまで制御が到達しない可能性があります。
「運用ガイド クレンジング編」の「6.3 Webサービスのトラブル調査方法」を参照して、どのレイヤでのエラーかを判断して対処してく ださい。
6.3.3 マーシャル/アンマーシャルの曖昧性について
Microsoft .NET Framework(C#)でStub/利用者ロジックを作成し、製品のWebサービスに接続した場合、以下のようにXMLが流れま す。
クライアント側からのリクエスト発行時には、.NET Frameworkが、利用者のC#オブジェクト形式のリクエストを、XML形式にマーシャリン グします。そしてサーバ側に到達すると、JAX-WSが、XML形式のリクエストをJavaオブジェクト形式にアンマーシャリングし、製品ロジッ クに渡します。レスポンス時も同様に、Javaオブジェクト形式のレスポンスが、XML形式を経て、C#オブジェクト形式となって返されま す。
マーシャル/アンマーシャル処理は、各SOAP通信ランタイムが行っており、ベンダ毎に仕様が多少異なります。多様な実行環境との相 互運用性を高めるため、多少間違いがあるXMLでも、エラーにせず、柔軟に解釈してしまうランタイムも多いです。
・ xsd:int型のパラメーターに、Javaのint型値を超える数値を指定して送信すると、アンマーシャルのタイミングで、マイナス値や未定
義値(初期値がある場合は初期値)に置き換わり、エラーにもならない可能性があります。
・ Stubを使用せず、直接XMLを構築/送受信する利用クライアントにおいては、xsd:int型のパラメーターに、数値変換できないXML
表現(<param>あ</param>等)を指定して送信できます。しかし、この場合も、サーバ側でエラーにならず、未定義値扱いされる可
能性があります。
このような背景から、Webサービス利用側では、製品のパラメーター仕様に従った値チェックを確実に行ったのち、Webサービスを呼 び出すようにしてください。
6.3.4 リクエストXMLの最大サイズについて
Java EE実行環境が巨大なリクエストを受け付けてしまうと、大量のメモリ/CPUを消費してしまいます。
これを防ぐために、Webサービスクライアントが発行するリクエストXMLの最大サイズを見積もり、Java EE実行環境が適切なサイズのリ クエストのみを受け付けるように設定する必要があります。
本製品では、リクエストXMLの最大サイズを、10KB程度に設定することを推奨します。
■最大リクエストサイズの見積もり方法
リクエストXMLはクライアントのSOAP通信ランタイムなどにより異なるため、運用に使用するクライアントで実測して最大サイズを見積も るようにしてください。
目安としては、以下のようになります。
600byte + 最大クレンジング対象文字列サイズ
・ “600byte”は、Java SE 6(JDK,1.6.0_24)同梱のwsimportで生成したStubによる、最大リクエスト本体サイズ(クレンジング対象文字
列を除く)です。
・ “最大クレンジング対象文字列サイズ”は、リクエストのContent-type(UTF-8など)に従ってサイズ換算した値です。
クレンジング対象文字列サイズは、クレンジングWebサービスのメモリ使用量のパラメーターにもなります。Webサービスのメモリ使 用量と同時接続数についても、適切に考慮してください。
■リクエストサイズの制限方法
Interstage Application Serverの場合- Webサーバ(Interstage HTTP Server)でリクエストサイズ制限を行う場合
例)httpd.confの“LimitRequestBody”で最大サイズを指定します。
- Java EE実行環境でリクエストサイズ制限を行う場合
例)クラスタのJava VMオプション“com.sun.xml.ws.transport.http.servlet.ServletConnectionImpl.maxRequestLength”で最大サ イズを指定します。
GlassFishの場合
- Webサーバ(Apache)でリクエストサイズ制限を行う場合
例)httpd.confの“LimitRequestBody”で最大サイズを指定します。