30.5.2 添付ファイルからSOAPメッセージへのマッピングの注意事項(MTOM/XOP)

添付ファイルからSOAPメッセージをマッピングするときの注意事項について説明します。

<この項の構成>
(1) MIMEパートの記述順序
(2) ルートパートから添付ファイルへのマッピング

(1) MIMEパートの記述順序

MIMEパートは1個のルートパートと0個以上の添付ファイルパートで構成されます。

ルートパートは,MIMEパートの先頭に記述されます。ルートパートのあとに,添付ファイルパートが記述されます。

添付ファイルパートでは,Javaインタフェースで指定された引数や戻り値がマッピングされます。Javaインタフェースの指定内容と添付ファイルパートでの記述順序の対応を次の表に示します。

表30-9 Javaインタフェースの指定内容と添付ファイルパートの記述順序

項番Javaインタフェースでの指定内容添付ファイルパートの記述順序
1メソッド引数メソッド引数に指定された順に記述されます。
2メソッド戻り値添付ファイルパートの先頭に記述されます。
3配列型配列内の要素順に記述されます。
4ユーザ定義型ユーザ定義型内での指定順に記述されます。
ユーザ定義型の中で指定したユーザ定義型で,添付ファイルのJava型を指定するときは,深さ優先順で添付ファイルパートが記述されます。

Javaインタフェースと添付ファイルパートのマッピング例を示します。

図30-3 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--

(a) XOP情報セットの形式

ルートパートのSOAPボディに記述されるXOP情報セットの形式を次に示します。

"<xop: Include href=" + <CID URLスキーム> + "/>"

(b) MTOM/XOP仕様形式の添付ファイルのデータサイズによるマッピング方法

MTOM/XOP仕様形式の添付ファイルは,マッピング元であるJava型とJavaインタフェースに指定する添付ファイルのデータサイズによって,添付ファイルパートへのマッピング方法が異なります。マッピング方法を次の表に示します。

表30-10 MTOM/XOP仕様形式の添付ファイルのデータサイズによる添付ファイルパートへのマッピング

項番Java型添付ファイルのデータサイズ添付ファイルパートへのマッピング
1byte[]nullマッピングしない※1
20バイトのデータマッピングする※2
30バイトより多いバイト数のデータマッピングする※3
4java.awt.Image型nullマッピングしない※1
50バイトのデータマッピングしない※1
60バイトより多いバイト数のデータマッピングする※3
7javax.xml.transform.Source型nullマッピングしない※1
80バイトのデータマッピングする※2
90バイトより多いバイト数のデータマッピングする※3
10javax.activation.DataHandler型nullマッピングしない※1
110バイトのデータマッピングする※2
120バイトより多いバイト数のデータマッピングする※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インタフェースで複数の添付ファイルデータを指定している場合は,添付ファイルパートは複数となります。