30.5.2 添付ファイルからSOAPメッセージへのマッピングの注意事項(MTOM/XOP)
添付ファイルからSOAPメッセージをマッピングするときの注意事項について説明します。
(1) MIMEパートの記述順序
MIMEパートは1個のルートパートと0個以上の添付ファイルパートで構成されます。
ルートパートは,MIMEパートの先頭に記述されます。ルートパートのあとに,添付ファイルパートが記述されます。
添付ファイルパートでは,Javaインタフェースで指定された引数や戻り値がマッピングされます。Javaインタフェースの指定内容と添付ファイルパートでの記述順序の対応を次の表に示します。
項番 |
Javaインタフェースでの指定内容 |
添付ファイルパートの記述順序 |
---|---|---|
1 |
メソッド引数 |
メソッド引数に指定された順に記述されます。 |
2 |
メソッド戻り値 |
添付ファイルパートの先頭に記述されます。 |
3 |
配列型 |
配列内の要素順に記述されます。 |
4 |
ユーザ定義型 |
ユーザ定義型内での指定順に記述されます。 ユーザ定義型の中で指定したユーザ定義型で,添付ファイルのJava型を指定するときは,深さ優先順で添付ファイルパートが記述されます。 |
Javaインタフェースと添付ファイルパートのマッピング例を示します。
(2) ルートパートから添付ファイルへのマッピング
MTOM/XOP仕様形式の添付ファイルの場合,ルートパートから添付ファイルパートへのマッピングにはXOP仕様で定められたXOP情報セットが使用されます。XOP情報セットがルートパートのSOAPボディに記述され,対応する添付ファイルパートのContent-Idが設定されます。Content-Idによって,ルートパートから対応する添付ファイルパートを参照できます。ルートパートから添付ファイルパートの参照例を次に示します。背景色付きの太字部分がCID URLスキームと,対応する添付ファイルパートのContent-Idになります。
-uuid:e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f Content-Type: text/xml <?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <getUserData xmlns="http://localhost"> <in0> <xop:Include xmlns="http://www.w3.org/2004/08/xop/include" href="cid:39820675-44bb-4e28-9926-577bf27fa07c@jaxws.cosminexus.com"/> </in0> </getUserData> </S:Body> </S:Envelope> --uuid:e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f Content-Id:<39820675-44bb-4e28-9926-577bf27fa07c@jaxws.cosminexus.com> Content-Type: image/jpeg Content-Transfer-Encoding: binary [添付データ] --e63fe7dc-ad8a-4fb1-8f56-ce7b5841a06f--
(b) MTOM/XOP仕様形式の添付ファイルのデータサイズによるマッピング方法
MTOM/XOP仕様形式の添付ファイルは,マッピング元であるJava型とJavaインタフェースに指定する添付ファイルのデータサイズによって,添付ファイルパートへのマッピング方法が異なります。マッピング方法を次の表に示します。
項番 |
Java型 |
添付ファイルのデータサイズ |
添付ファイルパートへのマッピング |
---|---|---|---|
1 |
byte[] |
null |
マッピングしない※1 |
2 |
0バイトのデータ |
マッピングする※2 |
|
3 |
0バイトより多いバイト数のデータ |
マッピングする※3 |
|
4 |
java.awt.Image型 |
null |
マッピングしない※1 |
5 |
0バイトのデータ |
マッピングしない※1 |
|
6 |
0バイトより多いバイト数のデータ |
マッピングする※3 |
|
7 |
javax.xml.transform.Source型 |
null |
マッピングしない※1 |
8 |
0バイトのデータ |
マッピングする※2 |
|
9 |
0バイトより多いバイト数のデータ |
マッピングする※3 |
|
10 |
javax.activation.DataHandler型 |
null |
マッピングしない※1 |
11 |
0バイトのデータ |
マッピングする※2 |
|
12 |
0バイトより多いバイト数のデータ |
マッピングする※3 |
- 注※1
-
wsi:swaRef形式の添付ファイルと異なり,ルートパートだけで構成されるマルチパートとなります。ルートパートにあるMIMEボディにはSOAPエンベロープを格納します。SOAPボディに該当する引数の要素は出現しません。添付ファイルデータがnullである場合のXMLへのマッピング例を次に示します。
-
Webサービス呼び出しプログラム
... UserInfoService service = new UserInfoService(); UserInfo impl = service.getUserInfo(new MTOMFeature()); result = impl.getUserData( null ); ...
-
SOAPメッセージ
--uuid:cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e Content-Id: <rootpart*cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e@jaxws.cosminexus.com> Content-Type: application/xop+xml;charset=utf-8;type="text/xml" Content-Transfer-Encoding: binary <?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:getUserData xmlns:ns2="http://localhost"> </ns2:getUserData> </S:Body> </S:Envelope> --uuid:cbc0221b-8ee3-40a3-adc1-d5fa52a8d66e--
-
- 注※2
-
ルートパートとデータがない(MIMEボディが空である)添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルデータを指定している場合は,添付ファイルパートは複数となります。
- 注※3
-
ルートパートと添付ファイルパートから構成されるマルチパートとなります。Javaインタフェースで複数の添付ファイルデータを指定している場合は,添付ファイルパートは複数となります。