Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


30.4.2 Webサービスクライアント側JAX-WSエンジンの動作

Webサービスクライアント側JAX-WSエンジンでMTOM/XOP仕様形式の添付ファイルを使用できるかどうかは,SEIを取得する際に使用するMTOMFeatureクラスに依存します。MTOM/XOP仕様形式の添付ファイルの使用可否とメッセージを送受信したときの動作を次の表に示します。

表30‒4 MTOM/XOP仕様形式の添付ファイルの使用可否とメッセージを送受信したときの動作

項番

MTOM/XOP仕様形式の添付ファイル

しきい値と送信する添付ファイルサイズの関係

送信するリクエストメッセージに含まれるデータ

受信したレスポンスメッセージに含まれるデータ

受信の成功/失敗

1

使用する

しきい値≦添付ファイルのサイズ

バイナリデータ

バイナリデータ

成功

2

Base64形式のデータ

成功

3

しきい値>添付ファイルのサイズ

Base64形式のデータ

バイナリデータ

成功

4

Base64形式のデータ

成功

5

使用しない

Base64形式のデータ

バイナリデータ

成功

6

Base64形式のデータ

成功

(凡例)

−:該当しません。

注※

javax.activation.DataHandlerを使用した場合はしきい値で判定されません。常にバイナリデータとして送信します。

MTOMFeatureクラスはほかのFeatureクラスと同時に使用できます。MTOMFeatureクラスとほかのFeatureクラスを同時に使用した例を次に示します。

package com.sample;
 
・・・・・・
 
public class TestClient {
 
    public static void main(String[] args) {
        try {
            File portrait = new File("portrait.png");
            if (!portrait.exists() ) {
                throw new RuntimeException("Cannot file \"portrait.png\".");
            }
            BufferedImage image = ImageIO.read(portrait);
 
            AddressingFeature addressingFeature = new AddressingFeature();
            MTOMFeature mtomFeature = new MTOMFeature();
 
            UserInfoService service = new UserInfoService();
            UserInfoImpl port = service.getUserInfoImplPort(addressingFeature, mtomFeature);
 
            UserData userData = port.getUserData(image);
            ・・・・・・
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

MTOMFeatureクラスの代わりに,javax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドを使用することで,MTOM/XOP仕様形式の添付ファイルを使用できるかどうかを設定できます。javax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドを使用した,MTOM/XOP仕様形式の添付ファイルの使用可否の設定例を次に示します。

package com.sample;
 
・・・・・・
 
public class TestClient {
 
    public static void main(String[] args) {
        try {
            File portrait = new File("portrait.png");
            if (!portrait.exists() ) {
                throw new RuntimeException("Cannot file \"portrait.png\".");
            }
            BufferedImage image = ImageIO.read(portrait);
 
            UserInfoService service = new UserInfoService();
            UserInfoImpl port = service.getUserInfoImplPort();
 
            BindingProvider bindingProvider = (BindingProvider)port;
            Binding         binding         = bindingProvider.getBinding();
            SOAPBinding     soapBinding     = (SOAPBinding)binding;
            soapBinding.setMTOMEnabled(true);
 
            UserData userData = port.getUserData(image);
            ・・・・・・
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

MTOM/XOP仕様形式の添付ファイルの使用可否をjavax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドで設定する場合,先にMTOMFeatureクラスやjavax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドで使用可否を設定していると,あとからsetMTOMEnabledメソッドに設定した値は無効となり,使用可否の設定はできません。

SEIを取得する際にMTOMFeatureクラスを使用しない場合やjavax.xml.ws.soap.SOAPBindingのsetMTOMEnabledメソッドによるMTOM/XOP仕様形式の添付ファイルの使用可否を設定しない場合,MTOM/XOP仕様形式の添付ファイルを使用しません。リクエストメッセージはBase64形式のデータを含んだメッセージを送信します。また,バイナリデータを含んだメッセージかどうかに関係なく,すべてのレスポンスメッセージを受信します。

〈この項の構成〉

(1) xmime:expectedContentTypes属性による変化

WSDLのスキーマ要素にxmime:expectedContentTypes属性がある場合とない場合では,MTOM/XOP仕様形式の添付ファイルで送信されるメッセージの添付ファイルパートにあるContent-Typeフィールドの値が変化します。xmime:expectedContentTypes属性の有無と添付ファイルパートにあるContent-Typeフィールドの値の変化を次に示します。