Cosminexus アプリケーションサーバ V8 Webサービス開発の手引

[目次][用語][索引][前へ][次へ]

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

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

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

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

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

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

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

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

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

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

図20-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インタフェースに指定する添付ファイルのデータサイズによって,添付ファイルパートへのマッピング方法が異なります。マッピング方法を次の表に示します。

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

項番 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インタフェースで複数の添付ファイルデータを指定している場合は,添付ファイルパートは複数となります。