• 検索結果がありません。

WebサービスAPIを利用したアプリケーション開発

本章では、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”で最大サイズを指定します。