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形式のデータ |
成功 |
- (凡例)
-
−:該当しません。
- 注※
-
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フィールドの値の変化を次に示します。
-
xmime:expectedContentTypes属性がある
添付ファイルパートにあるContent-Typeフィールドの値はxmime:expectedContentTypes属性に指定されている値となります。
-
xmime:expectedContentTypes属性がない
添付ファイルパートにあるContent-Typeフィールドの値は"application/octet-stream"となります。