30.4.2 Webサービスクライアント側JAX-WSエンジンの動作
Webサービスクライアント側JAX-WSエンジンでMTOM/XOP仕様形式の添付ファイルを使用できるかどうかは,SEIを取得する際に使用するMTOMFeatureクラスに依存します。MTOM/XOP仕様形式の添付ファイルの使用可否とメッセージを送受信したときの動作を次の表に示します。
項番 |
MTOM/XOP仕様形式の添付ファイル |
しきい値と送信する添付ファイルサイズの関係※ |
送信するリクエストメッセージに含まれるデータ |
受信したレスポンスメッセージに含まれるデータ |
受信の成功/失敗 |
---|---|---|---|---|---|
1 |
使用する |
しきい値≦添付ファイルのサイズ |
バイナリデータ |
バイナリデータ |
成功 |
2 |
Base64形式のデータ |
成功 |
|||
3 |
しきい値>添付ファイルのサイズ |
Base64形式のデータ |
バイナリデータ |
成功 |
|
4 |
Base64形式のデータ |
成功 |
|||
5 |
使用しない |
− |
Base64形式のデータ |
バイナリデータ |
成功 |
6 |
Base64形式のデータ |
成功 |
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フィールドの値の変化を次に示します。
-
xmime:expectedContentTypes属性がある
添付ファイルパートにあるContent-Typeフィールドの値はxmime:expectedContentTypes属性に指定されている値となります。
-
xmime:expectedContentTypes属性がない
添付ファイルパートにあるContent-Typeフィールドの値は"application/octet-stream"となります。