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

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

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

項番MTOM/XOP仕様形式の添付ファイルしきい値と送信する添付ファイルサイズの関係送信するリクエストメッセージに含まれるデータ受信したレスポンスメッセージに含まれるデータ受信の成功/失敗
1使用するしきい値≦添付ファイルのサイズバイナリデータバイナリデータ成功
2Base64形式のデータ成功
3しきい値>添付ファイルのサイズBase64形式のデータバイナリデータ成功
4Base64形式のデータ成功
5使用しないBase64形式のデータバイナリデータ成功
6Base64形式のデータ成功
(凡例)
-:該当しません。
注※
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属性による変化

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

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